From 2516b83f4924e786fa2d62fabfcd44c1f50965ce Mon Sep 17 00:00:00 2001 From: Philipp Page Date: Wed, 29 Oct 2025 17:37:15 +0100 Subject: [PATCH 001/202] feat(idempotency): Add functional `Idempotency` API (#2244) * Decouple AspectJ dependencies on pjp from IdempotencyHandler. * Create PowertoolsIdempotency functional API with overloads for all use-cases. * Make IdempotencyConfig thread-safe to avoid Lamdba context leaks in config singleton. * Fix bug: We need to pass the return type explicitly to support deserialization to the return type of the method. * Address some pmd findings. * Make java doc consistent in PowertoolsIdempotency. * Hide checked exceptions (from AspectJ) from user-facing API in PowertoolsIdempotency. * Remove unncessary try catch Throwable in unit tests * Add E2E test for functional idempotency API. * Fix sonar issues. * Remove unncessary constructors for Input object. * Add support for generic types. * Merge PowertoolsIdempotency with Idempotency to offer a single entrypoint to idempotency. * Make ConfigHolder final. * Make ConfigHolder modifier order comply with java language spec. * Make Holder class final. --- .../handlers/idempotency-functional/pom.xml | 60 ++++ .../lambda/powertools/e2e/Function.java | 66 ++++ .../amazon/lambda/powertools/e2e/Input.java | 27 ++ .../aws-lambda-java-core/reflect-config.json | 13 + .../reflect-config.json | 35 ++ .../jni-config.json | 11 + .../native-image.properties | 1 + .../reflect-config.json | 61 ++++ .../resource-config.json | 19 ++ .../reflect-config.json | 25 ++ .../reflect-config.json | 20 ++ .../resource-config.json | 7 + .../src/main/resources/log4j2.xml | 16 + .../handlers/idempotency-generics/pom.xml | 60 ++++ .../lambda/powertools/e2e/Function.java | 78 +++++ .../amazon/lambda/powertools/e2e/Input.java | 27 ++ .../aws-lambda-java-core/reflect-config.json | 13 + .../reflect-config.json | 35 ++ .../jni-config.json | 11 + .../native-image.properties | 1 + .../reflect-config.json | 61 ++++ .../resource-config.json | 19 ++ .../reflect-config.json | 25 ++ .../reflect-config.json | 20 ++ .../resource-config.json | 7 + .../src/main/resources/log4j2.xml | 16 + powertools-e2e-tests/handlers/pom.xml | 2 + .../lambda/powertools/IdempotencyE2ET.java | 31 +- .../powertools/idempotency/Idempotency.java | 238 +++++++++++++- .../idempotency/IdempotencyConfig.java | 8 +- .../internal/IdempotencyHandler.java | 28 +- .../internal/IdempotentAspect.java | 28 +- .../internal/IdempotentFunction.java | 30 ++ .../idempotency/internal/cache/LRUCache.java | 4 +- .../idempotency/IdempotencyTest.java | 311 ++++++++++++++++++ .../IdempotencyFunctionalFunction.java | 48 +++ ...IdempotencyMultiArgFunctionalFunction.java | 54 +++ .../internal/IdempotencyAspectTest.java | 71 +++- .../testutils/InMemoryPersistenceStore.java | 58 ++++ .../powertools/utilities/JsonConfig.java | 28 +- 40 files changed, 1612 insertions(+), 61 deletions(-) create mode 100644 powertools-e2e-tests/handlers/idempotency-functional/pom.xml create mode 100644 powertools-e2e-tests/handlers/idempotency-functional/src/main/java/software/amazon/lambda/powertools/e2e/Function.java create mode 100644 powertools-e2e-tests/handlers/idempotency-functional/src/main/java/software/amazon/lambda/powertools/e2e/Input.java create mode 100644 powertools-e2e-tests/handlers/idempotency-functional/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-core/reflect-config.json create mode 100644 powertools-e2e-tests/handlers/idempotency-functional/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-events/reflect-config.json create mode 100644 powertools-e2e-tests/handlers/idempotency-functional/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/jni-config.json create mode 100644 powertools-e2e-tests/handlers/idempotency-functional/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/native-image.properties create mode 100644 powertools-e2e-tests/handlers/idempotency-functional/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/reflect-config.json create mode 100644 powertools-e2e-tests/handlers/idempotency-functional/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/resource-config.json create mode 100644 powertools-e2e-tests/handlers/idempotency-functional/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-serialization/reflect-config.json create mode 100644 powertools-e2e-tests/handlers/idempotency-functional/src/main/resources/META-INF/native-image/software.amazon.lambda.powertools.e2e/reflect-config.json create mode 100644 powertools-e2e-tests/handlers/idempotency-functional/src/main/resources/META-INF/native-image/software.amazon.lambda.powertools.e2e/resource-config.json create mode 100644 powertools-e2e-tests/handlers/idempotency-functional/src/main/resources/log4j2.xml create mode 100644 powertools-e2e-tests/handlers/idempotency-generics/pom.xml create mode 100644 powertools-e2e-tests/handlers/idempotency-generics/src/main/java/software/amazon/lambda/powertools/e2e/Function.java create mode 100644 powertools-e2e-tests/handlers/idempotency-generics/src/main/java/software/amazon/lambda/powertools/e2e/Input.java create mode 100644 powertools-e2e-tests/handlers/idempotency-generics/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-core/reflect-config.json create mode 100644 powertools-e2e-tests/handlers/idempotency-generics/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-events/reflect-config.json create mode 100644 powertools-e2e-tests/handlers/idempotency-generics/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/jni-config.json create mode 100644 powertools-e2e-tests/handlers/idempotency-generics/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/native-image.properties create mode 100644 powertools-e2e-tests/handlers/idempotency-generics/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/reflect-config.json create mode 100644 powertools-e2e-tests/handlers/idempotency-generics/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/resource-config.json create mode 100644 powertools-e2e-tests/handlers/idempotency-generics/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-serialization/reflect-config.json create mode 100644 powertools-e2e-tests/handlers/idempotency-generics/src/main/resources/META-INF/native-image/software.amazon.lambda.powertools.e2e/reflect-config.json create mode 100644 powertools-e2e-tests/handlers/idempotency-generics/src/main/resources/META-INF/native-image/software.amazon.lambda.powertools.e2e/resource-config.json create mode 100644 powertools-e2e-tests/handlers/idempotency-generics/src/main/resources/log4j2.xml create mode 100644 powertools-idempotency/powertools-idempotency-core/src/main/java/software/amazon/lambda/powertools/idempotency/internal/IdempotentFunction.java create mode 100644 powertools-idempotency/powertools-idempotency-core/src/test/java/software/amazon/lambda/powertools/idempotency/IdempotencyTest.java create mode 100644 powertools-idempotency/powertools-idempotency-core/src/test/java/software/amazon/lambda/powertools/idempotency/handlers/IdempotencyFunctionalFunction.java create mode 100644 powertools-idempotency/powertools-idempotency-core/src/test/java/software/amazon/lambda/powertools/idempotency/handlers/IdempotencyMultiArgFunctionalFunction.java create mode 100644 powertools-idempotency/powertools-idempotency-core/src/test/java/software/amazon/lambda/powertools/idempotency/testutils/InMemoryPersistenceStore.java diff --git a/powertools-e2e-tests/handlers/idempotency-functional/pom.xml b/powertools-e2e-tests/handlers/idempotency-functional/pom.xml new file mode 100644 index 000000000..c8893c6e9 --- /dev/null +++ b/powertools-e2e-tests/handlers/idempotency-functional/pom.xml @@ -0,0 +1,60 @@ + + 4.0.0 + + + software.amazon.lambda + e2e-test-handlers-parent + 2.5.0 + + + e2e-test-handler-idempotency-functional + jar + E2E test handler – Idempotency Functional + + + + software.amazon.lambda + powertools-idempotency-dynamodb + + + software.amazon.lambda + powertools-logging-log4j + + + com.amazonaws + aws-lambda-java-events + + + com.amazonaws + aws-lambda-java-runtime-interface-client + + + com.amazonaws + aws-lambda-java-core + + + + + + + org.apache.maven.plugins + maven-shade-plugin + + + + + + + native-image + + + + org.graalvm.buildtools + native-maven-plugin + + + + + + diff --git a/powertools-e2e-tests/handlers/idempotency-functional/src/main/java/software/amazon/lambda/powertools/e2e/Function.java b/powertools-e2e-tests/handlers/idempotency-functional/src/main/java/software/amazon/lambda/powertools/e2e/Function.java new file mode 100644 index 000000000..fec7459c1 --- /dev/null +++ b/powertools-e2e-tests/handlers/idempotency-functional/src/main/java/software/amazon/lambda/powertools/e2e/Function.java @@ -0,0 +1,66 @@ +/* + * Copyright 2023 Amazon.com, Inc. or its affiliates. + * Licensed under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * 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. + * + */ + +package software.amazon.lambda.powertools.e2e; + +import java.time.Duration; +import java.time.Instant; +import java.time.format.DateTimeFormatter; +import java.time.temporal.ChronoUnit; +import java.util.TimeZone; + +import com.amazonaws.services.lambda.runtime.Context; +import com.amazonaws.services.lambda.runtime.RequestHandler; + +import software.amazon.awssdk.http.urlconnection.UrlConnectionHttpClient; +import software.amazon.awssdk.regions.Region; +import software.amazon.awssdk.services.dynamodb.DynamoDbClient; +import software.amazon.lambda.powertools.idempotency.Idempotency; +import software.amazon.lambda.powertools.idempotency.IdempotencyConfig; +import software.amazon.lambda.powertools.idempotency.persistence.dynamodb.DynamoDBPersistenceStore; + +public class Function implements RequestHandler { + + public Function() { + this(DynamoDbClient + .builder() + .httpClient(UrlConnectionHttpClient.builder().build()) + .region(Region.of(System.getenv("AWS_REGION"))) + .build()); + } + + public Function(DynamoDbClient client) { + Idempotency.config().withConfig( + IdempotencyConfig.builder() + .withExpiration(Duration.of(10, ChronoUnit.SECONDS)) + .build()) + .withPersistenceStore( + DynamoDBPersistenceStore.builder() + .withDynamoDbClient(client) + .withTableName(System.getenv("IDEMPOTENCY_TABLE")) + .build()) + .configure(); + } + + public String handleRequest(Input input, Context context) { + Idempotency.registerLambdaContext(context); + + return Idempotency.makeIdempotent(this::processRequest, input, String.class); + } + + private String processRequest(Input input) { + DateTimeFormatter dtf = DateTimeFormatter.ISO_DATE_TIME.withZone(TimeZone.getTimeZone("UTC").toZoneId()); + return dtf.format(Instant.now()); + } +} diff --git a/powertools-e2e-tests/handlers/idempotency-functional/src/main/java/software/amazon/lambda/powertools/e2e/Input.java b/powertools-e2e-tests/handlers/idempotency-functional/src/main/java/software/amazon/lambda/powertools/e2e/Input.java new file mode 100644 index 000000000..0d14b749e --- /dev/null +++ b/powertools-e2e-tests/handlers/idempotency-functional/src/main/java/software/amazon/lambda/powertools/e2e/Input.java @@ -0,0 +1,27 @@ +/* + * Copyright 2023 Amazon.com, Inc. or its affiliates. + * Licensed under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * 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. + * + */ + +package software.amazon.lambda.powertools.e2e; + +public class Input { + private String message; + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } +} diff --git a/powertools-e2e-tests/handlers/idempotency-functional/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-core/reflect-config.json b/powertools-e2e-tests/handlers/idempotency-functional/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-core/reflect-config.json new file mode 100644 index 000000000..2780aca09 --- /dev/null +++ b/powertools-e2e-tests/handlers/idempotency-functional/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-core/reflect-config.json @@ -0,0 +1,13 @@ +[ + { + "name":"com.amazonaws.services.lambda.runtime.LambdaRuntime", + "methods":[{"name":"","parameterTypes":[] }], + "fields":[{"name":"logger"}], + "allPublicMethods":true + }, + { + "name":"com.amazonaws.services.lambda.runtime.LambdaRuntimeInternal", + "methods":[{"name":"","parameterTypes":[] }], + "allPublicMethods":true + } +] \ No newline at end of file diff --git a/powertools-e2e-tests/handlers/idempotency-functional/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-events/reflect-config.json b/powertools-e2e-tests/handlers/idempotency-functional/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-events/reflect-config.json new file mode 100644 index 000000000..ddda5d5f1 --- /dev/null +++ b/powertools-e2e-tests/handlers/idempotency-functional/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-events/reflect-config.json @@ -0,0 +1,35 @@ +[ + { + "name": "com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent", + "allDeclaredFields": true, + "allDeclaredMethods": true, + "allDeclaredConstructors": true + }, + { + "name": "com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent$ProxyRequestContext", + "allDeclaredFields": true, + "allDeclaredMethods": true, + "allDeclaredConstructors": true + }, + { + "name": "com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent$RequestIdentity", + "allDeclaredFields": true, + "allDeclaredMethods": true, + "allDeclaredConstructors": true + }, + { + "name": "com.amazonaws.services.lambda.runtime.events.APIGatewayProxyResponseEvent", + "allDeclaredFields": true, + "allDeclaredMethods": true, + "allDeclaredConstructors": true + }, + { + "name": "com.amazonaws.services.lambda.runtime.events.APIGatewayProxyResponseEvent", + "allDeclaredConstructors": true, + "allPublicConstructors": true, + "allDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + } +] \ No newline at end of file diff --git a/powertools-e2e-tests/handlers/idempotency-functional/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/jni-config.json b/powertools-e2e-tests/handlers/idempotency-functional/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/jni-config.json new file mode 100644 index 000000000..91be72f7a --- /dev/null +++ b/powertools-e2e-tests/handlers/idempotency-functional/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/jni-config.json @@ -0,0 +1,11 @@ +[ + { + "name":"com.amazonaws.services.lambda.runtime.api.client.runtimeapi.LambdaRuntimeClientException", + "methods":[{"name":"","parameterTypes":["java.lang.String","int"] }] + }, + { + "name":"com.amazonaws.services.lambda.runtime.api.client.runtimeapi.dto.InvocationRequest", + "fields":[{"name":"id"}, {"name":"invokedFunctionArn"}, {"name":"deadlineTimeInMs"}, {"name":"xrayTraceId"}, {"name":"clientContext"}, {"name":"cognitoIdentity"}, {"name": "tenantId"}, {"name":"content"}], + "allPublicMethods":true + } +] \ No newline at end of file diff --git a/powertools-e2e-tests/handlers/idempotency-functional/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/native-image.properties b/powertools-e2e-tests/handlers/idempotency-functional/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/native-image.properties new file mode 100644 index 000000000..20f8b7801 --- /dev/null +++ b/powertools-e2e-tests/handlers/idempotency-functional/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/native-image.properties @@ -0,0 +1 @@ +Args = --initialize-at-build-time=jdk.xml.internal.SecuritySupport \ No newline at end of file diff --git a/powertools-e2e-tests/handlers/idempotency-functional/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/reflect-config.json b/powertools-e2e-tests/handlers/idempotency-functional/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/reflect-config.json new file mode 100644 index 000000000..e69fa735c --- /dev/null +++ b/powertools-e2e-tests/handlers/idempotency-functional/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/reflect-config.json @@ -0,0 +1,61 @@ +[ + { + "name": "com.amazonaws.lambda.thirdparty.com.fasterxml.jackson.databind.deser.Deserializers[]" + }, + { + "name": "com.amazonaws.lambda.thirdparty.com.fasterxml.jackson.databind.ext.Java7SupportImpl", + "methods": [{ "name": "", "parameterTypes": [] }] + }, + { + "name": "com.amazonaws.services.lambda.runtime.LambdaRuntime", + "fields": [{ "name": "logger" }] + }, + { + "name": "com.amazonaws.services.lambda.runtime.logging.LogLevel", + "allDeclaredConstructors": true, + "allPublicConstructors": true, + "allDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredFields": true, + "allPublicFields": true + }, + { + "name": "com.amazonaws.services.lambda.runtime.logging.LogFormat", + "allDeclaredConstructors": true, + "allPublicConstructors": true, + "allDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredFields": true, + "allPublicFields": true + }, + { + "name": "java.lang.Void", + "methods": [{ "name": "", "parameterTypes": [] }] + }, + { + "name": "java.util.Collections$UnmodifiableMap", + "fields": [{ "name": "m" }] + }, + { + "name": "jdk.internal.module.IllegalAccessLogger", + "fields": [{ "name": "logger" }] + }, + { + "name": "sun.misc.Unsafe", + "fields": [{ "name": "theUnsafe" }] + }, + { + "name": "com.amazonaws.services.lambda.runtime.api.client.runtimeapi.dto.InvocationRequest", + "fields": [ + { "name": "id" }, + { "name": "invokedFunctionArn" }, + { "name": "deadlineTimeInMs" }, + { "name": "xrayTraceId" }, + { "name": "clientContext" }, + { "name": "cognitoIdentity" }, + { "name": "tenantId" }, + { "name": "content" } + ], + "allPublicMethods": true + } +] diff --git a/powertools-e2e-tests/handlers/idempotency-functional/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/resource-config.json b/powertools-e2e-tests/handlers/idempotency-functional/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/resource-config.json new file mode 100644 index 000000000..1062b4249 --- /dev/null +++ b/powertools-e2e-tests/handlers/idempotency-functional/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/resource-config.json @@ -0,0 +1,19 @@ +{ + "resources": { + "includes": [ + { + "pattern": "\\Qjni/libaws-lambda-jni.linux-aarch_64.so\\E" + }, + { + "pattern": "\\Qjni/libaws-lambda-jni.linux-x86_64.so\\E" + }, + { + "pattern": "\\Qjni/libaws-lambda-jni.linux_musl-aarch_64.so\\E" + }, + { + "pattern": "\\Qjni/libaws-lambda-jni.linux_musl-x86_64.so\\E" + } + ] + }, + "bundles": [] +} \ No newline at end of file diff --git a/powertools-e2e-tests/handlers/idempotency-functional/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-serialization/reflect-config.json b/powertools-e2e-tests/handlers/idempotency-functional/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-serialization/reflect-config.json new file mode 100644 index 000000000..9890688f9 --- /dev/null +++ b/powertools-e2e-tests/handlers/idempotency-functional/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-serialization/reflect-config.json @@ -0,0 +1,25 @@ +[ + { + "name": "com.amazonaws.lambda.thirdparty.com.fasterxml.jackson.databind.deser.Deserializers[]" + }, + { + "name": "com.amazonaws.lambda.thirdparty.com.fasterxml.jackson.databind.ext.Java7HandlersImpl", + "methods": [{ "name": "", "parameterTypes": [] }] + }, + { + "name": "com.amazonaws.lambda.thirdparty.com.fasterxml.jackson.databind.ext.Java7SupportImpl", + "methods": [{ "name": "", "parameterTypes": [] }] + }, + { + "name": "com.amazonaws.lambda.thirdparty.com.fasterxml.jackson.databind.ser.Serializers[]" + }, + { + "name": "org.joda.time.DateTime", + "allDeclaredConstructors": true, + "allPublicConstructors": true, + "allDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + } +] diff --git a/powertools-e2e-tests/handlers/idempotency-functional/src/main/resources/META-INF/native-image/software.amazon.lambda.powertools.e2e/reflect-config.json b/powertools-e2e-tests/handlers/idempotency-functional/src/main/resources/META-INF/native-image/software.amazon.lambda.powertools.e2e/reflect-config.json new file mode 100644 index 000000000..9ddd235e2 --- /dev/null +++ b/powertools-e2e-tests/handlers/idempotency-functional/src/main/resources/META-INF/native-image/software.amazon.lambda.powertools.e2e/reflect-config.json @@ -0,0 +1,20 @@ +[ + { + "name": "software.amazon.lambda.powertools.e2e.Function", + "allDeclaredConstructors": true, + "allPublicConstructors": true, + "allDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "software.amazon.lambda.powertools.e2e.Input", + "allDeclaredConstructors": true, + "allPublicConstructors": true, + "allDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + } +] diff --git a/powertools-e2e-tests/handlers/idempotency-functional/src/main/resources/META-INF/native-image/software.amazon.lambda.powertools.e2e/resource-config.json b/powertools-e2e-tests/handlers/idempotency-functional/src/main/resources/META-INF/native-image/software.amazon.lambda.powertools.e2e/resource-config.json new file mode 100644 index 000000000..be6aac3f6 --- /dev/null +++ b/powertools-e2e-tests/handlers/idempotency-functional/src/main/resources/META-INF/native-image/software.amazon.lambda.powertools.e2e/resource-config.json @@ -0,0 +1,7 @@ +{ + "resources":{ + "includes":[{ + "pattern":"\\Qlog4j2.xml\\E" + }]}, + "bundles":[] +} diff --git a/powertools-e2e-tests/handlers/idempotency-functional/src/main/resources/log4j2.xml b/powertools-e2e-tests/handlers/idempotency-functional/src/main/resources/log4j2.xml new file mode 100644 index 000000000..8925f70b9 --- /dev/null +++ b/powertools-e2e-tests/handlers/idempotency-functional/src/main/resources/log4j2.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/powertools-e2e-tests/handlers/idempotency-generics/pom.xml b/powertools-e2e-tests/handlers/idempotency-generics/pom.xml new file mode 100644 index 000000000..5387d4059 --- /dev/null +++ b/powertools-e2e-tests/handlers/idempotency-generics/pom.xml @@ -0,0 +1,60 @@ + + 4.0.0 + + + software.amazon.lambda + e2e-test-handlers-parent + 2.5.0 + + + e2e-test-handler-idempotency-generics + jar + E2E test handler – Idempotency Generics + + + + software.amazon.lambda + powertools-idempotency-dynamodb + + + software.amazon.lambda + powertools-logging-log4j + + + com.amazonaws + aws-lambda-java-events + + + com.amazonaws + aws-lambda-java-runtime-interface-client + + + com.amazonaws + aws-lambda-java-core + + + + + + + org.apache.maven.plugins + maven-shade-plugin + + + + + + + native-image + + + + org.graalvm.buildtools + native-maven-plugin + + + + + + diff --git a/powertools-e2e-tests/handlers/idempotency-generics/src/main/java/software/amazon/lambda/powertools/e2e/Function.java b/powertools-e2e-tests/handlers/idempotency-generics/src/main/java/software/amazon/lambda/powertools/e2e/Function.java new file mode 100644 index 000000000..09e39d1eb --- /dev/null +++ b/powertools-e2e-tests/handlers/idempotency-generics/src/main/java/software/amazon/lambda/powertools/e2e/Function.java @@ -0,0 +1,78 @@ +/* + * Copyright 2023 Amazon.com, Inc. or its affiliates. + * Licensed under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * 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. + * + */ + +package software.amazon.lambda.powertools.e2e; + +import java.time.Duration; +import java.time.Instant; +import java.time.format.DateTimeFormatter; +import java.time.temporal.ChronoUnit; +import java.util.HashMap; +import java.util.Map; +import java.util.TimeZone; + +import com.amazonaws.services.lambda.runtime.Context; +import com.amazonaws.services.lambda.runtime.RequestHandler; +import com.fasterxml.jackson.core.type.TypeReference; + +import software.amazon.awssdk.http.urlconnection.UrlConnectionHttpClient; +import software.amazon.awssdk.regions.Region; +import software.amazon.awssdk.services.dynamodb.DynamoDbClient; +import software.amazon.lambda.powertools.idempotency.Idempotency; +import software.amazon.lambda.powertools.idempotency.IdempotencyConfig; +import software.amazon.lambda.powertools.idempotency.persistence.dynamodb.DynamoDBPersistenceStore; + +public class Function implements RequestHandler { + + public Function() { + this(DynamoDbClient + .builder() + .httpClient(UrlConnectionHttpClient.builder().build()) + .region(Region.of(System.getenv("AWS_REGION"))) + .build()); + } + + public Function(DynamoDbClient client) { + Idempotency.config().withConfig( + IdempotencyConfig.builder() + .withExpiration(Duration.of(10, ChronoUnit.SECONDS)) + .build()) + .withPersistenceStore( + DynamoDBPersistenceStore.builder() + .withDynamoDbClient(client) + .withTableName(System.getenv("IDEMPOTENCY_TABLE")) + .build()) + .configure(); + } + + public String handleRequest(Input input, Context context) { + Idempotency.registerLambdaContext(context); + + // This is just to test the generic type support using TypeReference. + // We return the same String to run the same assertions as other idempotency E2E handlers. + Map result = Idempotency.makeIdempotent( + this::processRequest, + input, + new TypeReference>() {}); + + return result.get("timestamp"); + } + + private Map processRequest(Input input) { + DateTimeFormatter dtf = DateTimeFormatter.ISO_DATE_TIME.withZone(TimeZone.getTimeZone("UTC").toZoneId()); + Map result = new HashMap<>(); + result.put("timestamp", dtf.format(Instant.now())); + return result; + } +} diff --git a/powertools-e2e-tests/handlers/idempotency-generics/src/main/java/software/amazon/lambda/powertools/e2e/Input.java b/powertools-e2e-tests/handlers/idempotency-generics/src/main/java/software/amazon/lambda/powertools/e2e/Input.java new file mode 100644 index 000000000..0d14b749e --- /dev/null +++ b/powertools-e2e-tests/handlers/idempotency-generics/src/main/java/software/amazon/lambda/powertools/e2e/Input.java @@ -0,0 +1,27 @@ +/* + * Copyright 2023 Amazon.com, Inc. or its affiliates. + * Licensed under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * 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. + * + */ + +package software.amazon.lambda.powertools.e2e; + +public class Input { + private String message; + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } +} diff --git a/powertools-e2e-tests/handlers/idempotency-generics/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-core/reflect-config.json b/powertools-e2e-tests/handlers/idempotency-generics/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-core/reflect-config.json new file mode 100644 index 000000000..2780aca09 --- /dev/null +++ b/powertools-e2e-tests/handlers/idempotency-generics/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-core/reflect-config.json @@ -0,0 +1,13 @@ +[ + { + "name":"com.amazonaws.services.lambda.runtime.LambdaRuntime", + "methods":[{"name":"","parameterTypes":[] }], + "fields":[{"name":"logger"}], + "allPublicMethods":true + }, + { + "name":"com.amazonaws.services.lambda.runtime.LambdaRuntimeInternal", + "methods":[{"name":"","parameterTypes":[] }], + "allPublicMethods":true + } +] \ No newline at end of file diff --git a/powertools-e2e-tests/handlers/idempotency-generics/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-events/reflect-config.json b/powertools-e2e-tests/handlers/idempotency-generics/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-events/reflect-config.json new file mode 100644 index 000000000..ddda5d5f1 --- /dev/null +++ b/powertools-e2e-tests/handlers/idempotency-generics/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-events/reflect-config.json @@ -0,0 +1,35 @@ +[ + { + "name": "com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent", + "allDeclaredFields": true, + "allDeclaredMethods": true, + "allDeclaredConstructors": true + }, + { + "name": "com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent$ProxyRequestContext", + "allDeclaredFields": true, + "allDeclaredMethods": true, + "allDeclaredConstructors": true + }, + { + "name": "com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent$RequestIdentity", + "allDeclaredFields": true, + "allDeclaredMethods": true, + "allDeclaredConstructors": true + }, + { + "name": "com.amazonaws.services.lambda.runtime.events.APIGatewayProxyResponseEvent", + "allDeclaredFields": true, + "allDeclaredMethods": true, + "allDeclaredConstructors": true + }, + { + "name": "com.amazonaws.services.lambda.runtime.events.APIGatewayProxyResponseEvent", + "allDeclaredConstructors": true, + "allPublicConstructors": true, + "allDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + } +] \ No newline at end of file diff --git a/powertools-e2e-tests/handlers/idempotency-generics/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/jni-config.json b/powertools-e2e-tests/handlers/idempotency-generics/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/jni-config.json new file mode 100644 index 000000000..91be72f7a --- /dev/null +++ b/powertools-e2e-tests/handlers/idempotency-generics/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/jni-config.json @@ -0,0 +1,11 @@ +[ + { + "name":"com.amazonaws.services.lambda.runtime.api.client.runtimeapi.LambdaRuntimeClientException", + "methods":[{"name":"","parameterTypes":["java.lang.String","int"] }] + }, + { + "name":"com.amazonaws.services.lambda.runtime.api.client.runtimeapi.dto.InvocationRequest", + "fields":[{"name":"id"}, {"name":"invokedFunctionArn"}, {"name":"deadlineTimeInMs"}, {"name":"xrayTraceId"}, {"name":"clientContext"}, {"name":"cognitoIdentity"}, {"name": "tenantId"}, {"name":"content"}], + "allPublicMethods":true + } +] \ No newline at end of file diff --git a/powertools-e2e-tests/handlers/idempotency-generics/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/native-image.properties b/powertools-e2e-tests/handlers/idempotency-generics/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/native-image.properties new file mode 100644 index 000000000..20f8b7801 --- /dev/null +++ b/powertools-e2e-tests/handlers/idempotency-generics/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/native-image.properties @@ -0,0 +1 @@ +Args = --initialize-at-build-time=jdk.xml.internal.SecuritySupport \ No newline at end of file diff --git a/powertools-e2e-tests/handlers/idempotency-generics/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/reflect-config.json b/powertools-e2e-tests/handlers/idempotency-generics/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/reflect-config.json new file mode 100644 index 000000000..e69fa735c --- /dev/null +++ b/powertools-e2e-tests/handlers/idempotency-generics/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/reflect-config.json @@ -0,0 +1,61 @@ +[ + { + "name": "com.amazonaws.lambda.thirdparty.com.fasterxml.jackson.databind.deser.Deserializers[]" + }, + { + "name": "com.amazonaws.lambda.thirdparty.com.fasterxml.jackson.databind.ext.Java7SupportImpl", + "methods": [{ "name": "", "parameterTypes": [] }] + }, + { + "name": "com.amazonaws.services.lambda.runtime.LambdaRuntime", + "fields": [{ "name": "logger" }] + }, + { + "name": "com.amazonaws.services.lambda.runtime.logging.LogLevel", + "allDeclaredConstructors": true, + "allPublicConstructors": true, + "allDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredFields": true, + "allPublicFields": true + }, + { + "name": "com.amazonaws.services.lambda.runtime.logging.LogFormat", + "allDeclaredConstructors": true, + "allPublicConstructors": true, + "allDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredFields": true, + "allPublicFields": true + }, + { + "name": "java.lang.Void", + "methods": [{ "name": "", "parameterTypes": [] }] + }, + { + "name": "java.util.Collections$UnmodifiableMap", + "fields": [{ "name": "m" }] + }, + { + "name": "jdk.internal.module.IllegalAccessLogger", + "fields": [{ "name": "logger" }] + }, + { + "name": "sun.misc.Unsafe", + "fields": [{ "name": "theUnsafe" }] + }, + { + "name": "com.amazonaws.services.lambda.runtime.api.client.runtimeapi.dto.InvocationRequest", + "fields": [ + { "name": "id" }, + { "name": "invokedFunctionArn" }, + { "name": "deadlineTimeInMs" }, + { "name": "xrayTraceId" }, + { "name": "clientContext" }, + { "name": "cognitoIdentity" }, + { "name": "tenantId" }, + { "name": "content" } + ], + "allPublicMethods": true + } +] diff --git a/powertools-e2e-tests/handlers/idempotency-generics/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/resource-config.json b/powertools-e2e-tests/handlers/idempotency-generics/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/resource-config.json new file mode 100644 index 000000000..1062b4249 --- /dev/null +++ b/powertools-e2e-tests/handlers/idempotency-generics/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/resource-config.json @@ -0,0 +1,19 @@ +{ + "resources": { + "includes": [ + { + "pattern": "\\Qjni/libaws-lambda-jni.linux-aarch_64.so\\E" + }, + { + "pattern": "\\Qjni/libaws-lambda-jni.linux-x86_64.so\\E" + }, + { + "pattern": "\\Qjni/libaws-lambda-jni.linux_musl-aarch_64.so\\E" + }, + { + "pattern": "\\Qjni/libaws-lambda-jni.linux_musl-x86_64.so\\E" + } + ] + }, + "bundles": [] +} \ No newline at end of file diff --git a/powertools-e2e-tests/handlers/idempotency-generics/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-serialization/reflect-config.json b/powertools-e2e-tests/handlers/idempotency-generics/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-serialization/reflect-config.json new file mode 100644 index 000000000..9890688f9 --- /dev/null +++ b/powertools-e2e-tests/handlers/idempotency-generics/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-serialization/reflect-config.json @@ -0,0 +1,25 @@ +[ + { + "name": "com.amazonaws.lambda.thirdparty.com.fasterxml.jackson.databind.deser.Deserializers[]" + }, + { + "name": "com.amazonaws.lambda.thirdparty.com.fasterxml.jackson.databind.ext.Java7HandlersImpl", + "methods": [{ "name": "", "parameterTypes": [] }] + }, + { + "name": "com.amazonaws.lambda.thirdparty.com.fasterxml.jackson.databind.ext.Java7SupportImpl", + "methods": [{ "name": "", "parameterTypes": [] }] + }, + { + "name": "com.amazonaws.lambda.thirdparty.com.fasterxml.jackson.databind.ser.Serializers[]" + }, + { + "name": "org.joda.time.DateTime", + "allDeclaredConstructors": true, + "allPublicConstructors": true, + "allDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + } +] diff --git a/powertools-e2e-tests/handlers/idempotency-generics/src/main/resources/META-INF/native-image/software.amazon.lambda.powertools.e2e/reflect-config.json b/powertools-e2e-tests/handlers/idempotency-generics/src/main/resources/META-INF/native-image/software.amazon.lambda.powertools.e2e/reflect-config.json new file mode 100644 index 000000000..9ddd235e2 --- /dev/null +++ b/powertools-e2e-tests/handlers/idempotency-generics/src/main/resources/META-INF/native-image/software.amazon.lambda.powertools.e2e/reflect-config.json @@ -0,0 +1,20 @@ +[ + { + "name": "software.amazon.lambda.powertools.e2e.Function", + "allDeclaredConstructors": true, + "allPublicConstructors": true, + "allDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "software.amazon.lambda.powertools.e2e.Input", + "allDeclaredConstructors": true, + "allPublicConstructors": true, + "allDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + } +] diff --git a/powertools-e2e-tests/handlers/idempotency-generics/src/main/resources/META-INF/native-image/software.amazon.lambda.powertools.e2e/resource-config.json b/powertools-e2e-tests/handlers/idempotency-generics/src/main/resources/META-INF/native-image/software.amazon.lambda.powertools.e2e/resource-config.json new file mode 100644 index 000000000..be6aac3f6 --- /dev/null +++ b/powertools-e2e-tests/handlers/idempotency-generics/src/main/resources/META-INF/native-image/software.amazon.lambda.powertools.e2e/resource-config.json @@ -0,0 +1,7 @@ +{ + "resources":{ + "includes":[{ + "pattern":"\\Qlog4j2.xml\\E" + }]}, + "bundles":[] +} diff --git a/powertools-e2e-tests/handlers/idempotency-generics/src/main/resources/log4j2.xml b/powertools-e2e-tests/handlers/idempotency-generics/src/main/resources/log4j2.xml new file mode 100644 index 000000000..8925f70b9 --- /dev/null +++ b/powertools-e2e-tests/handlers/idempotency-generics/src/main/resources/log4j2.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/powertools-e2e-tests/handlers/pom.xml b/powertools-e2e-tests/handlers/pom.xml index ae075b71d..7a7da9e02 100644 --- a/powertools-e2e-tests/handlers/pom.xml +++ b/powertools-e2e-tests/handlers/pom.xml @@ -34,6 +34,8 @@ tracing metrics idempotency + idempotency-functional + idempotency-generics parameters validation-alb-event validation-apigw-event diff --git a/powertools-e2e-tests/src/test/java/software/amazon/lambda/powertools/IdempotencyE2ET.java b/powertools-e2e-tests/src/test/java/software/amazon/lambda/powertools/IdempotencyE2ET.java index c73a6d761..9ced0e4fb 100644 --- a/powertools-e2e-tests/src/test/java/software/amazon/lambda/powertools/IdempotencyE2ET.java +++ b/powertools-e2e-tests/src/test/java/software/amazon/lambda/powertools/IdempotencyE2ET.java @@ -23,40 +23,43 @@ import java.util.concurrent.TimeUnit; import org.assertj.core.api.Assertions; -import org.junit.jupiter.api.AfterAll; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.TestInstance; import org.junit.jupiter.api.Timeout; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; import software.amazon.lambda.powertools.testutils.Infrastructure; import software.amazon.lambda.powertools.testutils.lambda.InvocationResult; +@TestInstance(TestInstance.Lifecycle.PER_CLASS) class IdempotencyE2ET { - private static Infrastructure infrastructure; - private static String functionName; + private Infrastructure infrastructure; + private String functionName; - @BeforeAll - @Timeout(value = 15, unit = TimeUnit.MINUTES) - static void setup() { + private void setupInfrastructure(String pathToFunction) { String random = UUID.randomUUID().toString().substring(0, 6); infrastructure = Infrastructure.builder() - .testName(IdempotencyE2ET.class.getSimpleName()) - .pathToFunction("idempotency") + .testName(IdempotencyE2ET.class.getSimpleName() + "-" + pathToFunction) + .pathToFunction(pathToFunction) .idempotencyTable("idempo" + random) .build(); Map outputs = infrastructure.deploy(); functionName = outputs.get(FUNCTION_NAME_OUTPUT); } - @AfterAll - static void tearDown() { + @AfterEach + void tearDown() { if (infrastructure != null) { infrastructure.destroy(); } } - @Test - void test_ttlNotExpired_sameResult_ttlExpired_differentResult() throws InterruptedException { + @ParameterizedTest + @ValueSource(strings = { "idempotency", "idempotency-functional", "idempotency-generics" }) + @Timeout(value = 15, unit = TimeUnit.MINUTES) + void test_ttlNotExpired_sameResult_ttlExpired_differentResult(String pathToFunction) throws InterruptedException { + setupInfrastructure(pathToFunction); // GIVEN String event = "{\"message\":\"TTL 10sec\"}"; diff --git a/powertools-idempotency/powertools-idempotency-core/src/main/java/software/amazon/lambda/powertools/idempotency/Idempotency.java b/powertools-idempotency/powertools-idempotency-core/src/main/java/software/amazon/lambda/powertools/idempotency/Idempotency.java index bd564caf8..4f73edea0 100644 --- a/powertools-idempotency/powertools-idempotency-core/src/main/java/software/amazon/lambda/powertools/idempotency/Idempotency.java +++ b/powertools-idempotency/powertools-idempotency-core/src/main/java/software/amazon/lambda/powertools/idempotency/Idempotency.java @@ -14,25 +14,87 @@ package software.amazon.lambda.powertools.idempotency; +import java.util.function.Function; +import java.util.function.Supplier; + import com.amazonaws.services.lambda.runtime.Context; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.JsonNode; + +import software.amazon.lambda.powertools.idempotency.exceptions.IdempotencyConfigurationException; +import software.amazon.lambda.powertools.idempotency.internal.IdempotencyHandler; import software.amazon.lambda.powertools.idempotency.persistence.BasePersistenceStore; +import software.amazon.lambda.powertools.utilities.JsonConfig; /** - * Holds the configuration for idempotency: - *
    - *
  • The persistence layer to use for persisting the request and response of the function (mandatory).
  • - *
  • The general configuration for idempotency (optional, see {@link IdempotencyConfig.Builder} methods to see defaults values.
  • - *
- *
- * Use it before the function handler ({@link com.amazonaws.services.lambda.runtime.RequestHandler#handleRequest(Object, Context)}) - * get called. - *
- * Example: - *
- *     Idempotency.config().withPersistenceStore(...).configure();
- * 
+ * Idempotency provides both a configuration and a functional API for implementing idempotent workloads. + * + *

This class is thread-safe. All operations delegate to the underlying persistence store + * which handles concurrent access safely.

+ * + *

Configuration

+ *

Configure the persistence layer and idempotency settings before your handler executes (e.g. in constructor):

+ *
{@code
+ * Idempotency.config()
+ *     .withPersistenceStore(persistenceStore)
+ *     .withConfig(idempotencyConfig)
+ *     .configure();
+ * }
+ * + *

Functional API

+ *

Make methods idempotent without AspectJ annotations. Generic return types (e.g., {@code Map}, + * {@code List}) are supported via Jackson {@link TypeReference}.

+ * + *

Important: Always call {@link #registerLambdaContext(Context)} + * at the start of your handler to enable proper timeout handling.

+ * + *

Example usage with Function (single parameter):

+ *
{@code
+ * public Basket handleRequest(Product input, Context context) {
+ *     Idempotency.registerLambdaContext(context);
+ *     return Idempotency.makeIdempotent(this::processProduct, input, Basket.class);
+ * }
+ * 
+ * private Basket processProduct(Product product) {
+ *     // business logic
+ * }
+ * }
+ * + *

Example usage with Supplier (multi-parameter methods):

+ *
{@code
+ * public String handleRequest(SQSEvent event, Context context) {
+ *     Idempotency.registerLambdaContext(context);
+ *     return Idempotency.makeIdempotent(
+ *         event.getRecords().get(0).getBody(),
+ *         () -> processPayment(orderId, amount, currency),
+ *         String.class
+ *     );
+ * }
+ * }
+ * + *

When different methods use the same payload as idempotency key, use explicit function names + * to differentiate between them:

+ *
{@code
+ * // Different methods, same payload
+ * Idempotency.makeIdempotent("processPayment", orderId, 
+ *     () -> processPayment(orderId), String.class);
+ * 
+ * Idempotency.makeIdempotent("refundPayment", orderId, 
+ *     () -> refundPayment(orderId), String.class);
+ * }
+ * + * @see #config() + * @see #registerLambdaContext(Context) + * @see #makeIdempotent(Object, Supplier, Class) + * @see #makeIdempotent(String, Object, Supplier, Class) + * @see #makeIdempotent(Function, Object, Class) + * @see #makeIdempotent(Object, Supplier, TypeReference) + * @see #makeIdempotent(String, Object, Supplier, TypeReference) + * @see #makeIdempotent(Function, Object, TypeReference) */ -public class Idempotency { +public final class Idempotency { + private static final String DEFAULT_FUNCTION_NAME = "function"; + private IdempotencyConfig config; private BasePersistenceStore persistenceStore; @@ -81,7 +143,7 @@ private void setPersistenceStore(BasePersistenceStore persistenceStore) { this.persistenceStore = persistenceStore; } - private static class Holder { + private static final class Holder { private static final Idempotency instance = new Idempotency(); } @@ -116,5 +178,151 @@ public Config withConfig(IdempotencyConfig config) { } } + // Functional API methods + + /** + * Makes a function idempotent using the provided idempotency key. + * Uses a default function name for namespacing the idempotency key. + * + *

This method is thread-safe and can be used in parallel processing scenarios + * such as batch processors.

+ * + *

This method is suitable for making methods idempotent that have more than one parameter. + * For simple single-parameter methods, {@link #makeIdempotent(Function, Object, Class)} is more intuitive.

+ * + *

Note: If you need to call different functions with the same payload, + * use {@link #makeIdempotent(String, Object, Supplier, Class)} to specify distinct function names. + * This ensures each function has its own idempotency scope.

+ * + * @param idempotencyKey the key used for idempotency (will be converted to JSON) + * @param function the function to make idempotent + * @param returnType the class of the return type for deserialization + * @param the return type of the function + * @return the result of the function execution (either fresh or cached) + */ + public static T makeIdempotent(Object idempotencyKey, Supplier function, Class returnType) { + return makeIdempotent(DEFAULT_FUNCTION_NAME, idempotencyKey, function, returnType); + } + + /** + * Makes a function idempotent using the provided function name and idempotency key. + * + *

This method is thread-safe and can be used in parallel processing scenarios + * such as batch processors.

+ * + * @param functionName the name of the function (used for persistence store configuration) + * @param idempotencyKey the key used for idempotency (will be converted to JSON) + * @param function the function to make idempotent + * @param returnType the class of the return type for deserialization + * @param the return type of the function + * @return the result of the function execution (either fresh or cached) + */ + public static T makeIdempotent(String functionName, Object idempotencyKey, Supplier function, + Class returnType) { + return makeIdempotent(functionName, idempotencyKey, function, JsonConfig.toTypeReference(returnType)); + } + + /** + * Makes a function with one parameter idempotent. + * The parameter is used as the idempotency key. + * + *

For functions with more than one parameter, use {@link #makeIdempotent(Object, Supplier, Class)} instead.

+ * + *

Note: If you need to call different functions with the same payload, + * use {@link #makeIdempotent(String, Object, Supplier, Class)} to specify distinct function names. + * This ensures each function has its own idempotency scope.

+ * + * @param function the function to make idempotent (method reference) + * @param arg the argument to pass to the function (also used as idempotency key) + * @param returnType the class of the return type for deserialization + * @param the argument type + * @param the return type + * @return the result of the function execution (either fresh or cached) + */ + public static R makeIdempotent(Function function, T arg, Class returnType) { + return makeIdempotent(DEFAULT_FUNCTION_NAME, arg, () -> function.apply(arg), returnType); + } + + /** + * Makes a function idempotent using the provided idempotency key with support for generic return types. + * Uses a default function name for namespacing the idempotency key. + * + *

Use this method when the return type contains generics (e.g., {@code Map}).

+ * + *

Example usage:

+ *
{@code
+     * Map result = Idempotency.makeIdempotent(
+     *     payload,
+     *     () -> processBaskets(),
+     *     new TypeReference>() {}
+     * );
+     * }
+ * + * @param idempotencyKey the key used for idempotency (will be converted to JSON) + * @param function the function to make idempotent + * @param typeRef the TypeReference for deserialization of generic types + * @param the return type of the function + * @return the result of the function execution (either fresh or cached) + */ + public static T makeIdempotent(Object idempotencyKey, Supplier function, TypeReference typeRef) { + return makeIdempotent(DEFAULT_FUNCTION_NAME, idempotencyKey, function, typeRef); + } + + /** + * Makes a function idempotent using the provided function name and idempotency key with support for generic return types. + * + * @param functionName the name of the function (used for persistence store configuration) + * @param idempotencyKey the key used for idempotency (will be converted to JSON) + * @param function the function to make idempotent + * @param typeRef the TypeReference for deserialization of generic types + * @param the return type of the function + * @return the result of the function execution (either fresh or cached) + */ + @SuppressWarnings("unchecked") + public static T makeIdempotent(String functionName, Object idempotencyKey, Supplier function, + TypeReference typeRef) { + try { + JsonNode payload = JsonConfig.get().getObjectMapper().valueToTree(idempotencyKey); + Context lambdaContext = Idempotency.getInstance().getConfig().getLambdaContext(); + + IdempotencyHandler handler = new IdempotencyHandler( + function::get, + typeRef, + functionName, + payload, + lambdaContext); + + Object result = handler.handle(); + return (T) result; + } catch (RuntimeException e) { + throw e; + } catch (Throwable e) { + throw new IdempotencyConfigurationException("Idempotency operation failed: " + e.getMessage()); + } + } + + /** + * Makes a function with one parameter idempotent with support for generic return types. + * The parameter is used as the idempotency key. + * + *

Example usage:

+ *
{@code
+     * Map result = Idempotency.makeIdempotent(
+     *     this::processProduct,
+     *     product,
+     *     new TypeReference>() {}
+     * );
+     * }
+ * + * @param function the function to make idempotent (method reference) + * @param arg the argument to pass to the function (also used as idempotency key) + * @param typeRef the TypeReference for deserialization of generic types + * @param the argument type + * @param the return type + * @return the result of the function execution (either fresh or cached) + */ + public static R makeIdempotent(Function function, T arg, TypeReference typeRef) { + return makeIdempotent(DEFAULT_FUNCTION_NAME, arg, () -> function.apply(arg), typeRef); + } } diff --git a/powertools-idempotency/powertools-idempotency-core/src/main/java/software/amazon/lambda/powertools/idempotency/IdempotencyConfig.java b/powertools-idempotency/powertools-idempotency-core/src/main/java/software/amazon/lambda/powertools/idempotency/IdempotencyConfig.java index 9d5c66cac..0d9504483 100644 --- a/powertools-idempotency/powertools-idempotency-core/src/main/java/software/amazon/lambda/powertools/idempotency/IdempotencyConfig.java +++ b/powertools-idempotency/powertools-idempotency-core/src/main/java/software/amazon/lambda/powertools/idempotency/IdempotencyConfig.java @@ -25,7 +25,7 @@ /** * Configuration of the idempotency feature. Use the {@link Builder} to create an instance. */ -public class IdempotencyConfig { +public final class IdempotencyConfig { private final int localCacheMaxItems; private final boolean useLocalCache; private final long expirationInSeconds; @@ -34,7 +34,7 @@ public class IdempotencyConfig { private final boolean throwOnNoIdempotencyKey; private final String hashFunction; private final BiFunction responseHook; - private Context lambdaContext; + private final InheritableThreadLocal lambdaContext = new InheritableThreadLocal<>(); private IdempotencyConfig(String eventKeyJMESPath, String payloadValidationJMESPath, boolean throwOnNoIdempotencyKey, boolean useLocalCache, int localCacheMaxItems, @@ -87,11 +87,11 @@ public String getHashFunction() { } public Context getLambdaContext() { - return lambdaContext; + return lambdaContext.get(); } public void setLambdaContext(Context lambdaContext) { - this.lambdaContext = lambdaContext; + this.lambdaContext.set(lambdaContext); } public BiFunction getResponseHook() { diff --git a/powertools-idempotency/powertools-idempotency-core/src/main/java/software/amazon/lambda/powertools/idempotency/internal/IdempotencyHandler.java b/powertools-idempotency/powertools-idempotency-core/src/main/java/software/amazon/lambda/powertools/idempotency/internal/IdempotencyHandler.java index 0466f244f..77d3d49b0 100644 --- a/powertools-idempotency/powertools-idempotency-core/src/main/java/software/amazon/lambda/powertools/idempotency/internal/IdempotencyHandler.java +++ b/powertools-idempotency/powertools-idempotency-core/src/main/java/software/amazon/lambda/powertools/idempotency/internal/IdempotencyHandler.java @@ -21,12 +21,11 @@ import java.util.OptionalInt; import java.util.function.BiFunction; -import org.aspectj.lang.ProceedingJoinPoint; -import org.aspectj.lang.reflect.MethodSignature; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.amazonaws.services.lambda.runtime.Context; +import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.JsonNode; import software.amazon.lambda.powertools.idempotency.Idempotency; @@ -50,13 +49,21 @@ public class IdempotencyHandler { private static final Logger LOG = LoggerFactory.getLogger(IdempotencyHandler.class); private static final int MAX_RETRIES = 2; - private final ProceedingJoinPoint pjp; + private final IdempotentFunction function; + private final TypeReference returnTypeRef; private final JsonNode data; private final BasePersistenceStore persistenceStore; private final Context lambdaContext; - public IdempotencyHandler(ProceedingJoinPoint pjp, String functionName, JsonNode payload, Context lambdaContext) { - this.pjp = pjp; + public IdempotencyHandler(IdempotentFunction function, Class returnType, String functionName, + JsonNode payload, Context lambdaContext) { + this(function, JsonConfig.toTypeReference(returnType), functionName, payload, lambdaContext); + } + + public IdempotencyHandler(IdempotentFunction function, TypeReference returnTypeRef, String functionName, + JsonNode payload, Context lambdaContext) { + this.function = function; + this.returnTypeRef = returnTypeRef; this.data = payload; this.lambdaContext = lambdaContext; persistenceStore = Idempotency.getInstance().getPersistenceStore(); @@ -171,7 +178,6 @@ private Object handleForStatus(DataRecord record) { "Execution already in progress with idempotency key: " + record.getIdempotencyKey()); } - Class returnType = ((MethodSignature) pjp.getSignature()).getReturnType(); try { LOG.debug("Response for key '{}' retrieved from idempotency store, skipping the function", record.getIdempotencyKey()); @@ -180,12 +186,12 @@ private Object handleForStatus(DataRecord record) { .getResponseHook(); final Object responseData; - if (returnType.equals(String.class)) { + if (String.class.equals(returnTypeRef.getType())) { // Primitive String data will be returned raw and not de-serialized from JSON. responseData = record.getResponseData(); } else { - responseData = JsonConfig.get().getObjectMapper().reader().readValue(record.getResponseData(), - returnType); + responseData = JsonConfig.get().getObjectMapper().readValue(record.getResponseData(), + returnTypeRef); } if (responseHook != null) { @@ -196,14 +202,14 @@ private Object handleForStatus(DataRecord record) { return responseData; } catch (Exception e) { throw new IdempotencyPersistenceLayerException( - "Unable to get function response as " + returnType.getSimpleName(), e); + "Unable to get function response as " + returnTypeRef.getType().getTypeName(), e); } } private Object getFunctionResponse() throws Throwable { Object response; try { - response = pjp.proceed(pjp.getArgs()); + response = function.execute(); } catch (Throwable handlerException) { // We need these nested blocks to preserve function's exception in case the persistence store operation // also raises an exception diff --git a/powertools-idempotency/powertools-idempotency-core/src/main/java/software/amazon/lambda/powertools/idempotency/internal/IdempotentAspect.java b/powertools-idempotency/powertools-idempotency-core/src/main/java/software/amazon/lambda/powertools/idempotency/internal/IdempotentAspect.java index ea6d743f0..35c6dee40 100644 --- a/powertools-idempotency/powertools-idempotency-core/src/main/java/software/amazon/lambda/powertools/idempotency/internal/IdempotentAspect.java +++ b/powertools-idempotency/powertools-idempotency-core/src/main/java/software/amazon/lambda/powertools/idempotency/internal/IdempotentAspect.java @@ -14,14 +14,21 @@ package software.amazon.lambda.powertools.idempotency.internal; -import com.amazonaws.services.lambda.runtime.Context; -import com.fasterxml.jackson.databind.JsonNode; +import static software.amazon.lambda.powertools.common.internal.LambdaHandlerProcessor.placedOnRequestHandler; + +import java.lang.annotation.Annotation; +import java.lang.reflect.Method; + import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.DeclarePrecedence; import org.aspectj.lang.annotation.Pointcut; import org.aspectj.lang.reflect.MethodSignature; + +import com.amazonaws.services.lambda.runtime.Context; +import com.fasterxml.jackson.databind.JsonNode; + import software.amazon.lambda.powertools.idempotency.Constants; import software.amazon.lambda.powertools.idempotency.Idempotency; import software.amazon.lambda.powertools.idempotency.IdempotencyKey; @@ -29,11 +36,6 @@ import software.amazon.lambda.powertools.idempotency.exceptions.IdempotencyConfigurationException; import software.amazon.lambda.powertools.utilities.JsonConfig; -import java.lang.annotation.Annotation; -import java.lang.reflect.Method; - -import static software.amazon.lambda.powertools.common.internal.LambdaHandlerProcessor.placedOnRequestHandler; - /** * Aspect that handles the {@link Idempotent} annotation. * It uses the {@link IdempotencyHandler} to actually do the job. @@ -42,14 +44,15 @@ // Idempotency annotation should come first before large message @DeclarePrecedence("software.amazon.lambda.powertools.idempotency.internal.IdempotentAspect, *") public class IdempotentAspect { - @SuppressWarnings({"EmptyMethod"}) + @SuppressWarnings({ "EmptyMethod" }) @Pointcut("@annotation(idempotent)") public void callAt(Idempotent idempotent) { + // Pointcut method - body intentionally empty } @Around(value = "callAt(idempotent) && execution(@Idempotent * *.*(..))", argNames = "pjp,idempotent") public Object around(ProceedingJoinPoint pjp, - Idempotent idempotent) throws Throwable { + Idempotent idempotent) throws Throwable { String idempotencyDisabledEnv = System.getenv().get(Constants.IDEMPOTENCY_DISABLED_ENV); if (idempotencyDisabledEnv != null && !"false".equalsIgnoreCase(idempotencyDisabledEnv)) { @@ -76,7 +79,12 @@ public Object around(ProceedingJoinPoint pjp, lambdaContext = Idempotency.getInstance().getConfig().getLambdaContext(); } - IdempotencyHandler idempotencyHandler = new IdempotencyHandler(pjp, method.getName(), payload, lambdaContext); + IdempotencyHandler idempotencyHandler = new IdempotencyHandler( + () -> pjp.proceed(pjp.getArgs()), + method.getReturnType(), + method.getName(), + payload, + lambdaContext); return idempotencyHandler.handle(); } diff --git a/powertools-idempotency/powertools-idempotency-core/src/main/java/software/amazon/lambda/powertools/idempotency/internal/IdempotentFunction.java b/powertools-idempotency/powertools-idempotency-core/src/main/java/software/amazon/lambda/powertools/idempotency/internal/IdempotentFunction.java new file mode 100644 index 000000000..2ff2071b0 --- /dev/null +++ b/powertools-idempotency/powertools-idempotency-core/src/main/java/software/amazon/lambda/powertools/idempotency/internal/IdempotentFunction.java @@ -0,0 +1,30 @@ +/* + * Copyright 2023 Amazon.com, Inc. or its affiliates. + * Licensed under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * 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. + * + */ + +package software.amazon.lambda.powertools.idempotency.internal; + +/** + * Functional interface for idempotent function execution. + *

+ * This interface is similar to {@link java.util.concurrent.Callable} but throws {@link Throwable} + * instead of {@link Exception}. This is necessary to support AspectJ's {@code ProceedingJoinPoint.proceed()} + * which throws {@code Throwable}, allowing exceptions to bubble up naturally without wrapping. + * + * @param the return type of the function + */ +@FunctionalInterface +public interface IdempotentFunction { + @SuppressWarnings("java:S112") // Throwable is required for AspectJ compatibility + T execute() throws Throwable; +} diff --git a/powertools-idempotency/powertools-idempotency-core/src/main/java/software/amazon/lambda/powertools/idempotency/internal/cache/LRUCache.java b/powertools-idempotency/powertools-idempotency-core/src/main/java/software/amazon/lambda/powertools/idempotency/internal/cache/LRUCache.java index b57ad2977..a3bf1c5ff 100644 --- a/powertools-idempotency/powertools-idempotency-core/src/main/java/software/amazon/lambda/powertools/idempotency/internal/cache/LRUCache.java +++ b/powertools-idempotency/powertools-idempotency-core/src/main/java/software/amazon/lambda/powertools/idempotency/internal/cache/LRUCache.java @@ -35,7 +35,7 @@ public LRUCache(int capacity) { } @Override - protected boolean removeEldestEntry(Map.Entry entry) { - return (size() > this.capacity); + protected boolean removeEldestEntry(Map.Entry entry) { + return size() > this.capacity; } } diff --git a/powertools-idempotency/powertools-idempotency-core/src/test/java/software/amazon/lambda/powertools/idempotency/IdempotencyTest.java b/powertools-idempotency/powertools-idempotency-core/src/test/java/software/amazon/lambda/powertools/idempotency/IdempotencyTest.java new file mode 100644 index 000000000..10664a25b --- /dev/null +++ b/powertools-idempotency/powertools-idempotency-core/src/test/java/software/amazon/lambda/powertools/idempotency/IdempotencyTest.java @@ -0,0 +1,311 @@ +/* + * Copyright 2023 Amazon.com, Inc. or its affiliates. + * Licensed under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * 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. + * + */ + +package software.amazon.lambda.powertools.idempotency; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.verify; + +import java.util.HashMap; +import java.util.Map; +import java.util.OptionalInt; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.ArgumentCaptor; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +import com.amazonaws.services.lambda.runtime.Context; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.JsonNode; + +import software.amazon.lambda.powertools.common.stubs.TestLambdaContext; +import software.amazon.lambda.powertools.idempotency.handlers.IdempotencyFunctionalFunction; +import software.amazon.lambda.powertools.idempotency.handlers.IdempotencyMultiArgFunctionalFunction; +import software.amazon.lambda.powertools.idempotency.model.Basket; +import software.amazon.lambda.powertools.idempotency.model.Product; +import software.amazon.lambda.powertools.idempotency.persistence.BasePersistenceStore; +import software.amazon.lambda.powertools.idempotency.testutils.InMemoryPersistenceStore; + +@ExtendWith(MockitoExtension.class) +class IdempotencyTest { + + private Context context = new TestLambdaContext(); + + @Mock + private BasePersistenceStore store; + + @Test + void firstCall_shouldPutInStore() { + Idempotency.config() + .withPersistenceStore(store) + .withConfig(IdempotencyConfig.builder() + .withEventKeyJMESPath("id") + .build()) + .configure(); + + IdempotencyFunctionalFunction function = new IdempotencyFunctionalFunction(); + + Product p = new Product(42, "fake product", 12); + Basket basket = function.handleRequest(p, context); + + assertThat(function.processCalled()).isTrue(); + assertThat(basket.getProducts()).hasSize(1); + + ArgumentCaptor nodeCaptor = ArgumentCaptor.forClass(JsonNode.class); + ArgumentCaptor expiryCaptor = ArgumentCaptor.forClass(OptionalInt.class); + verify(store).saveInProgress(nodeCaptor.capture(), any(), expiryCaptor.capture()); + assertThat(nodeCaptor.getValue().get("id").asLong()).isEqualTo(p.getId()); + assertThat(nodeCaptor.getValue().get("name").asText()).isEqualTo(p.getName()); + assertThat(nodeCaptor.getValue().get("price").asDouble()).isEqualTo(p.getPrice()); + assertThat(expiryCaptor.getValue().orElse(-1)).isEqualTo(30000); + + ArgumentCaptor resultCaptor = ArgumentCaptor.forClass(Basket.class); + verify(store).saveSuccess(any(), resultCaptor.capture(), any()); + assertThat(resultCaptor.getValue()).isEqualTo(basket); + } + + @Test + void testMakeIdempotentWithFunctionName() throws Throwable { + BasePersistenceStore spyStore = spy(BasePersistenceStore.class); + Idempotency.config() + .withPersistenceStore(spyStore) + .configure(); + Idempotency.registerLambdaContext(context); + + String result = Idempotency.makeIdempotent("myFunction", "test-key", () -> "test-result", + String.class); + + assertThat(result).isEqualTo("test-result"); + + ArgumentCaptor functionNameCaptor = ArgumentCaptor.forClass(String.class); + verify(spyStore).configure(any(), functionNameCaptor.capture()); + assertThat(functionNameCaptor.getValue()).isEqualTo("myFunction"); + } + + @Test + void testMakeIdempotentWithMethodReferenceUsesDefaultName() throws Throwable { + BasePersistenceStore spyStore = spy(BasePersistenceStore.class); + Idempotency.config() + .withPersistenceStore(spyStore) + .configure(); + Idempotency.registerLambdaContext(context); + + String result = Idempotency.makeIdempotent("test-key", this::helperMethod, String.class); + + assertThat(result).isEqualTo("helper-result"); + + ArgumentCaptor functionNameCaptor = ArgumentCaptor.forClass(String.class); + verify(spyStore).configure(any(), functionNameCaptor.capture()); + assertThat(functionNameCaptor.getValue()).isEqualTo("function"); + } + + private String helperMethod() { + return "helper-result"; + } + + @Test + void testMakeIdempotentWithFunctionOverload() throws Throwable { + BasePersistenceStore spyStore = spy(BasePersistenceStore.class); + Idempotency.config() + .withPersistenceStore(spyStore) + .configure(); + Idempotency.registerLambdaContext(context); + + Product p = new Product(42, "test product", 10); + Basket result = Idempotency.makeIdempotent(this::processProduct, p, Basket.class); + + assertThat(result.getProducts()).hasSize(1); + assertThat(result.getProducts().get(0)).isEqualTo(p); + + ArgumentCaptor functionNameCaptor = ArgumentCaptor.forClass(String.class); + verify(spyStore).configure(any(), functionNameCaptor.capture()); + assertThat(functionNameCaptor.getValue()).isEqualTo("function"); + + ArgumentCaptor nodeCaptor = ArgumentCaptor.forClass(JsonNode.class); + verify(spyStore).saveInProgress(nodeCaptor.capture(), any(), any()); + assertThat(nodeCaptor.getValue().get("id").asLong()).isEqualTo(p.getId()); + } + + private Basket processProduct(Product product) { + Basket basket = new Basket(); + basket.add(product); + return basket; + } + + @Test + void firstCall_withExplicitIdempotencyKey_shouldPutInStore() { + Idempotency.config() + .withPersistenceStore(store) + .configure(); + + IdempotencyMultiArgFunctionalFunction function = new IdempotencyMultiArgFunctionalFunction(); + + Product p = new Product(42, "fake product", 12); + Basket basket = function.handleRequest(p, context); + + assertThat(function.processCalled()).isTrue(); + assertThat(function.getExtraData()).isEqualTo("extra-data"); + assertThat(basket.getProducts()).hasSize(1); + + ArgumentCaptor nodeCaptor = ArgumentCaptor.forClass(JsonNode.class); + verify(store).saveInProgress(nodeCaptor.capture(), any(), any()); + assertThat(nodeCaptor.getValue().asLong()).isEqualTo(p.getId()); + + ArgumentCaptor resultCaptor = ArgumentCaptor.forClass(Basket.class); + verify(store).saveSuccess(any(), resultCaptor.capture(), any()); + assertThat(resultCaptor.getValue()).isEqualTo(basket); + } + + @Test + void secondCall_shouldRetrieveFromCacheAndDeserialize() throws Throwable { + InMemoryPersistenceStore inMemoryStore = new InMemoryPersistenceStore(); + + Idempotency.config() + .withPersistenceStore(inMemoryStore) + .configure(); + Idempotency.registerLambdaContext(context); + + Product p = new Product(42, "test product", 10); + int[] callCount = { 0 }; + + // First call - executes function and stores result + Basket result1 = Idempotency.makeIdempotent(p, () -> { + callCount[0]++; + return processProduct(p); + }, Basket.class); + assertThat(result1.getProducts()).hasSize(1); + assertThat(callCount[0]).isEqualTo(1); + + // Second call - should retrieve from cache, deserialize, and NOT execute function + Basket result2 = Idempotency.makeIdempotent(p, () -> { + callCount[0]++; + return processProduct(p); + }, Basket.class); + assertThat(result2.getProducts()).hasSize(1); + assertThat(result2.getProducts().get(0).getId()).isEqualTo(42); + assertThat(result2.getProducts().get(0).getName()).isEqualTo("test product"); + assertThat(callCount[0]).isEqualTo(1); // Function should NOT be called again + } + + @Test + void concurrentInvocations_shouldNotLeakContext() throws Exception { + Idempotency.config() + .withPersistenceStore(store) + .configure(); + + IdempotencyMultiArgFunctionalFunction function = new IdempotencyMultiArgFunctionalFunction(); + + // GIVEN + int threadCount = 10; + Thread[] threads = new Thread[threadCount]; + Context[] capturedContexts = new Context[threadCount]; + int[] capturedRemainingTimes = new int[threadCount]; + boolean[] success = new boolean[threadCount]; + + // WHEN - Multiple threads call handleRequest with different contexts + for (int i = 0; i < threadCount; i++) { + final int threadIndex = i; + final int expectedTime = (i + 1) * 2000; // 2000, 4000, 6000, ..., 20000 + + final Context threadContext = new TestLambdaContext() { + @Override + public int getRemainingTimeInMillis() { + return expectedTime; + } + }; + + threads[i] = new Thread(() -> { + try { + Product p = new Product(threadIndex, "product" + threadIndex, 10); + function.handleRequest(p, threadContext); + + // Capture the context that was actually stored in ThreadLocal by this thread + Context captured = Idempotency.getInstance().getConfig().getLambdaContext(); + capturedContexts[threadIndex] = captured; + capturedRemainingTimes[threadIndex] = captured != null ? captured.getRemainingTimeInMillis() : -1; + success[threadIndex] = true; + } catch (Exception e) { + success[threadIndex] = false; + } + }); + } + + // Start all threads + for (Thread thread : threads) { + thread.start(); + } + + // Wait for all threads to complete + for (Thread thread : threads) { + thread.join(); + } + + // THEN - All threads should complete successfully + for (boolean result : success) { + assertThat(result).isTrue(); + } + + // THEN - Each thread should have captured its own context (no leakage) + for (int i = 0; i < threadCount; i++) { + int expectedTime = (i + 1) * 2000; + assertThat(capturedRemainingTimes[i]) + .as("Thread %d should have remaining time %d", i, expectedTime) + .isEqualTo(expectedTime); + assertThat(capturedContexts[i]).as("Thread %d should have non-null context", i).isNotNull(); + } + } + + @Test + void testMakeIdempotentWithGenericType() throws Throwable { + InMemoryPersistenceStore inMemoryStore = new InMemoryPersistenceStore(); + + Idempotency.config() + .withPersistenceStore(inMemoryStore) + .configure(); + Idempotency.registerLambdaContext(context); + + int[] callCount = { 0 }; + + // First call - executes function and stores result + Map result1 = Idempotency.makeIdempotent("test-key", () -> { + callCount[0]++; + Map map = new HashMap<>(); + Basket basket = new Basket(); + basket.add(new Product(1, "product1", 10)); + map.put("basket1", basket); + return map; + }, new TypeReference>() { + }); + + assertThat(result1).hasSize(1); + assertThat(result1.get("basket1").getProducts()).hasSize(1); + assertThat(callCount[0]).isEqualTo(1); + + // Second call - should retrieve from cache and deserialize correctly + Map result2 = Idempotency.makeIdempotent("test-key", () -> { + callCount[0]++; + return new HashMap<>(); + }, new TypeReference>() { + }); + + assertThat(result2).hasSize(1); + assertThat(result2.get("basket1").getProducts()).hasSize(1); + assertThat(result2.get("basket1").getProducts().get(0).getName()).isEqualTo("product1"); + assertThat(callCount[0]).isEqualTo(1); // Function should NOT be called again + } +} diff --git a/powertools-idempotency/powertools-idempotency-core/src/test/java/software/amazon/lambda/powertools/idempotency/handlers/IdempotencyFunctionalFunction.java b/powertools-idempotency/powertools-idempotency-core/src/test/java/software/amazon/lambda/powertools/idempotency/handlers/IdempotencyFunctionalFunction.java new file mode 100644 index 000000000..c2a85d178 --- /dev/null +++ b/powertools-idempotency/powertools-idempotency-core/src/test/java/software/amazon/lambda/powertools/idempotency/handlers/IdempotencyFunctionalFunction.java @@ -0,0 +1,48 @@ +/* + * Copyright 2023 Amazon.com, Inc. or its affiliates. + * Licensed under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * 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. + * + */ + +package software.amazon.lambda.powertools.idempotency.handlers; + +import com.amazonaws.services.lambda.runtime.Context; +import com.amazonaws.services.lambda.runtime.RequestHandler; + +import software.amazon.lambda.powertools.idempotency.Idempotency; +import software.amazon.lambda.powertools.idempotency.model.Basket; +import software.amazon.lambda.powertools.idempotency.model.Product; + +/** + * Lambda function using Idempotency functional API without AspectJ annotations + */ +public class IdempotencyFunctionalFunction implements RequestHandler { + + private boolean processCalled = false; + + public boolean processCalled() { + return processCalled; + } + + @Override + public Basket handleRequest(Product input, Context context) { + Idempotency.registerLambdaContext(context); + + return Idempotency.makeIdempotent(this::process, input, Basket.class); + } + + private Basket process(Product input) { + processCalled = true; + Basket b = new Basket(); + b.add(input); + return b; + } +} diff --git a/powertools-idempotency/powertools-idempotency-core/src/test/java/software/amazon/lambda/powertools/idempotency/handlers/IdempotencyMultiArgFunctionalFunction.java b/powertools-idempotency/powertools-idempotency-core/src/test/java/software/amazon/lambda/powertools/idempotency/handlers/IdempotencyMultiArgFunctionalFunction.java new file mode 100644 index 000000000..42e75fd55 --- /dev/null +++ b/powertools-idempotency/powertools-idempotency-core/src/test/java/software/amazon/lambda/powertools/idempotency/handlers/IdempotencyMultiArgFunctionalFunction.java @@ -0,0 +1,54 @@ +/* + * Copyright 2023 Amazon.com, Inc. or its affiliates. + * Licensed under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * 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. + * + */ + +package software.amazon.lambda.powertools.idempotency.handlers; + +import com.amazonaws.services.lambda.runtime.Context; +import com.amazonaws.services.lambda.runtime.RequestHandler; + +import software.amazon.lambda.powertools.idempotency.Idempotency; +import software.amazon.lambda.powertools.idempotency.model.Basket; +import software.amazon.lambda.powertools.idempotency.model.Product; + +/** + * Lambda function using Idempotency functional API with explicit idempotency key + */ +public class IdempotencyMultiArgFunctionalFunction implements RequestHandler { + + private boolean processCalled = false; + private String extraData; + + public boolean processCalled() { + return processCalled; + } + + public String getExtraData() { + return extraData; + } + + @Override + public Basket handleRequest(Product input, Context context) { + Idempotency.registerLambdaContext(context); + + return Idempotency.makeIdempotent(input.getId(), () -> process(input, "extra-data"), Basket.class); + } + + private Basket process(Product input, String extraData) { + processCalled = true; + this.extraData = extraData; + Basket b = new Basket(); + b.add(input); + return b; + } +} diff --git a/powertools-idempotency/powertools-idempotency-core/src/test/java/software/amazon/lambda/powertools/idempotency/internal/IdempotencyAspectTest.java b/powertools-idempotency/powertools-idempotency-core/src/test/java/software/amazon/lambda/powertools/idempotency/internal/IdempotencyAspectTest.java index 0ccb1e5aa..384a20b2a 100644 --- a/powertools-idempotency/powertools-idempotency-core/src/test/java/software/amazon/lambda/powertools/idempotency/internal/IdempotencyAspectTest.java +++ b/powertools-idempotency/powertools-idempotency-core/src/test/java/software/amazon/lambda/powertools/idempotency/internal/IdempotencyAspectTest.java @@ -194,7 +194,7 @@ void secondCall_notExpired_shouldNotGetFromStoreIfPresentOnIdempotencyException( "Test message", new RuntimeException("Test Cause"), dr)) - .when(store).saveInProgress(any(), any(), any()); + .when(store).saveInProgress(any(), any(), any()); // WHEN IdempotencyEnabledFunction function = new IdempotencyEnabledFunction(); @@ -538,4 +538,73 @@ void idempotencyOnSubMethodVoid_shouldThrowException() { IdempotencyConfigurationException.class); } + @Test + void concurrentInvocations_shouldNotLeakContext() throws Exception { + Idempotency.config() + .withPersistenceStore(store) + .configure(); + + // Use IdempotencyInternalFunction which calls registerLambdaContext + IdempotencyInternalFunction function = new IdempotencyInternalFunction(true); + + // GIVEN + int threadCount = 10; + Thread[] threads = new Thread[threadCount]; + Context[] capturedContexts = new Context[threadCount]; + int[] capturedRemainingTimes = new int[threadCount]; + boolean[] success = new boolean[threadCount]; + + // WHEN - Multiple threads call handleRequest with different contexts + for (int i = 0; i < threadCount; i++) { + final int threadIndex = i; + final int expectedTime = (i + 1) * 1000; // 1000, 2000, 3000, ..., 10000 + + final Context threadContext = new TestLambdaContext() { + @Override + public int getRemainingTimeInMillis() { + return expectedTime; + } + }; + + threads[i] = new Thread(() -> { + try { + Product p = new Product(threadIndex, "product" + threadIndex, 10); + function.handleRequest(p, threadContext); + + // Capture the context that was actually stored in ThreadLocal by this thread + Context captured = Idempotency.getInstance().getConfig().getLambdaContext(); + capturedContexts[threadIndex] = captured; + capturedRemainingTimes[threadIndex] = captured != null ? captured.getRemainingTimeInMillis() : -1; + success[threadIndex] = true; + } catch (Exception e) { + success[threadIndex] = false; + } + }); + } + + // Start all threads + for (Thread thread : threads) { + thread.start(); + } + + // Wait for all threads to complete + for (Thread thread : threads) { + thread.join(); + } + + // THEN - All threads should complete successfully + for (boolean result : success) { + assertThat(result).isTrue(); + } + + // THEN - Each thread should have captured its own context (no leakage) + for (int i = 0; i < threadCount; i++) { + int expectedTime = (i + 1) * 1000; + assertThat(capturedRemainingTimes[i]) + .as("Thread %d should have remaining time %d", i, expectedTime) + .isEqualTo(expectedTime); + assertThat(capturedContexts[i]).as("Thread %d should have non-null context", i).isNotNull(); + } + } + } diff --git a/powertools-idempotency/powertools-idempotency-core/src/test/java/software/amazon/lambda/powertools/idempotency/testutils/InMemoryPersistenceStore.java b/powertools-idempotency/powertools-idempotency-core/src/test/java/software/amazon/lambda/powertools/idempotency/testutils/InMemoryPersistenceStore.java new file mode 100644 index 000000000..5fec80a3c --- /dev/null +++ b/powertools-idempotency/powertools-idempotency-core/src/test/java/software/amazon/lambda/powertools/idempotency/testutils/InMemoryPersistenceStore.java @@ -0,0 +1,58 @@ +/* + * Copyright 2023 Amazon.com, Inc. or its affiliates. + * Licensed under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * 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. + * + */ + +package software.amazon.lambda.powertools.idempotency.testutils; + +import java.time.Instant; +import java.util.HashMap; +import java.util.Map; + +import software.amazon.lambda.powertools.idempotency.exceptions.IdempotencyItemAlreadyExistsException; +import software.amazon.lambda.powertools.idempotency.exceptions.IdempotencyItemNotFoundException; +import software.amazon.lambda.powertools.idempotency.persistence.BasePersistenceStore; +import software.amazon.lambda.powertools.idempotency.persistence.DataRecord; + +/** + * In-memory implementation of BasePersistenceStore for testing purposes. + */ +public class InMemoryPersistenceStore extends BasePersistenceStore { + private final Map data = new HashMap<>(); + + @Override + public DataRecord getRecord(String idempotencyKey) throws IdempotencyItemNotFoundException { + DataRecord dr = data.get(idempotencyKey); + if (dr == null) { + throw new IdempotencyItemNotFoundException(idempotencyKey); + } + return dr; + } + + @Override + public void putRecord(DataRecord dr, Instant now) throws IdempotencyItemAlreadyExistsException { + if (data.containsKey(dr.getIdempotencyKey())) { + throw new IdempotencyItemAlreadyExistsException(); + } + data.put(dr.getIdempotencyKey(), dr); + } + + @Override + public void updateRecord(DataRecord dr) { + data.put(dr.getIdempotencyKey(), dr); + } + + @Override + public void deleteRecord(String idempotencyKey) { + data.remove(idempotencyKey); + } +} diff --git a/powertools-serialization/src/main/java/software/amazon/lambda/powertools/utilities/JsonConfig.java b/powertools-serialization/src/main/java/software/amazon/lambda/powertools/utilities/JsonConfig.java index fc0f083e5..c6a986564 100644 --- a/powertools-serialization/src/main/java/software/amazon/lambda/powertools/utilities/JsonConfig.java +++ b/powertools-serialization/src/main/java/software/amazon/lambda/powertools/utilities/JsonConfig.java @@ -14,19 +14,23 @@ package software.amazon.lambda.powertools.utilities; +import java.lang.reflect.Type; +import java.util.function.Supplier; + import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.MapperFeature; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; import com.fasterxml.jackson.databind.json.JsonMapper; + import io.burt.jmespath.JmesPath; import io.burt.jmespath.RuntimeConfiguration; import io.burt.jmespath.function.BaseFunction; import io.burt.jmespath.function.FunctionRegistry; import io.burt.jmespath.jackson.JacksonRuntime; -import java.util.function.Supplier; import software.amazon.lambda.powertools.utilities.jmespath.Base64Function; import software.amazon.lambda.powertools.utilities.jmespath.Base64GZipFunction; import software.amazon.lambda.powertools.utilities.jmespath.JsonFunction; @@ -51,8 +55,7 @@ public final class JsonConfig { private final FunctionRegistry customFunctions = defaultFunctions.extend( new Base64Function(), new Base64GZipFunction(), - new JsonFunction() - ); + new JsonFunction()); private final RuntimeConfiguration configuration = new RuntimeConfiguration.Builder() .withSilentTypeErrors(true) @@ -77,6 +80,23 @@ public ObjectMapper getObjectMapper() { return om.get(); } + /** + * Creates a TypeReference from a Class for use with Jackson deserialization. + * This is useful when you need to convert a Class to a TypeReference for generic type handling. + * + * @param clazz the class to convert to TypeReference + * @param the type parameter + * @return a TypeReference wrapping the provided class + */ + public static TypeReference toTypeReference(Class clazz) { + return new TypeReference() { + @Override + public Type getType() { + return clazz; + } + }; + } + /** * Return the JmesPath used to select sub node of Json * @@ -103,7 +123,7 @@ public void addFunction(T function) { jmesPath = new JacksonRuntime(updatedConfig, getObjectMapper()); } - private static class ConfigHolder { + private static final class ConfigHolder { private static final JsonConfig instance = new JsonConfig(); } } From dcb2b605b13cfa9391ca79795fbf7955b6cf8e74 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 30 Oct 2025 14:23:48 +0100 Subject: [PATCH 002/202] chore: bump aws.sdk.version from 2.36.2 to 2.37.1 (#2246) Bumps `aws.sdk.version` from 2.36.2 to 2.37.1. Updates `software.amazon.awssdk:url-connection-client` from 2.36.2 to 2.37.1 Updates `software.amazon.awssdk:sdk-core` from 2.36.2 to 2.37.1 Updates `software.amazon.awssdk:s3` from 2.36.2 to 2.37.1 Updates `software.amazon.awssdk:kinesis` from 2.36.2 to 2.37.1 Updates `software.amazon.awssdk:sqs` from 2.36.2 to 2.37.1 Updates `software.amazon.awssdk:dynamodb-enhanced` from 2.36.2 to 2.37.1 --- updated-dependencies: - dependency-name: software.amazon.awssdk:url-connection-client dependency-version: 2.37.1 dependency-type: direct:development update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:sdk-core dependency-version: 2.37.1 dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:s3 dependency-version: 2.37.1 dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:kinesis dependency-version: 2.37.1 dependency-type: direct:development update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:sqs dependency-version: 2.37.1 dependency-type: direct:development update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:dynamodb-enhanced dependency-version: 2.37.1 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> --- examples/powertools-examples-batch/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/powertools-examples-batch/pom.xml b/examples/powertools-examples-batch/pom.xml index a5d14f0c1..19b404c82 100644 --- a/examples/powertools-examples-batch/pom.xml +++ b/examples/powertools-examples-batch/pom.xml @@ -14,7 +14,7 @@ 11 11 1.9.20.1 - 2.36.2 + 2.37.1 From 74ca992a317346bd991024ad8988a117e1466f0a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 30 Oct 2025 14:24:13 +0100 Subject: [PATCH 003/202] chore: bump software.amazon.awscdk:aws-cdk-lib from 2.221.0 to 2.221.1 (#2248) Bumps [software.amazon.awscdk:aws-cdk-lib](https://github.com/aws/aws-cdk) from 2.221.0 to 2.221.1. - [Release notes](https://github.com/aws/aws-cdk/releases) - [Changelog](https://github.com/aws/aws-cdk/blob/v2.221.1/CHANGELOG.v2.alpha.md) - [Commits](https://github.com/aws/aws-cdk/compare/v2.221.0...v2.221.1) --- updated-dependencies: - dependency-name: software.amazon.awscdk:aws-cdk-lib dependency-version: 2.221.1 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- examples/powertools-examples-core-utilities/cdk/infra/pom.xml | 2 +- powertools-e2e-tests/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/powertools-examples-core-utilities/cdk/infra/pom.xml b/examples/powertools-examples-core-utilities/cdk/infra/pom.xml index 42777cc96..ce887884c 100644 --- a/examples/powertools-examples-core-utilities/cdk/infra/pom.xml +++ b/examples/powertools-examples-core-utilities/cdk/infra/pom.xml @@ -7,7 +7,7 @@ 2.5.0 UTF-8 - 2.221.0 + 2.221.1 [10.0.0,11.0.0) 5.14.0 diff --git a/powertools-e2e-tests/pom.xml b/powertools-e2e-tests/pom.xml index 046592e1c..557611a93 100644 --- a/powertools-e2e-tests/pom.xml +++ b/powertools-e2e-tests/pom.xml @@ -31,7 +31,7 @@ 11 11 10.4.2 - 2.221.0 + 2.221.1 From 6f2f262acbe248b0a6e408386be82d8a85b6d393 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 30 Oct 2025 14:24:46 +0100 Subject: [PATCH 004/202] chore: bump github/codeql-action from 4.31.0 to 4.31.1 (#2249) Bumps [github/codeql-action](https://github.com/github/codeql-action) from 4.31.0 to 4.31.1. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/4e94bd11f71e507f7f87df81788dff88d1dacbfb...5fe9434cd24fe243e33e7f3305f8a5b519b70280) --- updated-dependencies: - dependency-name: github/codeql-action dependency-version: 4.31.1 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/security-scorecard.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/security-scorecard.yml b/.github/workflows/security-scorecard.yml index 4ca976695..632e4b0d9 100644 --- a/.github/workflows/security-scorecard.yml +++ b/.github/workflows/security-scorecard.yml @@ -52,6 +52,6 @@ jobs: path: results.sarif retention-days: 5 - name: Upload to Code-Scanning - uses: github/codeql-action/upload-sarif@4e94bd11f71e507f7f87df81788dff88d1dacbfb # v3.29.5 + uses: github/codeql-action/upload-sarif@5fe9434cd24fe243e33e7f3305f8a5b519b70280 # v3.29.5 with: sarif_file: results.sarif From 6e4701c75da366465b25cac43ea7669aa96bf616 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 30 Oct 2025 14:25:00 +0100 Subject: [PATCH 005/202] chore: bump aws.sdk.version from 2.36.2 to 2.36.3 (#2242) Bumps `aws.sdk.version` from 2.36.2 to 2.36.3. Updates `software.amazon.awssdk:bom` from 2.36.2 to 2.36.3 Updates `software.amazon.awssdk:http-client-spi` from 2.36.2 to 2.36.3 Updates `software.amazon.awssdk:url-connection-client` from 2.36.2 to 2.36.3 Updates `software.amazon.awssdk:s3` from 2.36.2 to 2.36.3 Updates `software.amazon.awssdk:dynamodb` from 2.36.2 to 2.36.3 Updates `software.amazon.awssdk:lambda` from 2.36.2 to 2.36.3 Updates `software.amazon.awssdk:kinesis` from 2.36.2 to 2.36.3 Updates `software.amazon.awssdk:cloudwatch` from 2.36.2 to 2.36.3 Updates `software.amazon.awssdk:xray` from 2.36.2 to 2.36.3 Updates `software.amazon.awssdk:sqs` from 2.36.2 to 2.36.3 Updates `software.amazon.awssdk:cloudformation` from 2.36.2 to 2.36.3 Updates `software.amazon.awssdk:sts` from 2.36.2 to 2.36.3 --- updated-dependencies: - dependency-name: software.amazon.awssdk:bom dependency-version: 2.36.3 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: software.amazon.awssdk:http-client-spi dependency-version: 2.36.3 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: software.amazon.awssdk:url-connection-client dependency-version: 2.36.3 dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: software.amazon.awssdk:s3 dependency-version: 2.36.3 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: software.amazon.awssdk:dynamodb dependency-version: 2.36.3 dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: software.amazon.awssdk:lambda dependency-version: 2.36.3 dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: software.amazon.awssdk:kinesis dependency-version: 2.36.3 dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: software.amazon.awssdk:cloudwatch dependency-version: 2.36.3 dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: software.amazon.awssdk:xray dependency-version: 2.36.3 dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: software.amazon.awssdk:sqs dependency-version: 2.36.3 dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: software.amazon.awssdk:cloudformation dependency-version: 2.36.3 dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: software.amazon.awssdk:sts dependency-version: 2.36.3 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- examples/powertools-examples-cloudformation/pom.xml | 2 +- pom.xml | 2 +- powertools-e2e-tests/handlers/pom.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/powertools-examples-cloudformation/pom.xml b/examples/powertools-examples-cloudformation/pom.xml index 3d9bb3c67..7f9bbc6fa 100644 --- a/examples/powertools-examples-cloudformation/pom.xml +++ b/examples/powertools-examples-cloudformation/pom.xml @@ -14,7 +14,7 @@ 11 1.4.0 3.16.1 - 2.36.2 + 2.36.3 1.9.20.1 diff --git a/pom.xml b/pom.xml index 878826077..449baba05 100644 --- a/pom.xml +++ b/pom.xml @@ -85,7 +85,7 @@ 2.25.2 2.0.17 2.20.0 - 2.36.2 + 2.36.3 2.20.0 2.2.0 UTF-8 diff --git a/powertools-e2e-tests/handlers/pom.xml b/powertools-e2e-tests/handlers/pom.xml index 7a7da9e02..86e867548 100644 --- a/powertools-e2e-tests/handlers/pom.xml +++ b/powertools-e2e-tests/handlers/pom.xml @@ -19,7 +19,7 @@ 3.6.1 1.14.1 3.14.1 - 2.36.2 + 2.36.3 1.9.20.1 true From e1dbd95997b00704cf509cf3fe04dd7b2d6c679b Mon Sep 17 00:00:00 2001 From: Philipp Page Date: Fri, 31 Oct 2025 11:40:40 +0100 Subject: [PATCH 006/202] fix(serialization): Fix Joda time serialization for AWS events. (#2252) --- powertools-serialization/pom.xml | 4 + .../powertools/utilities/JsonConfig.java | 5 +- .../utilities/EventDeserializerTest.java | 198 ++++++++++++++---- .../jmespath/Base64FunctionTest.java | 19 +- .../jmespath/Base64GZipFunctionTest.java | 30 +-- .../utilities/jmespath/JsonFunctionTest.java | 13 +- 6 files changed, 204 insertions(+), 65 deletions(-) diff --git a/powertools-serialization/pom.xml b/powertools-serialization/pom.xml index 89fb2056a..1ed2ee259 100644 --- a/powertools-serialization/pom.xml +++ b/powertools-serialization/pom.xml @@ -47,6 +47,10 @@ com.fasterxml.jackson.core jackson-databind + + com.fasterxml.jackson.datatype + jackson-datatype-joda + diff --git a/powertools-serialization/src/main/java/software/amazon/lambda/powertools/utilities/JsonConfig.java b/powertools-serialization/src/main/java/software/amazon/lambda/powertools/utilities/JsonConfig.java index c6a986564..ac10412fa 100644 --- a/powertools-serialization/src/main/java/software/amazon/lambda/powertools/utilities/JsonConfig.java +++ b/powertools-serialization/src/main/java/software/amazon/lambda/powertools/utilities/JsonConfig.java @@ -25,6 +25,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; import com.fasterxml.jackson.databind.json.JsonMapper; +import com.fasterxml.jackson.datatype.joda.JodaModule; import io.burt.jmespath.JmesPath; import io.burt.jmespath.RuntimeConfiguration; @@ -41,11 +42,13 @@ public final class JsonConfig { // Don't throw an exception when json has extra fields you are not serializing on. .disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES) // Ignore null values when writing json. - .serializationInclusion(JsonInclude.Include.NON_NULL) + .defaultPropertyInclusion( + JsonInclude.Value.construct(JsonInclude.Include.NON_NULL, JsonInclude.Include.USE_DEFAULTS)) // Write times as a String instead of a Long so its human-readable. .disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS) // Sort fields in alphabetical order .configure(MapperFeature.SORT_PROPERTIES_ALPHABETICALLY, true) + .addModule(new JodaModule()) .build(); private static final ThreadLocal om = ThreadLocal.withInitial(objectMapperSupplier); diff --git a/powertools-serialization/src/test/java/software/amazon/lambda/powertools/utilities/EventDeserializerTest.java b/powertools-serialization/src/test/java/software/amazon/lambda/powertools/utilities/EventDeserializerTest.java index 2914bd286..14fc32231 100644 --- a/powertools-serialization/src/test/java/software/amazon/lambda/powertools/utilities/EventDeserializerTest.java +++ b/powertools-serialization/src/test/java/software/amazon/lambda/powertools/utilities/EventDeserializerTest.java @@ -18,6 +18,13 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy; import static software.amazon.lambda.powertools.utilities.EventDeserializer.extractDataFrom; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; + import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent; import com.amazonaws.services.lambda.runtime.events.APIGatewayV2HTTPEvent; import com.amazonaws.services.lambda.runtime.events.ActiveMQEvent; @@ -34,41 +41,37 @@ import com.amazonaws.services.lambda.runtime.events.SQSEvent; import com.amazonaws.services.lambda.runtime.events.ScheduledEvent; import com.amazonaws.services.lambda.runtime.tests.annotations.Event; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.params.ParameterizedTest; +import com.fasterxml.jackson.databind.JsonNode; + import software.amazon.lambda.powertools.utilities.model.Order; import software.amazon.lambda.powertools.utilities.model.Product; -public class EventDeserializerTest { +class EventDeserializerTest { @Test - public void testDeserializeStringAsString_shouldReturnString() { + void testDeserializeStringAsString_shouldReturnString() { String stringEvent = "Hello World"; String result = extractDataFrom(stringEvent).as(String.class); assertThat(result).isEqualTo(stringEvent); } @Test - public void testDeserializeStringAsObject_shouldReturnObject() { + void testDeserializeStringAsObject_shouldReturnObject() { String productStr = "{\"id\":1234, \"name\":\"product\", \"price\":42}"; Product product = extractDataFrom(productStr).as(Product.class); assertProduct(product); } @Test - public void testDeserializeStringArrayAsList_shouldReturnList() { - String productStr = - "[{\"id\":1234, \"name\":\"product\", \"price\":42}, {\"id\":2345, \"name\":\"product2\", \"price\":43}]"; + void testDeserializeStringArrayAsList_shouldReturnList() { + String productStr = "[{\"id\":1234, \"name\":\"product\", \"price\":42}, {\"id\":2345, \"name\":\"product2\", \"price\":43}]"; List products = extractDataFrom(productStr).asListOf(Product.class); assertThat(products).hasSize(2); assertProduct(products.get(0)); } @Test - public void testDeserializeStringAsList_shouldThrowException() { + void testDeserializeStringAsList_shouldThrowException() { String productStr = "{\"id\":1234, \"name\":\"product\", \"price\":42}"; assertThatThrownBy(() -> extractDataFrom(productStr).asListOf(Product.class)) .isInstanceOf(EventDeserializationException.class) @@ -76,7 +79,7 @@ public void testDeserializeStringAsList_shouldThrowException() { } @Test - public void testDeserializeMapAsObject_shouldReturnObject() { + void testDeserializeMapAsObject_shouldReturnObject() { Map map = new HashMap<>(); map.put("id", 1234); map.put("name", "product"); @@ -87,21 +90,21 @@ public void testDeserializeMapAsObject_shouldReturnObject() { @ParameterizedTest @Event(value = "apigw_event.json", type = APIGatewayProxyRequestEvent.class) - public void testDeserializeAPIGWEventBodyAsObject_shouldReturnObject(APIGatewayProxyRequestEvent event) { + void testDeserializeAPIGWEventBodyAsObject_shouldReturnObject(APIGatewayProxyRequestEvent event) { Product product = extractDataFrom(event).as(Product.class); assertProduct(product); } @ParameterizedTest @Event(value = "sns_event.json", type = SNSEvent.class) - public void testDeserializeSNSEventMessageAsObject_shouldReturnObject(SNSEvent event) { + void testDeserializeSNSEventMessageAsObject_shouldReturnObject(SNSEvent event) { Product product = extractDataFrom(event).as(Product.class); assertProduct(product); } @ParameterizedTest @Event(value = "sqs_event.json", type = SQSEvent.class) - public void testDeserializeSQSEventMessageAsList_shouldReturnList(SQSEvent event) { + void testDeserializeSQSEventMessageAsList_shouldReturnList(SQSEvent event) { List products = extractDataFrom(event).asListOf(Product.class); assertThat(products).hasSize(2); assertProduct(products.get(0)); @@ -109,7 +112,7 @@ public void testDeserializeSQSEventMessageAsList_shouldReturnList(SQSEvent event @ParameterizedTest @Event(value = "kinesis_event.json", type = KinesisEvent.class) - public void testDeserializeKinesisEventMessageAsList_shouldReturnList(KinesisEvent event) { + void testDeserializeKinesisEventMessageAsList_shouldReturnList(KinesisEvent event) { List products = extractDataFrom(event).asListOf(Product.class); assertThat(products).hasSize(2); assertProduct(products.get(0)); @@ -117,7 +120,7 @@ public void testDeserializeKinesisEventMessageAsList_shouldReturnList(KinesisEve @ParameterizedTest @Event(value = "kafka_event.json", type = KafkaEvent.class) - public void testDeserializeKafkaEventMessageAsList_shouldReturnList(KafkaEvent event) { + void testDeserializeKafkaEventMessageAsList_shouldReturnList(KafkaEvent event) { List products = extractDataFrom(event).asListOf(Product.class); assertThat(products).hasSize(2); assertProduct(products.get(0)); @@ -125,7 +128,7 @@ public void testDeserializeKafkaEventMessageAsList_shouldReturnList(KafkaEvent e @ParameterizedTest @Event(value = "sqs_event.json", type = SQSEvent.class) - public void testDeserializeSQSEventMessageAsObject_shouldThrowException(SQSEvent event) { + void testDeserializeSQSEventMessageAsObject_shouldThrowException(SQSEvent event) { assertThatThrownBy(() -> extractDataFrom(event).as(Product.class)) .isInstanceOf(EventDeserializationException.class) .hasMessageContaining("consider using 'asListOf' instead"); @@ -133,7 +136,7 @@ public void testDeserializeSQSEventMessageAsObject_shouldThrowException(SQSEvent @ParameterizedTest @Event(value = "apigw_event.json", type = APIGatewayProxyRequestEvent.class) - public void testDeserializeAPIGatewayEventAsList_shouldThrowException(APIGatewayProxyRequestEvent event) { + void testDeserializeAPIGatewayEventAsList_shouldThrowException(APIGatewayProxyRequestEvent event) { assertThatThrownBy(() -> extractDataFrom(event).asListOf(Product.class)) .isInstanceOf(EventDeserializationException.class) .hasMessageContaining("consider using 'as' instead") @@ -142,14 +145,14 @@ public void testDeserializeAPIGatewayEventAsList_shouldThrowException(APIGateway @ParameterizedTest @Event(value = "custom_event_map.json", type = HashMap.class) - public void testDeserializeAPIGatewayMapEventAsList_shouldThrowException(Map event) { + void testDeserializeAPIGatewayMapEventAsList_shouldThrowException(Map event) { assertThatThrownBy(() -> extractDataFrom(event).asListOf(Order.class)) .isInstanceOf(EventDeserializationException.class) .hasMessage("The content of this event is not a list, consider using 'as' instead"); } @Test - public void testDeserializeEmptyEventAsList_shouldThrowException() { + void testDeserializeEmptyEventAsList_shouldThrowException() { assertThatThrownBy(() -> extractDataFrom(null).asListOf(Product.class)) .isInstanceOf(IllegalStateException.class) .hasMessage("Event content is null: the event may be malformed (missing fields)"); @@ -157,14 +160,14 @@ public void testDeserializeEmptyEventAsList_shouldThrowException() { @ParameterizedTest @Event(value = "apigw_event_no_body.json", type = APIGatewayProxyRequestEvent.class) - public void testDeserializeAPIGatewayNoBody_shouldThrowException(APIGatewayProxyRequestEvent event) { + void testDeserializeAPIGatewayNoBody_shouldThrowException(APIGatewayProxyRequestEvent event) { assertThatThrownBy(() -> extractDataFrom(event).as(Product.class)) .isInstanceOf(IllegalStateException.class) .hasMessage("Event content is null: the event may be malformed (missing fields)"); } @Test - public void testDeserializeAPIGatewayNoBodyAsList_shouldThrowException() { + void testDeserializeAPIGatewayNoBodyAsList_shouldThrowException() { assertThatThrownBy(() -> extractDataFrom(new Object()).asListOf(Product.class)) .isInstanceOf(EventDeserializationException.class) .hasMessage("The content of this event is not a list, consider using 'as' instead"); @@ -172,19 +175,18 @@ public void testDeserializeAPIGatewayNoBodyAsList_shouldThrowException() { @ParameterizedTest @Event(value = "sqs_event_no_body.json", type = SQSEvent.class) - public void testDeserializeSQSEventNoBody_shouldThrowException(SQSEvent event) { + void testDeserializeSQSEventNoBody_shouldThrowException(SQSEvent event) { List products = extractDataFrom(event).asListOf(Product.class); assertThat(products.get(0)).isNull(); } @Test - public void testDeserializeProductAsProduct_shouldReturnProduct() { + void testDeserializeProductAsProduct_shouldReturnProduct() { Product myProduct = new Product(1234, "product", 42); Product product = extractDataFrom(myProduct).as(Product.class); assertProduct(product); } - private void assertProduct(Product product) { assertThat(product) .isEqualTo(new Product(1234, "product", 42)) @@ -193,28 +195,28 @@ private void assertProduct(Product product) { @ParameterizedTest @Event(value = "scheduled_event.json", type = ScheduledEvent.class) - public void testDeserializeScheduledEventMessageAsObject_shouldReturnObject(ScheduledEvent event) { + void testDeserializeScheduledEventMessageAsObject_shouldReturnObject(ScheduledEvent event) { Product product = extractDataFrom(event).as(Product.class); assertProduct(product); } @ParameterizedTest @Event(value = "alb_event.json", type = ApplicationLoadBalancerRequestEvent.class) - public void testDeserializeALBEventMessageAsObjectShouldReturnObject(ApplicationLoadBalancerRequestEvent event) { + void testDeserializeALBEventMessageAsObjectShouldReturnObject(ApplicationLoadBalancerRequestEvent event) { Product product = extractDataFrom(event).as(Product.class); assertProduct(product); } @ParameterizedTest @Event(value = "cwl_event.json", type = CloudWatchLogsEvent.class) - public void testDeserializeCWLEventMessageAsObjectShouldReturnObject(CloudWatchLogsEvent event) { + void testDeserializeCWLEventMessageAsObjectShouldReturnObject(CloudWatchLogsEvent event) { Product product = extractDataFrom(event).as(Product.class); assertProduct(product); } @ParameterizedTest @Event(value = "kf_event.json", type = KinesisFirehoseEvent.class) - public void testDeserializeKFEventMessageAsListShouldReturnList(KinesisFirehoseEvent event) { + void testDeserializeKFEventMessageAsListShouldReturnList(KinesisFirehoseEvent event) { List products = extractDataFrom(event).asListOf(Product.class); assertThat(products).hasSize(1); assertProduct(products.get(0)); @@ -222,7 +224,7 @@ public void testDeserializeKFEventMessageAsListShouldReturnList(KinesisFirehoseE @ParameterizedTest @Event(value = "amq_event.json", type = ActiveMQEvent.class) - public void testDeserializeAMQEventMessageAsListShouldReturnList(ActiveMQEvent event) { + void testDeserializeAMQEventMessageAsListShouldReturnList(ActiveMQEvent event) { List products = extractDataFrom(event).asListOf(Product.class); assertThat(products).hasSize(1); assertProduct(products.get(0)); @@ -230,7 +232,7 @@ public void testDeserializeAMQEventMessageAsListShouldReturnList(ActiveMQEvent e @ParameterizedTest @Event(value = "rabbitmq_event.json", type = RabbitMQEvent.class) - public void testDeserializeRabbitMQEventMessageAsListShouldReturnList(RabbitMQEvent event) { + void testDeserializeRabbitMQEventMessageAsListShouldReturnList(RabbitMQEvent event) { List products = extractDataFrom(event).asListOf(Product.class); assertThat(products).hasSize(1); assertProduct(products.get(0)); @@ -238,7 +240,7 @@ public void testDeserializeRabbitMQEventMessageAsListShouldReturnList(RabbitMQEv @ParameterizedTest @Event(value = "kasip_event.json", type = KinesisAnalyticsStreamsInputPreprocessingEvent.class) - public void testDeserializeKasipEventMessageAsListShouldReturnList( + void testDeserializeKasipEventMessageAsListShouldReturnList( KinesisAnalyticsStreamsInputPreprocessingEvent event) { List products = extractDataFrom(event).asListOf(Product.class); assertThat(products).hasSize(1); @@ -247,7 +249,7 @@ public void testDeserializeKasipEventMessageAsListShouldReturnList( @ParameterizedTest @Event(value = "kafip_event.json", type = KinesisAnalyticsFirehoseInputPreprocessingEvent.class) - public void testDeserializeKafipEventMessageAsListShouldReturnList( + void testDeserializeKafipEventMessageAsListShouldReturnList( KinesisAnalyticsFirehoseInputPreprocessingEvent event) { List products = extractDataFrom(event).asListOf(Product.class); assertThat(products).hasSize(1); @@ -256,16 +258,138 @@ public void testDeserializeKafipEventMessageAsListShouldReturnList( @ParameterizedTest @Event(value = "apigwv2_event.json", type = APIGatewayV2HTTPEvent.class) - public void testDeserializeApiGWV2EventMessageAsObjectShouldReturnObject(APIGatewayV2HTTPEvent event) { + void testDeserializeApiGWV2EventMessageAsObjectShouldReturnObject(APIGatewayV2HTTPEvent event) { Product product = extractDataFrom(event).as(Product.class); assertProduct(product); } @ParameterizedTest @Event(value = "cfcr_event.json", type = CloudFormationCustomResourceEvent.class) - public void testDeserializeCfcrEventMessageAsObjectShouldReturnObject(CloudFormationCustomResourceEvent event) { + void testDeserializeCfcrEventMessageAsObjectShouldReturnObject(CloudFormationCustomResourceEvent event) { Product product = extractDataFrom(event).as(Product.class); assertProduct(product); } + @ParameterizedTest + @Event(value = "scheduled_event.json", type = ScheduledEvent.class) + void testSerializeScheduledEvent_shouldReturnValidJson(ScheduledEvent event) throws Exception { + String json = JsonConfig.get().getObjectMapper().valueToTree(event).toString(); + JsonNode parsed = JsonConfig.get().getObjectMapper().readTree(json); + assertThat(parsed.has("detail")).isTrue(); + } + + @ParameterizedTest + @Event(value = "apigw_event.json", type = APIGatewayProxyRequestEvent.class) + void testSerializeAPIGatewayEvent_shouldReturnValidJson(APIGatewayProxyRequestEvent event) throws Exception { + String json = JsonConfig.get().getObjectMapper().valueToTree(event).toString(); + JsonNode parsed = JsonConfig.get().getObjectMapper().readTree(json); + assertThat(parsed.has("body")).isTrue(); + } + + @ParameterizedTest + @Event(value = "sqs_event.json", type = SQSEvent.class) + void testSerializeSQSEvent_shouldReturnValidJson(SQSEvent event) throws Exception { + String json = JsonConfig.get().getObjectMapper().valueToTree(event).toString(); + JsonNode parsed = JsonConfig.get().getObjectMapper().readTree(json); + assertThat(parsed.has("records")).isTrue(); + } + + @ParameterizedTest + @Event(value = "sns_event.json", type = SNSEvent.class) + void testSerializeSNSEvent_shouldReturnValidJson(SNSEvent event) throws Exception { + String json = JsonConfig.get().getObjectMapper().valueToTree(event).toString(); + JsonNode parsed = JsonConfig.get().getObjectMapper().readTree(json); + assertThat(parsed.has("records")).isTrue(); + } + + @ParameterizedTest + @Event(value = "kinesis_event.json", type = KinesisEvent.class) + void testSerializeKinesisEvent_shouldReturnValidJson(KinesisEvent event) throws Exception { + String json = JsonConfig.get().getObjectMapper().valueToTree(event).toString(); + JsonNode parsed = JsonConfig.get().getObjectMapper().readTree(json); + assertThat(parsed.has("records")).isTrue(); + } + + @ParameterizedTest + @Event(value = "kafka_event.json", type = KafkaEvent.class) + void testSerializeKafkaEvent_shouldReturnValidJson(KafkaEvent event) throws Exception { + String json = JsonConfig.get().getObjectMapper().valueToTree(event).toString(); + JsonNode parsed = JsonConfig.get().getObjectMapper().readTree(json); + assertThat(parsed.has("records")).isTrue(); + } + + @ParameterizedTest + @Event(value = "alb_event.json", type = ApplicationLoadBalancerRequestEvent.class) + void testSerializeALBEvent_shouldReturnValidJson(ApplicationLoadBalancerRequestEvent event) throws Exception { + String json = JsonConfig.get().getObjectMapper().valueToTree(event).toString(); + JsonNode parsed = JsonConfig.get().getObjectMapper().readTree(json); + assertThat(parsed.has("body")).isTrue(); + } + + @ParameterizedTest + @Event(value = "cwl_event.json", type = CloudWatchLogsEvent.class) + void testSerializeCWLEvent_shouldReturnValidJson(CloudWatchLogsEvent event) throws Exception { + String json = JsonConfig.get().getObjectMapper().valueToTree(event).toString(); + JsonNode parsed = JsonConfig.get().getObjectMapper().readTree(json); + assertThat(parsed.has("awsLogs")).isTrue(); + } + + @ParameterizedTest + @Event(value = "kf_event.json", type = KinesisFirehoseEvent.class) + void testSerializeKFEvent_shouldReturnValidJson(KinesisFirehoseEvent event) throws Exception { + String json = JsonConfig.get().getObjectMapper().valueToTree(event).toString(); + JsonNode parsed = JsonConfig.get().getObjectMapper().readTree(json); + assertThat(parsed.has("records")).isTrue(); + } + + @ParameterizedTest + @Event(value = "amq_event.json", type = ActiveMQEvent.class) + void testSerializeAMQEvent_shouldReturnValidJson(ActiveMQEvent event) throws Exception { + String json = JsonConfig.get().getObjectMapper().valueToTree(event).toString(); + JsonNode parsed = JsonConfig.get().getObjectMapper().readTree(json); + assertThat(parsed.has("messages")).isTrue(); + } + + @ParameterizedTest + @Event(value = "rabbitmq_event.json", type = RabbitMQEvent.class) + void testSerializeRabbitMQEvent_shouldReturnValidJson(RabbitMQEvent event) throws Exception { + String json = JsonConfig.get().getObjectMapper().valueToTree(event).toString(); + JsonNode parsed = JsonConfig.get().getObjectMapper().readTree(json); + assertThat(parsed.has("rmqMessagesByQueue")).isTrue(); + } + + @ParameterizedTest + @Event(value = "kasip_event.json", type = KinesisAnalyticsStreamsInputPreprocessingEvent.class) + void testSerializeKasipEvent_shouldReturnValidJson(KinesisAnalyticsStreamsInputPreprocessingEvent event) + throws Exception { + String json = JsonConfig.get().getObjectMapper().valueToTree(event).toString(); + JsonNode parsed = JsonConfig.get().getObjectMapper().readTree(json); + assertThat(parsed.has("records")).isTrue(); + } + + @ParameterizedTest + @Event(value = "kafip_event.json", type = KinesisAnalyticsFirehoseInputPreprocessingEvent.class) + void testSerializeKafipEvent_shouldReturnValidJson(KinesisAnalyticsFirehoseInputPreprocessingEvent event) + throws Exception { + String json = JsonConfig.get().getObjectMapper().valueToTree(event).toString(); + JsonNode parsed = JsonConfig.get().getObjectMapper().readTree(json); + assertThat(parsed.has("records")).isTrue(); + } + + @ParameterizedTest + @Event(value = "apigwv2_event.json", type = APIGatewayV2HTTPEvent.class) + void testSerializeApiGWV2Event_shouldReturnValidJson(APIGatewayV2HTTPEvent event) throws Exception { + String json = JsonConfig.get().getObjectMapper().valueToTree(event).toString(); + JsonNode parsed = JsonConfig.get().getObjectMapper().readTree(json); + assertThat(parsed.has("body")).isTrue(); + } + + @ParameterizedTest + @Event(value = "cfcr_event.json", type = CloudFormationCustomResourceEvent.class) + void testSerializeCfcrEvent_shouldReturnValidJson(CloudFormationCustomResourceEvent event) throws Exception { + String json = JsonConfig.get().getObjectMapper().valueToTree(event).toString(); + JsonNode parsed = JsonConfig.get().getObjectMapper().readTree(json); + assertThat(parsed.has("resourceProperties")).isTrue(); + } + } diff --git a/powertools-serialization/src/test/java/software/amazon/lambda/powertools/utilities/jmespath/Base64FunctionTest.java b/powertools-serialization/src/test/java/software/amazon/lambda/powertools/utilities/jmespath/Base64FunctionTest.java index d86af6671..478d3477c 100644 --- a/powertools-serialization/src/test/java/software/amazon/lambda/powertools/utilities/jmespath/Base64FunctionTest.java +++ b/powertools-serialization/src/test/java/software/amazon/lambda/powertools/utilities/jmespath/Base64FunctionTest.java @@ -16,21 +16,24 @@ import static org.assertj.core.api.Assertions.assertThat; +import java.io.IOException; + +import org.junit.jupiter.api.Test; + import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.node.JsonNodeType; + import io.burt.jmespath.Expression; -import java.io.IOException; -import org.junit.jupiter.api.Test; import software.amazon.lambda.powertools.utilities.JsonConfig; -public class Base64FunctionTest { +class Base64FunctionTest { @Test - public void testPowertoolsBase64() throws IOException { - JsonNode event = - JsonConfig.get().getObjectMapper().readTree(this.getClass().getResourceAsStream("/custom_event.json")); - Expression expression = - JsonConfig.get().getJmesPath().compile("basket.powertools_base64(hiddenProduct)"); + void testPowertoolsBase64() throws IOException { + JsonNode event = JsonConfig.get().getObjectMapper() + .readTree(this.getClass().getResourceAsStream("/custom_event.json")); + Expression expression = JsonConfig.get().getJmesPath() + .compile("basket.powertools_base64(hiddenProduct)"); JsonNode result = expression.search(event); assertThat(result.getNodeType()).isEqualTo(JsonNodeType.STRING); assertThat(result.asText()).isEqualTo("{\n" + diff --git a/powertools-serialization/src/test/java/software/amazon/lambda/powertools/utilities/jmespath/Base64GZipFunctionTest.java b/powertools-serialization/src/test/java/software/amazon/lambda/powertools/utilities/jmespath/Base64GZipFunctionTest.java index eeb605076..6f9f9a592 100644 --- a/powertools-serialization/src/test/java/software/amazon/lambda/powertools/utilities/jmespath/Base64GZipFunctionTest.java +++ b/powertools-serialization/src/test/java/software/amazon/lambda/powertools/utilities/jmespath/Base64GZipFunctionTest.java @@ -16,18 +16,21 @@ import static org.assertj.core.api.Assertions.assertThat; +import java.io.IOException; + +import org.junit.jupiter.api.Test; + import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.node.JsonNodeType; + import io.burt.jmespath.Expression; import io.burt.jmespath.JmesPathType; -import java.io.IOException; -import org.junit.jupiter.api.Test; import software.amazon.lambda.powertools.utilities.JsonConfig; -public class Base64GZipFunctionTest { +class Base64GZipFunctionTest { @Test - public void testConstructor() { + void testConstructor() { Base64GZipFunction base64GZipFunction = new Base64GZipFunction(); assertThat(base64GZipFunction.name()).isEqualTo("powertools_base64_gzip"); assertThat(base64GZipFunction.argumentConstraints().expectedType().toLowerCase()).isEqualTo( @@ -38,18 +41,18 @@ public void testConstructor() { } @Test - public void testPowertoolsGzip() throws IOException { + void testPowertoolsGzip() throws IOException { JsonNode event = JsonConfig.get().getObjectMapper() .readTree(this.getClass().getResourceAsStream("/custom_event_gzip.json")); - Expression expression = - JsonConfig.get().getJmesPath().compile("basket.powertools_base64_gzip(hiddenProduct)"); + Expression expression = JsonConfig.get().getJmesPath() + .compile("basket.powertools_base64_gzip(hiddenProduct)"); JsonNode result = expression.search(event); assertThat(result.getNodeType()).isEqualTo(JsonNodeType.STRING); assertThat(result.asText()).isEqualTo("{ \"id\": 43242, \"name\": \"FooBar XY\", \"price\": 258}"); } @Test - public void testPowertoolsGzipEmptyJsonAttribute() throws IOException { + void testPowertoolsGzipEmptyJsonAttribute() throws IOException { JsonNode event = JsonConfig.get().getObjectMapper() .readTree(this.getClass().getResourceAsStream("/custom_event_gzip.json")); Expression expression = JsonConfig.get().getJmesPath().compile("basket.powertools_base64_gzip('')"); @@ -58,7 +61,7 @@ public void testPowertoolsGzipEmptyJsonAttribute() throws IOException { } @Test - public void testPowertoolsGzipWrongArgumentType() throws IOException { + void testPowertoolsGzipWrongArgumentType() throws IOException { JsonNode event = JsonConfig.get().getObjectMapper() .readTree(this.getClass().getResourceAsStream("/custom_event_gzip.json")); Expression expression = JsonConfig.get().getJmesPath().compile("basket.powertools_base64_gzip(null)"); @@ -68,21 +71,20 @@ public void testPowertoolsGzipWrongArgumentType() throws IOException { } @Test - public void testBase64GzipDecompressNull() { + void testBase64GzipDecompressNull() { String result = Base64GZipFunction.decompress(null); assertThat(result).isNull(); } @Test - public void testPowertoolsGzipNotCompressedJsonAttribute() throws IOException { + void testPowertoolsGzipNotCompressedJsonAttribute() throws IOException { JsonNode event = JsonConfig.get().getObjectMapper() .readTree(this.getClass().getResourceAsStream("/custom_event_gzip.json")); - Expression expression = - JsonConfig.get().getJmesPath().compile("basket.powertools_base64_gzip(encodedString)"); + Expression expression = JsonConfig.get().getJmesPath() + .compile("basket.powertools_base64_gzip(encodedString)"); JsonNode result = expression.search(event); assertThat(result.getNodeType()).isEqualTo(JsonNodeType.STRING); assertThat(result.asText()).isEqualTo("test"); } - } diff --git a/powertools-serialization/src/test/java/software/amazon/lambda/powertools/utilities/jmespath/JsonFunctionTest.java b/powertools-serialization/src/test/java/software/amazon/lambda/powertools/utilities/jmespath/JsonFunctionTest.java index 0bfb635fa..028dba9ea 100644 --- a/powertools-serialization/src/test/java/software/amazon/lambda/powertools/utilities/jmespath/JsonFunctionTest.java +++ b/powertools-serialization/src/test/java/software/amazon/lambda/powertools/utilities/jmespath/JsonFunctionTest.java @@ -16,17 +16,20 @@ import static org.assertj.core.api.Assertions.assertThat; +import java.io.IOException; + +import org.junit.jupiter.api.Test; + import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.node.JsonNodeType; + import io.burt.jmespath.Expression; -import java.io.IOException; -import org.junit.jupiter.api.Test; import software.amazon.lambda.powertools.utilities.JsonConfig; -public class JsonFunctionTest { +class JsonFunctionTest { @Test - public void testJsonFunction() throws IOException { + void testJsonFunction() throws IOException { JsonNode event = JsonConfig.get().getObjectMapper() .readTree(this.getClass().getResourceAsStream("/custom_event_json.json")); Expression expression = JsonConfig.get().getJmesPath().compile("powertools_json(body)"); @@ -38,7 +41,7 @@ public void testJsonFunction() throws IOException { } @Test - public void testJsonFunctionChild() throws IOException { + void testJsonFunctionChild() throws IOException { JsonNode event = JsonConfig.get().getObjectMapper() .readTree(this.getClass().getResourceAsStream("/custom_event_json.json")); Expression expression = JsonConfig.get().getJmesPath().compile("powertools_json(body).list[0].item"); From f543b68171cb38df9dde72b2839aeb673e3e2b3d Mon Sep 17 00:00:00 2001 From: Philipp Page Date: Fri, 31 Oct 2025 12:47:29 +0100 Subject: [PATCH 007/202] fix(logging): Fix bug where correlation_id field was missing in JSON structured output (#2256) --- .../json/resolver/PowertoolsResolver.java | 20 ++++++++++++++++++- .../src/main/resources/LambdaEcsLayout.json | 14 ++++++++----- .../src/main/resources/LambdaJsonLayout.json | 4 ++++ .../PowertoolsResolverArgumentsTest.java | 6 ++++-- .../logging/logback/LambdaEcsEncoder.java | 7 +++++++ .../internal/LambdaEcsEncoderTest.java | 4 +++- .../internal/LambdaJsonEncoderTest.java | 6 ++++-- 7 files changed, 50 insertions(+), 11 deletions(-) diff --git a/powertools-logging/powertools-logging-log4j/src/main/java/org/apache/logging/log4j/layout/template/json/resolver/PowertoolsResolver.java b/powertools-logging/powertools-logging-log4j/src/main/java/org/apache/logging/log4j/layout/template/json/resolver/PowertoolsResolver.java index 8ada50f49..cef5b86ee 100644 --- a/powertools-logging/powertools-logging-log4j/src/main/java/org/apache/logging/log4j/layout/template/json/resolver/PowertoolsResolver.java +++ b/powertools-logging/powertools-logging-log4j/src/main/java/org/apache/logging/log4j/layout/template/json/resolver/PowertoolsResolver.java @@ -15,6 +15,7 @@ package org.apache.logging.log4j.layout.template.json.resolver; import static java.util.Arrays.stream; +import static software.amazon.lambda.powertools.logging.internal.PowertoolsLoggedFields.CORRELATION_ID; import static software.amazon.lambda.powertools.logging.internal.PowertoolsLoggedFields.FUNCTION_ARN; import static software.amazon.lambda.powertools.logging.internal.PowertoolsLoggedFields.FUNCTION_COLD_START; import static software.amazon.lambda.powertools.logging.internal.PowertoolsLoggedFields.FUNCTION_MEMORY_SIZE; @@ -112,7 +113,7 @@ public boolean isResolvable(LogEvent logEvent) { final String samplingRate = logEvent.getContextData().getValue(PowertoolsLoggedFields.SAMPLING_RATE.getName()); try { - return (null != samplingRate && Float.parseFloat(samplingRate) > 0.f); + return null != samplingRate && Float.parseFloat(samplingRate) > 0.f; } catch (NumberFormatException nfe) { return false; } @@ -142,6 +143,22 @@ public void resolve(LogEvent logEvent, JsonWriter jsonWriter) { } }; + private static final EventResolver CORRELATION_ID_RESOLVER = new EventResolver() { + @Override + public boolean isResolvable(LogEvent logEvent) { + final String correlationId = + logEvent.getContextData().getValue(PowertoolsLoggedFields.CORRELATION_ID.getName()); + return null != correlationId; + } + + @Override + public void resolve(LogEvent logEvent, JsonWriter jsonWriter) { + final String correlationId = + logEvent.getContextData().getValue(PowertoolsLoggedFields.CORRELATION_ID.getName()); + jsonWriter.writeString(correlationId); + } + }; + private static final EventResolver SERVICE_RESOLVER = (final LogEvent logEvent, final JsonWriter jsonWriter) -> { final String service = logEvent.getContextData().getValue(PowertoolsLoggedFields.SERVICE.getName()); @@ -214,6 +231,7 @@ public void resolve(LogEvent logEvent, JsonWriter jsonWriter) { { FUNCTION_REQUEST_ID.getName(), FUNCTION_REQ_RESOLVER }, { FUNCTION_COLD_START.getName(), COLD_START_RESOLVER }, { FUNCTION_TRACE_ID.getName(), XRAY_TRACE_RESOLVER }, + { CORRELATION_ID.getName(), CORRELATION_ID_RESOLVER }, { SAMPLING_RATE.getName(), SAMPLING_RATE_RESOLVER }, { "region", REGION_RESOLVER }, { "account_id", ACCOUNT_ID_RESOLVER } diff --git a/powertools-logging/powertools-logging-log4j/src/main/resources/LambdaEcsLayout.json b/powertools-logging/powertools-logging-log4j/src/main/resources/LambdaEcsLayout.json index 19f13f199..58b30f60e 100644 --- a/powertools-logging/powertools-logging-log4j/src/main/resources/LambdaEcsLayout.json +++ b/powertools-logging/powertools-logging-log4j/src/main/resources/LambdaEcsLayout.json @@ -45,13 +45,13 @@ "$resolver": "thread", "field": "name" }, - "cloud.provider" : "aws", - "cloud.service.name" : "lambda", - "cloud.region" : { + "cloud.provider": "aws", + "cloud.service.name": "lambda", + "cloud.region": { "$resolver": "powertools", "field": "region" }, - "cloud.account.id" : { + "cloud.account.id": { "$resolver": "powertools", "field": "account_id" }, @@ -83,7 +83,11 @@ "$resolver": "powertools", "field": "xray_trace_id" }, + "correlation.id": { + "$resolver": "powertools", + "field": "correlation_id" + }, "": { "$resolver": "powertools" } -} \ No newline at end of file +} diff --git a/powertools-logging/powertools-logging-log4j/src/main/resources/LambdaJsonLayout.json b/powertools-logging/powertools-logging-log4j/src/main/resources/LambdaJsonLayout.json index 8b811ee5f..793006502 100644 --- a/powertools-logging/powertools-logging-log4j/src/main/resources/LambdaJsonLayout.json +++ b/powertools-logging/powertools-logging-log4j/src/main/resources/LambdaJsonLayout.json @@ -65,6 +65,10 @@ "$resolver": "powertools", "field": "xray_trace_id" }, + "correlation_id": { + "$resolver": "powertools", + "field": "correlation_id" + }, "": { "$resolver": "powertools" } diff --git a/powertools-logging/powertools-logging-log4j/src/test/java/org/apache/logging/log4j/layout/template/json/resolver/PowertoolsResolverArgumentsTest.java b/powertools-logging/powertools-logging-log4j/src/test/java/org/apache/logging/log4j/layout/template/json/resolver/PowertoolsResolverArgumentsTest.java index 546d54579..573eaddbf 100644 --- a/powertools-logging/powertools-logging-log4j/src/test/java/org/apache/logging/log4j/layout/template/json/resolver/PowertoolsResolverArgumentsTest.java +++ b/powertools-logging/powertools-logging-log4j/src/test/java/org/apache/logging/log4j/layout/template/json/resolver/PowertoolsResolverArgumentsTest.java @@ -90,7 +90,8 @@ void shouldLogArgumentsAsJsonWhenUsingRawJson() { .contains( "\"input\":{\"awsRegion\":\"us-east-1\",\"body\":\"plop\",\"eventSource\":\"eb\",\"messageAttributes\":{\"keyAttribute\":{\"stringListValues\":[\"val1\",\"val2\",\"val3\"]}},\"messageId\":\"1212abcd\"}") .contains("\"message\":\"1212abcd\"") - .contains("\"message\":\"Message body = plop and id = \\\"1212abcd\\\"\""); + .contains("\"message\":\"Message body = plop and id = \\\"1212abcd\\\"\"") + .contains("\"correlation_id\":\"1212abcd\""); // Reserved keys should be ignored PowertoolsLoggedFields.stringValues().stream().forEach(reservedKey -> { assertThat(contentOf(logFile)).doesNotContain("\"" + reservedKey + "\":\"shouldBeIgnored\""); @@ -122,7 +123,8 @@ void shouldLogArgumentsAsJsonWhenUsingKeyValue() { .contains( "\"input\":{\"awsRegion\":\"us-east-1\",\"body\":\"plop\",\"eventSource\":\"eb\",\"messageAttributes\":{\"keyAttribute\":{\"stringListValues\":[\"val1\",\"val2\",\"val3\"]}},\"messageId\":\"1212abcd\"}") .contains("\"message\":\"1212abcd\"") - .contains("\"message\":\"Message body = plop and id = \\\"1212abcd\\\"\""); + .contains("\"message\":\"Message body = plop and id = \\\"1212abcd\\\"\"") + .contains("\"correlation_id\":\"1212abcd\""); // Reserved keys should be ignored PowertoolsLoggedFields.stringValues().stream().forEach(reservedKey -> { diff --git a/powertools-logging/powertools-logging-logback/src/main/java/software/amazon/lambda/powertools/logging/logback/LambdaEcsEncoder.java b/powertools-logging/powertools-logging-logback/src/main/java/software/amazon/lambda/powertools/logging/logback/LambdaEcsEncoder.java index a1a7daff1..6a82d8e67 100644 --- a/powertools-logging/powertools-logging-logback/src/main/java/software/amazon/lambda/powertools/logging/logback/LambdaEcsEncoder.java +++ b/powertools-logging/powertools-logging-logback/src/main/java/software/amazon/lambda/powertools/logging/logback/LambdaEcsEncoder.java @@ -15,6 +15,7 @@ package software.amazon.lambda.powertools.logging.logback; import static java.nio.charset.StandardCharsets.UTF_8; +import static software.amazon.lambda.powertools.logging.internal.PowertoolsLoggedFields.CORRELATION_ID; import static software.amazon.lambda.powertools.logging.internal.PowertoolsLoggedFields.FUNCTION_ARN; import static software.amazon.lambda.powertools.logging.internal.PowertoolsLoggedFields.FUNCTION_COLD_START; import static software.amazon.lambda.powertools.logging.internal.PowertoolsLoggedFields.FUNCTION_MEMORY_SIZE; @@ -72,6 +73,7 @@ public class LambdaEcsEncoder extends EncoderBase { protected static final String FUNCTION_VERSION_ATTR_NAME = "faas.version"; protected static final String FUNCTION_MEMORY_ATTR_NAME = "faas.memory"; protected static final String FUNCTION_TRACE_ID_ATTR_NAME = "trace.id"; + protected static final String CORRELATION_ID_ATTR_NAME = "correlation.id"; protected static final String ECS_VERSION = "1.2.0"; protected static final String CLOUD_PROVIDER = "aws"; @@ -156,6 +158,11 @@ private void serializeFunctionInfo(JsonSerializer serializer, String arn, Map { assertThat(contentOf(logFile)).doesNotContain("\"" + reservedKey + "\":\"shouldBeIgnored\""); @@ -168,7 +169,8 @@ void shouldLogArgumentsAsJsonWhenUsingKeyValue() { "\"input\":{\"awsRegion\":\"eu-central-1\",\"body\":\"plop\",\"eventSource\":\"eb\",\"messageAttributes\":{\"keyAttribute\":{\"stringListValues\":[\"val1\",\"val2\",\"val3\"]}},\"messageId\":\"1212abcd\"}") .contains("\"message\":\"1212abcd\"") // Should auto-escape double quotes around id - .contains("\"message\":\"Message body = plop and id = \\\"1212abcd\\\"\""); + .contains("\"message\":\"Message body = plop and id = \\\"1212abcd\\\"\"") + .contains("\"correlation_id\":\"1212abcd\""); // Reserved keys should be ignored PowertoolsLoggedFields.stringValues().stream().forEach(reservedKey -> { assertThat(contentOf(logFile)).doesNotContain("\"" + reservedKey + "\":\"shouldBeIgnored\""); From 71c632b70a4d1ec3146102e4c2ab5e3fa0f793d0 Mon Sep 17 00:00:00 2001 From: Philipp Page Date: Mon, 3 Nov 2025 11:42:16 +0100 Subject: [PATCH 008/202] feat(large-messages): Add function interface for Large Messages Utility (#2257) * Add functional API for LargeMessages utility. * Add E2E tests for functional large messages. * Use format specifiers for logging in LargeMessageE2ET.java. --- .../handlers/largemessage-functional/pom.xml | 46 +++ .../lambda/powertools/e2e/Function.java | 85 ++++++ .../src/main/resources/log4j2.xml | 16 + powertools-e2e-tests/handlers/pom.xml | 1 + .../lambda/powertools/LargeMessageE2ET.java | 62 ++-- powertools-large-messages/pom.xml | 18 +- .../largemessages/LargeMessage.java | 12 +- .../largemessages/LargeMessages.java | 156 ++++++++++ .../internal/LargeMessageAspect.java | 13 +- .../internal/LargeMessageFunction.java | 35 +++ .../internal/LargeMessageProcessor.java | 68 +++-- .../LargeMessageProcessorFactory.java | 7 +- .../largemessages/LargeMessagesTest.java | 287 ++++++++++++++++++ .../internal/LargeMessageAspectTest.java | 102 ++++--- .../test/resources/simplelogger.properties | 7 + 15 files changed, 810 insertions(+), 105 deletions(-) create mode 100644 powertools-e2e-tests/handlers/largemessage-functional/pom.xml create mode 100644 powertools-e2e-tests/handlers/largemessage-functional/src/main/java/software/amazon/lambda/powertools/e2e/Function.java create mode 100644 powertools-e2e-tests/handlers/largemessage-functional/src/main/resources/log4j2.xml create mode 100644 powertools-large-messages/src/main/java/software/amazon/lambda/powertools/largemessages/LargeMessages.java create mode 100644 powertools-large-messages/src/main/java/software/amazon/lambda/powertools/largemessages/internal/LargeMessageFunction.java create mode 100644 powertools-large-messages/src/test/java/software/amazon/lambda/powertools/largemessages/LargeMessagesTest.java create mode 100644 powertools-large-messages/src/test/resources/simplelogger.properties diff --git a/powertools-e2e-tests/handlers/largemessage-functional/pom.xml b/powertools-e2e-tests/handlers/largemessage-functional/pom.xml new file mode 100644 index 000000000..4afb633f2 --- /dev/null +++ b/powertools-e2e-tests/handlers/largemessage-functional/pom.xml @@ -0,0 +1,46 @@ + + 4.0.0 + + + software.amazon.lambda + e2e-test-handlers-parent + 2.5.0 + + + e2e-test-handler-largemessage-functional + jar + E2E test handler – Large message functional + + + + software.amazon.awssdk + dynamodb + + + software.amazon.lambda + powertools-large-messages + + + software.amazon.lambda + powertools-logging-log4j + + + software.amazon.lambda + powertools-logging + + + com.amazonaws + aws-lambda-java-events + + + + + + + org.apache.maven.plugins + maven-shade-plugin + + + + diff --git a/powertools-e2e-tests/handlers/largemessage-functional/src/main/java/software/amazon/lambda/powertools/e2e/Function.java b/powertools-e2e-tests/handlers/largemessage-functional/src/main/java/software/amazon/lambda/powertools/e2e/Function.java new file mode 100644 index 000000000..05a336500 --- /dev/null +++ b/powertools-e2e-tests/handlers/largemessage-functional/src/main/java/software/amazon/lambda/powertools/e2e/Function.java @@ -0,0 +1,85 @@ +/* + * Copyright 2023 Amazon.com, Inc. or its affiliates. + * Licensed under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * 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. + * + */ + +package software.amazon.lambda.powertools.e2e; + +import static software.amazon.lambda.powertools.logging.PowertoolsLogging.withLogging; + +import java.nio.charset.StandardCharsets; +import java.util.HashMap; +import java.util.Map; + +import com.amazonaws.services.lambda.runtime.Context; +import com.amazonaws.services.lambda.runtime.RequestHandler; +import com.amazonaws.services.lambda.runtime.events.SQSBatchResponse; +import com.amazonaws.services.lambda.runtime.events.SQSEvent; +import com.amazonaws.services.lambda.runtime.events.SQSEvent.SQSMessage; + +import software.amazon.awssdk.http.urlconnection.UrlConnectionHttpClient; +import software.amazon.awssdk.regions.Region; +import software.amazon.awssdk.services.dynamodb.DynamoDbClient; +import software.amazon.awssdk.services.dynamodb.model.AttributeValue; +import software.amazon.awssdk.services.dynamodb.model.PutItemRequest; +import software.amazon.awssdk.utils.BinaryUtils; +import software.amazon.awssdk.utils.Md5Utils; +import software.amazon.lambda.powertools.largemessages.LargeMessages; + +public class Function implements RequestHandler { + + private static final String TABLE_FOR_ASYNC_TESTS = System.getenv("TABLE_FOR_ASYNC_TESTS"); + private DynamoDbClient client; + + public Function() { + if (client == null) { + client = DynamoDbClient.builder() + .httpClient(UrlConnectionHttpClient.builder().build()) + .region(Region.of(System.getenv("AWS_REGION"))) + .build(); + } + } + + public SQSBatchResponse handleRequest(SQSEvent event, Context context) { + return withLogging(context, () -> { + for (SQSMessage message : event.getRecords()) { + LargeMessages.processLargeMessage(message, msg -> processRawMessage(msg, context)); + } + return SQSBatchResponse.builder().build(); + }); + } + + private Void processRawMessage(SQSMessage sqsMessage, Context context) { + String bodyMD5 = md5(sqsMessage.getBody()); + if (!sqsMessage.getMd5OfBody().equals(bodyMD5)) { + throw new SecurityException( + String.format("message digest does not match, expected %s, got %s", sqsMessage.getMd5OfBody(), + bodyMD5)); + } + + Map item = new HashMap<>(); + item.put("functionName", AttributeValue.builder().s(context.getFunctionName()).build()); + item.put("id", AttributeValue.builder().s(sqsMessage.getMessageId()).build()); + item.put("bodyMD5", AttributeValue.builder().s(bodyMD5).build()); + item.put("bodySize", + AttributeValue.builder().n(String.valueOf(sqsMessage.getBody().getBytes(StandardCharsets.UTF_8).length)) + .build()); + + client.putItem(PutItemRequest.builder().tableName(TABLE_FOR_ASYNC_TESTS).item(item).build()); + + return null; + } + + private String md5(String message) { + return BinaryUtils.toHex(Md5Utils.computeMD5Hash(message.getBytes(StandardCharsets.UTF_8))); + } +} diff --git a/powertools-e2e-tests/handlers/largemessage-functional/src/main/resources/log4j2.xml b/powertools-e2e-tests/handlers/largemessage-functional/src/main/resources/log4j2.xml new file mode 100644 index 000000000..8925f70b9 --- /dev/null +++ b/powertools-e2e-tests/handlers/largemessage-functional/src/main/resources/log4j2.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/powertools-e2e-tests/handlers/pom.xml b/powertools-e2e-tests/handlers/pom.xml index 86e867548..f171422c5 100644 --- a/powertools-e2e-tests/handlers/pom.xml +++ b/powertools-e2e-tests/handlers/pom.xml @@ -27,6 +27,7 @@ batch largemessage + largemessage-functional largemessage_idempotent logging-log4j logging-logback diff --git a/powertools-e2e-tests/src/test/java/software/amazon/lambda/powertools/LargeMessageE2ET.java b/powertools-e2e-tests/src/test/java/software/amazon/lambda/powertools/LargeMessageE2ET.java index 74247ca2e..0de2dca60 100644 --- a/powertools-e2e-tests/src/test/java/software/amazon/lambda/powertools/LargeMessageE2ET.java +++ b/powertools-e2e-tests/src/test/java/software/amazon/lambda/powertools/LargeMessageE2ET.java @@ -16,9 +16,10 @@ import org.apache.commons.io.IOUtils; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestInstance; import org.junit.jupiter.api.Timeout; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -40,6 +41,7 @@ import software.amazon.lambda.powertools.testutils.Infrastructure; import software.amazon.lambda.powertools.testutils.RetryUtils; +@TestInstance(TestInstance.Lifecycle.PER_CLASS) class LargeMessageE2ET { private static final Logger LOG = LoggerFactory.getLogger(LargeMessageE2ET.class); @@ -55,25 +57,34 @@ class LargeMessageE2ET { .region(region) .build(); - private static Infrastructure infrastructure; - private static String functionName; - private static String bucketName; - private static String queueUrl; - private static String tableName; + private Infrastructure infrastructure; + private String functionName; + private String bucketName; + private String queueUrl; + private String tableName; private String messageId; + private String currentPathToFunction; + + private void setupInfrastructure(String pathToFunction) { + // Do not re-deploy the same function + if (pathToFunction.equals(currentPathToFunction)) { + return; + } + + // Destroy any existing infrastructure before re-deploying + if (infrastructure != null) { + infrastructure.destroy(); + } - @BeforeAll - @Timeout(value = 5, unit = TimeUnit.MINUTES) - static void setup() { String random = UUID.randomUUID().toString().substring(0, 6); bucketName = "largemessagebucket" + random; String queueName = "largemessagequeue" + random; infrastructure = Infrastructure.builder() - .testName(LargeMessageE2ET.class.getSimpleName()) + .testName(LargeMessageE2ET.class.getSimpleName() + "-" + pathToFunction) .queue(queueName) .largeMessagesBucket(bucketName) - .pathToFunction("largemessage") + .pathToFunction(pathToFunction) .timeoutInSeconds(60) .build(); @@ -81,19 +92,24 @@ static void setup() { functionName = outputs.get(FUNCTION_NAME_OUTPUT); queueUrl = outputs.get("QueueURL"); tableName = outputs.get("TableNameForAsyncTests"); + currentPathToFunction = pathToFunction; - LOG.info("Testing '" + LargeMessageE2ET.class.getSimpleName() + "'"); + LOG.info("Testing '{}' with {}", LargeMessageE2ET.class.getSimpleName(), pathToFunction); } @AfterAll - static void tearDown() { + void cleanup() { if (infrastructure != null) { infrastructure.destroy(); } } @AfterEach - void reset() { + void tearDown() { + reset(); + } + + private void reset() { if (messageId != null) { Map itemToDelete = new HashMap<>(); itemToDelete.put("functionName", AttributeValue.builder().s(functionName).build()); @@ -103,8 +119,12 @@ void reset() { } } - @Test - void bigSQSMessageOffloadedToS3_shouldLoadFromS3() throws IOException { + @ParameterizedTest + @ValueSource(strings = { "largemessage", "largemessage-functional" }) + @Timeout(value = 5, unit = TimeUnit.MINUTES) + void bigSQSMessageOffloadedToS3_shouldLoadFromS3(String pathToFunction) throws IOException { + setupInfrastructure(pathToFunction); + // GIVEN final ExtendedClientConfiguration extendedClientConfig = new ExtendedClientConfiguration() .withPayloadSupportEnabled(s3Client, bucketName); @@ -146,8 +166,12 @@ void bigSQSMessageOffloadedToS3_shouldLoadFromS3() throws IOException { assertThat(items.get(0).get("bodyMD5").s()).isEqualTo("22bde5e7b05fa80bc7be45bdd4bc6c75"); } - @Test - void smallSQSMessage_shouldNotReadFromS3() { + @ParameterizedTest + @ValueSource(strings = { "largemessage", "largemessage-functional" }) + @Timeout(value = 5, unit = TimeUnit.MINUTES) + void smallSQSMessage_shouldNotReadFromS3(String pathToFunction) { + setupInfrastructure(pathToFunction); + // GIVEN final ExtendedClientConfiguration extendedClientConfig = new ExtendedClientConfiguration() .withPayloadSupportEnabled(s3Client, bucketName); diff --git a/powertools-large-messages/pom.xml b/powertools-large-messages/pom.xml index a405941d7..bc7bbf03a 100644 --- a/powertools-large-messages/pom.xml +++ b/powertools-large-messages/pom.xml @@ -14,11 +14,11 @@ --> + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 -A suite of utilities for AWS Lambda Functions that makes handling large messages in SQS and SNS easier. + A suite of utilities for AWS Lambda Functions that makes handling large messages in SQS and SNS easier. software.amazon.lambda @@ -41,6 +41,13 @@ software.amazon.lambda powertools-common + + software.amazon.lambda + powertools-common + ${project.version} + test-jar + test + com.amazonaws aws-lambda-java-events @@ -102,6 +109,11 @@ mockito-core test + + org.mockito + mockito-junit-jupiter + test + org.slf4j slf4j-simple diff --git a/powertools-large-messages/src/main/java/software/amazon/lambda/powertools/largemessages/LargeMessage.java b/powertools-large-messages/src/main/java/software/amazon/lambda/powertools/largemessages/LargeMessage.java index 4e556966c..eb5b368a5 100644 --- a/powertools-large-messages/src/main/java/software/amazon/lambda/powertools/largemessages/LargeMessage.java +++ b/powertools-large-messages/src/main/java/software/amazon/lambda/powertools/largemessages/LargeMessage.java @@ -20,15 +20,15 @@ import java.lang.annotation.Target; /** - *

Use this annotation to handle large messages (> 256 KB) from SQS or SNS. + *

Use this annotation to handle large messages (> 1 MB) from SQS or SNS. * When large messages are sent to an SQS Queue or SNS Topic, they are offloaded to S3 and only a reference is passed in the message/record.

* *

{@code @LargeMessage} automatically retrieves and deletes messages * which have been offloaded to S3 using the {@code amazon-sqs-java-extended-client-lib} or {@code amazon-sns-java-extended-client-lib} * client libraries.

* - *

This version of the {@code @LargeMessage} is compatible with version - * 1.1.0+ of {@code amazon-sqs-java-extended-client-lib} / {@code amazon-sns-java-extended-client-lib}.

+ *

This version of the {@code @LargeMessage} is compatible with version 1.1.0+ and 2.0.0+ + * of {@code amazon-sqs-java-extended-client-lib} / {@code amazon-sns-java-extended-client-lib}.

*
*

Put this annotation on a method where the first parameter is either a {@link com.amazonaws.services.lambda.runtime.events.SQSEvent.SQSMessage} or {@link com.amazonaws.services.lambda.runtime.events.SNSEvent.SNSRecord}. *
@@ -54,9 +54,11 @@ * *

* - *

Note 1: Retrieving payloads and deleting objects from S3 will increase the duration of the + *

Note 1: The message object (SQSMessage or SNSRecord) is modified in-place to avoid duplicating + * the large blob in memory. The message body will be replaced with the S3 object content.

+ *

Note 2: Retrieving payloads and deleting objects from S3 will increase the duration of the * Lambda function.

- *

Note 2: Make sure to configure your function with enough memory to be able to retrieve S3 objects.

+ *

Note 3: Make sure to configure your function with enough memory to be able to retrieve S3 objects.

*/ @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) diff --git a/powertools-large-messages/src/main/java/software/amazon/lambda/powertools/largemessages/LargeMessages.java b/powertools-large-messages/src/main/java/software/amazon/lambda/powertools/largemessages/LargeMessages.java new file mode 100644 index 000000000..52675d3eb --- /dev/null +++ b/powertools-large-messages/src/main/java/software/amazon/lambda/powertools/largemessages/LargeMessages.java @@ -0,0 +1,156 @@ +/* + * Copyright 2023 Amazon.com, Inc. or its affiliates. + * Licensed under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * 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. + * + */ + +package software.amazon.lambda.powertools.largemessages; + +import java.util.Optional; +import java.util.function.Function; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import software.amazon.lambda.powertools.largemessages.internal.LargeMessageProcessor; +import software.amazon.lambda.powertools.largemessages.internal.LargeMessageProcessorFactory; + +/** + * Functional API for processing large messages without AspectJ. + *

+ * Use this class to handle large messages (> 1 MB) from SQS or SNS. + * When large messages are sent to an SQS Queue or SNS Topic, they are offloaded to S3 and only a reference is passed in the message/record. + *

+ * {@code LargeMessages} automatically retrieves and optionally deletes messages + * which have been offloaded to S3 using the {@code amazon-sqs-java-extended-client-lib} or {@code amazon-sns-java-extended-client-lib} + * client libraries. + *

+ * This version is compatible with version 1.1.0+ and 2.0.0+ of {@code amazon-sqs-java-extended-client-lib} / {@code amazon-sns-java-extended-client-lib}. + *

+ * SQS Example: + *

+ * public class SqsBatchHandler implements RequestHandler<SQSEvent, SQSBatchResponse> {
+ *     private final BatchMessageHandler<SQSEvent, SQSBatchResponse> handler;
+ *
+ *     public SqsBatchHandler() {
+ *         handler = new BatchMessageHandlerBuilder()
+ *                 .withSqsBatchHandler()
+ *                 .buildWithRawMessageHandler(this::processMessage);
+ *     }
+ *
+ *     @Override
+ *     public SQSBatchResponse handleRequest(SQSEvent sqsEvent, Context context) {
+ *         return handler.processBatch(sqsEvent, context);
+ *     }
+ *
+ *     private void processMessage(SQSEvent.SQSMessage sqsMessage) {
+ *         LargeMessages.processLargeMessage(sqsMessage, this::handleProcessedMessage);
+ *     }
+ *
+ *     private void handleProcessedMessage(SQSEvent.SQSMessage processedMessage) {
+ *         // processedMessage.getBody() will contain the content of the S3 Object
+ *     }
+ * }
+ * 
+ *

+ * To disable the deletion of S3 objects: + *

+ * LargeMessages.processLargeMessage(sqsMessage, this::handleProcessedMessage, false);
+ * 
+ *

+ * For multi-argument methods, use a lambda to pass additional parameters: + *

+ * public void handleRequest(SQSEvent event, Context context) {
+ *     event.getRecords().forEach(message ->
+ *         LargeMessages.processLargeMessage(message, processedMsg -> processMessage(processedMsg, context))
+ *     );
+ * }
+ *
+ * private void processMessage(SQSMessage processedMessage, Context context) {
+ *     // processedMessage.getBody() will contain the content of the S3 Object
+ * }
+ * 
+ *

+ * Note 1: The message object (SQSMessage or SNSRecord) is modified in-place to avoid duplicating + * the large blob in memory. The message body will be replaced with the S3 object content. + *

+ * Note 2: Retrieving payloads and deleting objects from S3 will increase the duration of the Lambda function. + *

+ * Note 3: Make sure to configure your function with enough memory to be able to retrieve S3 objects. + * + * @see LargeMessage + */ +public final class LargeMessages { + + private static final Logger LOG = LoggerFactory.getLogger(LargeMessages.class); + + private LargeMessages() { + // Utility class + } + + /** + * Process a large message and execute the function with the processed message. + *

+ * The S3 object will be deleted after processing (default behavior). + * To disable S3 object deletion, use {@link #processLargeMessage(Object, Function, boolean)}. + *

+ * Example usage: + *

+     * String returnValueOfFunction = LargeMessages.processLargeMessage(sqsMessage, this::handleMessage);
+     * String returnValueOfFunction = LargeMessages.processLargeMessage(sqsMessage, processedMsg -> processOrder(processedMsg, orderId, amount));
+     * 
+ * + * @param message the message to process (SQSMessage or SNSRecord) + * @param function the function to execute with the processed message + * @param the message type + * @param the return type of the function + * @return the result of the function execution + */ + public static R processLargeMessage(T message, Function function) { + return processLargeMessage(message, function, true); + } + + /** + * Process a large message and execute the function with the processed message. + *

+ * Example usage: + *

+     * String returnValueOfFunction = LargeMessages.processLargeMessage(sqsMessage, this::handleMessage, false);
+     * String returnValueOfFunction = LargeMessages.processLargeMessage(sqsMessage, processedMsg -> processOrder(processedMsg, orderId, amount), false);
+     * 
+ * + * @param message the message to process (SQSMessage or SNSRecord) + * @param function the function to execute with the processed message + * @param deleteS3Object whether to delete the S3 object after processing + * @param the message type + * @param the return type of the function + * @return the result of the function execution + */ + public static R processLargeMessage(T message, Function function, boolean deleteS3Object) { + Optional> processor = LargeMessageProcessorFactory.get(message); + + if (!processor.isPresent()) { + LOG.warn("Unsupported message type [{}], proceeding without large message processing", + message.getClass()); + return function.apply(message); + } + + try { + @SuppressWarnings("unchecked") + LargeMessageProcessor typedProcessor = (LargeMessageProcessor) processor.get(); + return typedProcessor.process(message, function::apply, deleteS3Object); + } catch (RuntimeException e) { + throw e; + } catch (Throwable t) { + throw new LargeMessageProcessingException("Failed to process large message", t); + } + } +} diff --git a/powertools-large-messages/src/main/java/software/amazon/lambda/powertools/largemessages/internal/LargeMessageAspect.java b/powertools-large-messages/src/main/java/software/amazon/lambda/powertools/largemessages/internal/LargeMessageAspect.java index 2aa81691f..0a8b93095 100644 --- a/powertools-large-messages/src/main/java/software/amazon/lambda/powertools/largemessages/internal/LargeMessageAspect.java +++ b/powertools-large-messages/src/main/java/software/amazon/lambda/powertools/largemessages/internal/LargeMessageAspect.java @@ -15,12 +15,14 @@ package software.amazon.lambda.powertools.largemessages.internal; import java.util.Optional; + import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Pointcut; import org.slf4j.Logger; import org.slf4j.LoggerFactory; + import software.amazon.lambda.powertools.largemessages.LargeMessage; /** @@ -31,17 +33,17 @@ public class LargeMessageAspect { private static final Logger LOG = LoggerFactory.getLogger(LargeMessageAspect.class); - @SuppressWarnings({"EmptyMethod"}) + @SuppressWarnings({ "EmptyMethod" }) @Pointcut("@annotation(largeMessage)") public void callAt(LargeMessage largeMessage) { + // Pointcut method - body intentionally empty } + @SuppressWarnings("unchecked") @Around(value = "callAt(largeMessage) && execution(@LargeMessage * *.*(..))", argNames = "pjp,largeMessage") - public Object around(ProceedingJoinPoint pjp, - LargeMessage largeMessage) throws Throwable { + public Object around(ProceedingJoinPoint pjp, LargeMessage largeMessage) throws Throwable { Object[] proceedArgs = pjp.getArgs(); - // we need a message to process if (proceedArgs.length == 0) { LOG.warn("@LargeMessage annotation is placed on a method without any message to process, proceeding"); return pjp.proceed(proceedArgs); @@ -56,7 +58,8 @@ public Object around(ProceedingJoinPoint pjp, return pjp.proceed(proceedArgs); } - return largeMessageProcessor.get().process(pjp, largeMessage.deleteS3Object()); + return ((LargeMessageProcessor) largeMessageProcessor.get()).process(message, + msg -> pjp.proceed(proceedArgs), largeMessage.deleteS3Object()); } } diff --git a/powertools-large-messages/src/main/java/software/amazon/lambda/powertools/largemessages/internal/LargeMessageFunction.java b/powertools-large-messages/src/main/java/software/amazon/lambda/powertools/largemessages/internal/LargeMessageFunction.java new file mode 100644 index 000000000..1690eedac --- /dev/null +++ b/powertools-large-messages/src/main/java/software/amazon/lambda/powertools/largemessages/internal/LargeMessageFunction.java @@ -0,0 +1,35 @@ +/* + * Copyright 2023 Amazon.com, Inc. or its affiliates. + * Licensed under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * 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. + * + */ + +package software.amazon.lambda.powertools.largemessages.internal; + +/** + * Functional interface for large message processing. + *

+ * This interface is similar to {@link java.util.function.Function} but throws {@link Throwable} + * instead of no exceptions. This is necessary to support AspectJ's {@code ProceedingJoinPoint.proceed()} + * which throws {@code Throwable}, allowing exceptions to bubble up naturally without wrapping. + *

+ * This interface should not be exposed to user-facing APIs such as + * {@link software.amazon.lambda.powertools.largemessages.LargeMessages}. These should use plain + * {@link java.util.function.Function}. + * + * @param the input type (message type) + * @param the return type of the function + */ +@FunctionalInterface +public interface LargeMessageFunction { + @SuppressWarnings("java:S112") // Throwable is required for AspectJ compatibility + R apply(T processedMessage) throws Throwable; +} diff --git a/powertools-large-messages/src/main/java/software/amazon/lambda/powertools/largemessages/internal/LargeMessageProcessor.java b/powertools-large-messages/src/main/java/software/amazon/lambda/powertools/largemessages/internal/LargeMessageProcessor.java index 5478931f1..c41af0cea 100644 --- a/powertools-large-messages/src/main/java/software/amazon/lambda/powertools/largemessages/internal/LargeMessageProcessor.java +++ b/powertools-large-messages/src/main/java/software/amazon/lambda/powertools/largemessages/internal/LargeMessageProcessor.java @@ -17,9 +17,10 @@ import static java.lang.String.format; import java.nio.charset.StandardCharsets; -import org.aspectj.lang.ProceedingJoinPoint; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; + import software.amazon.awssdk.core.exception.SdkException; import software.amazon.awssdk.services.s3.S3Client; import software.amazon.lambda.powertools.largemessages.LargeMessageConfig; @@ -28,33 +29,44 @@ import software.amazon.payloadoffloading.S3Dao; /** - * Abstract processor for Large Messages. Handle the download from S3 and replace the actual S3 pointer with the content - * of the S3 Object leveraging the payloadoffloading library. + * Abstract processor for Large Messages. + *

+ * Handles the download from S3 and replaces the S3 pointer with the actual content + * of the S3 Object, leveraging the payloadoffloading library. * - * @param any message type that support Large Messages with S3 pointers - * ({@link com.amazonaws.services.lambda.runtime.events.SQSEvent.SQSMessage} and {@link com.amazonaws.services.lambda.runtime.events.SNSEvent.SNSRecord} at the moment) + * @param any message type that supports Large Messages with S3 pointers + * ({@link com.amazonaws.services.lambda.runtime.events.SQSEvent.SQSMessage} + * and {@link com.amazonaws.services.lambda.runtime.events.SNSEvent.SNSRecord}) */ -abstract class LargeMessageProcessor { +public abstract class LargeMessageProcessor { protected static final String RESERVED_ATTRIBUTE_NAME = "ExtendedPayloadSize"; private static final Logger LOG = LoggerFactory.getLogger(LargeMessageProcessor.class); private final S3Client s3Client = LargeMessageConfig.get().getS3Client(); private final S3BackedPayloadStore payloadStore = new S3BackedPayloadStore(new S3Dao(s3Client), "DUMMY"); - public Object process(ProceedingJoinPoint pjp, boolean deleteS3Object) throws Throwable { - Object[] proceedArgs = pjp.getArgs(); - T message = (T) proceedArgs[0]; - + /** + * Process a large message using a functional interface. + * + * @param message the message to process + * @param function the function to execute with the processed message + * @param deleteS3Object whether to delete the S3 object after processing + * @param the return type of the wrapped function + * @return the result of the function execution + * @throws Throwable if an error occurs during processing + */ + public R process(T message, LargeMessageFunction function, boolean deleteS3Object) throws Throwable { if (!isLargeMessage(message)) { LOG.warn("Not a large message, proceeding"); - return pjp.proceed(proceedArgs); + return function.apply(message); } String payloadPointer = getMessageContent(message); if (payloadPointer == null) { LOG.warn("No content in the message, proceeding"); - return pjp.proceed(proceedArgs); + return function.apply(message); } + // legacy attribute (sqs only) payloadPointer = payloadPointer.replace("com.amazon.sqs.javamessaging.MessageS3Pointer", "software.amazon.payloadoffloading.PayloadS3Pointer"); @@ -73,7 +85,7 @@ public Object process(ProceedingJoinPoint pjp, boolean deleteS3Object) throws Th updateMessageContent(message, s3ObjectContent); removeLargeMessageAttributes(message); - Object response = pjp.proceed(proceedArgs); + R result = function.apply(message); if (deleteS3Object) { if (LOG.isInfoEnabled()) { @@ -82,45 +94,45 @@ public Object process(ProceedingJoinPoint pjp, boolean deleteS3Object) throws Th deleteS3Object(payloadPointer); } - return response; + return result; } /** - * Retrieve the message id + * Retrieve the message ID. * - * @param message the message itself - * @return the id of the message (String format) + * @param message the message + * @return the message ID */ protected abstract String getMessageId(T message); /** - * Retrieve the content of the message (ex: body of an SQSMessage) + * Retrieve the content of the message (e.g., body of an SQSMessage). * - * @param message the message itself - * @return the content of the message (String format) + * @param message the message + * @return the message content */ protected abstract String getMessageContent(T message); /** - * Update the message content of the message (ex: body of an SQSMessage) + * Update the message content (e.g., body of an SQSMessage). * - * @param message the message itself - * @param messageContent the new content of the message (String format) + * @param message the message + * @param messageContent the new message content */ protected abstract void updateMessageContent(T message, String messageContent); /** - * Check if the message is actually a large message (indicator in message attributes) + * Check if the message is a large message (based on message attributes). * - * @param message the message itself - * @return true if the message is a large message + * @param message the message + * @return true if the message is a large message, false otherwise */ protected abstract boolean isLargeMessage(T message); /** - * Remove the large message indicator (in message attributes) + * Remove the large message indicator from message attributes. * - * @param message the message itself + * @param message the message */ protected abstract void removeLargeMessageAttributes(T message); diff --git a/powertools-large-messages/src/main/java/software/amazon/lambda/powertools/largemessages/internal/LargeMessageProcessorFactory.java b/powertools-large-messages/src/main/java/software/amazon/lambda/powertools/largemessages/internal/LargeMessageProcessorFactory.java index 26c33738a..06ee92968 100644 --- a/powertools-large-messages/src/main/java/software/amazon/lambda/powertools/largemessages/internal/LargeMessageProcessorFactory.java +++ b/powertools-large-messages/src/main/java/software/amazon/lambda/powertools/largemessages/internal/LargeMessageProcessorFactory.java @@ -14,14 +14,15 @@ package software.amazon.lambda.powertools.largemessages.internal; +import java.util.Optional; + import com.amazonaws.services.lambda.runtime.events.SNSEvent.SNSRecord; import com.amazonaws.services.lambda.runtime.events.SQSEvent.SQSMessage; -import java.util.Optional; -class LargeMessageProcessorFactory { +public final class LargeMessageProcessorFactory { private LargeMessageProcessorFactory() { - // not intended to be instantiated + // Utility class } public static Optional> get(Object message) { diff --git a/powertools-large-messages/src/test/java/software/amazon/lambda/powertools/largemessages/LargeMessagesTest.java b/powertools-large-messages/src/test/java/software/amazon/lambda/powertools/largemessages/LargeMessagesTest.java new file mode 100644 index 000000000..7bd3e80e2 --- /dev/null +++ b/powertools-large-messages/src/test/java/software/amazon/lambda/powertools/largemessages/LargeMessagesTest.java @@ -0,0 +1,287 @@ +/* + * Copyright 2023 Amazon.com, Inc. or its affiliates. + * Licensed under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * 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. + * + */ + +package software.amazon.lambda.powertools.largemessages; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.verifyNoInteractions; +import static org.mockito.Mockito.when; + +import java.io.ByteArrayInputStream; +import java.lang.reflect.Field; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.ArgumentCaptor; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +import com.amazonaws.services.lambda.runtime.events.KinesisEvent.KinesisEventRecord; +import com.amazonaws.services.lambda.runtime.events.SNSEvent; +import com.amazonaws.services.lambda.runtime.events.SNSEvent.SNS; +import com.amazonaws.services.lambda.runtime.events.SNSEvent.SNSRecord; +import com.amazonaws.services.lambda.runtime.events.SQSEvent.MessageAttribute; +import com.amazonaws.services.lambda.runtime.events.SQSEvent.SQSMessage; + +import software.amazon.awssdk.core.ResponseInputStream; +import software.amazon.awssdk.http.AbortableInputStream; +import software.amazon.awssdk.services.s3.S3Client; +import software.amazon.awssdk.services.s3.model.DeleteObjectRequest; +import software.amazon.awssdk.services.s3.model.GetObjectRequest; +import software.amazon.awssdk.services.s3.model.GetObjectResponse; +import software.amazon.awssdk.services.s3.model.S3Exception; + +@ExtendWith(MockitoExtension.class) +class LargeMessagesTest { + + private static final String BIG_MSG = "A biiiiiiiig message"; + private static final String BUCKET_NAME = "bucketname"; + private static final String BUCKET_KEY = "c71eb2ae-37e0-4265-8909-32f4153faddf"; + private static final String BIG_MESSAGE_BODY = "[\"software.amazon.payloadoffloading.PayloadS3Pointer\", {\"s3BucketName\":\"" + + BUCKET_NAME + + "\", \"s3Key\":\"" + BUCKET_KEY + "\"}]"; + + @Mock + private S3Client s3Client; + + @BeforeEach + void init() throws NoSuchFieldException, IllegalAccessException { + // need to clean the s3Client with introspection (singleton) + Field client = LargeMessageConfig.class.getDeclaredField("s3Client"); + client.setAccessible(true); + client.set(LargeMessageConfig.get(), null); + LargeMessageConfig.init().withS3Client(s3Client); + } + + @Test + void testProcessLargeSQSMessage_shouldRetrieveFromS3AndDelete() { + // given + when(s3Client.getObject(any(GetObjectRequest.class))).thenReturn(s3ObjectWithLargeMessage()); + SQSMessage sqsMessage = sqsMessageWithBody(BIG_MESSAGE_BODY, true); + + // when + String result = LargeMessages.processLargeMessage(sqsMessage, SQSMessage::getBody); + + // then + assertThat(result).isEqualTo(BIG_MSG); + ArgumentCaptor delete = ArgumentCaptor.forClass(DeleteObjectRequest.class); + verify(s3Client).deleteObject(delete.capture()); + assertThat(delete.getValue().bucket()).isEqualTo(BUCKET_NAME); + assertThat(delete.getValue().key()).isEqualTo(BUCKET_KEY); + } + + @Test + void testProcessLargeSQSMessage_withDeleteDisabled_shouldNotDelete() { + // given + when(s3Client.getObject(any(GetObjectRequest.class))).thenReturn(s3ObjectWithLargeMessage()); + SQSMessage sqsMessage = sqsMessageWithBody(BIG_MESSAGE_BODY, true); + + // when + String result = LargeMessages.processLargeMessage(sqsMessage, SQSMessage::getBody, false); + + // then + assertThat(result).isEqualTo(BIG_MSG); + verify(s3Client, never()).deleteObject(any(DeleteObjectRequest.class)); + } + + @Test + void testProcessLargeSNSMessage_shouldRetrieveFromS3AndDelete() { + // given + when(s3Client.getObject(any(GetObjectRequest.class))).thenReturn(s3ObjectWithLargeMessage()); + SNSRecord snsRecord = snsRecordWithMessage(BIG_MESSAGE_BODY, true); + + // when + String result = LargeMessages.processLargeMessage(snsRecord, msg -> msg.getSNS().getMessage()); + + // then + assertThat(result).isEqualTo(BIG_MSG); + verify(s3Client).deleteObject(any(DeleteObjectRequest.class)); + } + + @Test + void testProcessSmallMessage_shouldNotInteractWithS3() { + // given + SQSMessage sqsMessage = sqsMessageWithBody("Small message", false); + + // when + String result = LargeMessages.processLargeMessage(sqsMessage, SQSMessage::getBody); + + // then + assertThat(result).isEqualTo("Small message"); + verifyNoInteractions(s3Client); + } + + @Test + void testProcessUnsupportedMessageType_shouldCallHandlerDirectly() { + // given + KinesisEventRecord kinesisRecord = new KinesisEventRecord(); + kinesisRecord.setEventID("kinesis-123"); + + // when + String result = LargeMessages.processLargeMessage(kinesisRecord, KinesisEventRecord::getEventID); + + // then + assertThat(result).isEqualTo("kinesis-123"); + verifyNoInteractions(s3Client); + } + + @Test + void testProcessMessageWithNullBody_shouldCallHandler() { + // given + SQSMessage sqsMessage = sqsMessageWithBody(null, true); + + // when + String result = LargeMessages.processLargeMessage(sqsMessage, SQSMessage::getBody); + + // then + assertThat(result).isNull(); + verifyNoInteractions(s3Client); + } + + @Test + void testProcessMessage_whenS3GetFails_shouldThrowException() { + // given + when(s3Client.getObject(any(GetObjectRequest.class))) + .thenThrow(S3Exception.create("Access denied", new Exception("Permission denied"))); + SQSMessage sqsMessage = sqsMessageWithBody(BIG_MESSAGE_BODY, true); + + // when / then + assertThatThrownBy(() -> LargeMessages.processLargeMessage(sqsMessage, SQSMessage::getBody)) + .isInstanceOf(LargeMessageProcessingException.class) + .hasMessageContaining("Failed processing S3 record"); + } + + @Test + void testProcessMessage_whenS3DeleteFails_shouldThrowException() { + // given + when(s3Client.getObject(any(GetObjectRequest.class))).thenReturn(s3ObjectWithLargeMessage()); + when(s3Client.deleteObject(any(DeleteObjectRequest.class))) + .thenThrow(S3Exception.create("Access denied", new Exception("Permission denied"))); + SQSMessage sqsMessage = sqsMessageWithBody(BIG_MESSAGE_BODY, true); + + // when / then + assertThatThrownBy(() -> LargeMessages.processLargeMessage(sqsMessage, SQSMessage::getBody)) + .isInstanceOf(LargeMessageProcessingException.class) + .hasMessageContaining("Failed deleting S3 record"); + } + + @Test + void testProcessMessage_whenHandlerThrowsRuntimeException_shouldPropagate() { + // given + when(s3Client.getObject(any(GetObjectRequest.class))).thenReturn(s3ObjectWithLargeMessage()); + SQSMessage sqsMessage = sqsMessageWithBody(BIG_MESSAGE_BODY, true); + + // when / then + assertThatThrownBy(() -> LargeMessages.processLargeMessage(sqsMessage, msg -> { + throw new IllegalStateException("Handler error"); + })) + .isInstanceOf(IllegalStateException.class) + .hasMessage("Handler error"); + } + + @Test + void testProcessLargeMessage_withMultiParam_shouldRetrieveFromS3AndDelete() { + // given + when(s3Client.getObject(any(GetObjectRequest.class))).thenReturn(s3ObjectWithLargeMessage()); + SQSMessage sqsMessage = sqsMessageWithBody(BIG_MESSAGE_BODY, true); + String orderId = "order-123"; + + // when + String result = LargeMessages.processLargeMessage(sqsMessage, msg -> processOrderSimple(msg, orderId)); + + // then + assertThat(result).isEqualTo("order-123-processed"); + verify(s3Client).deleteObject(any(DeleteObjectRequest.class)); + } + + @Test + void testProcessLargeMessage_withMultiParamAndDeleteDisabled_shouldNotDelete() { + // given + when(s3Client.getObject(any(GetObjectRequest.class))).thenReturn(s3ObjectWithLargeMessage()); + SQSMessage sqsMessage = sqsMessageWithBody(BIG_MESSAGE_BODY, true); + String orderId = "order-456"; + + // when + String result = LargeMessages.processLargeMessage(sqsMessage, msg -> processOrderSimple(msg, orderId), false); + + // then + assertThat(result).isEqualTo("order-456-processed"); + verify(s3Client, never()).deleteObject(any(DeleteObjectRequest.class)); + } + + @Test + void testProcessLargeMessage_shouldModifyMessageInPlace() { + // given + when(s3Client.getObject(any(GetObjectRequest.class))).thenReturn(s3ObjectWithLargeMessage()); + SQSMessage sqsMessage = sqsMessageWithBody(BIG_MESSAGE_BODY, true); + String originalBody = sqsMessage.getBody(); + + // when + LargeMessages.processLargeMessage(sqsMessage, msg -> { + assertThat(msg.getBody()).isEqualTo(BIG_MSG); + return null; + }); + + // then - verify the original message object was modified + assertThat(sqsMessage.getBody()).isEqualTo(BIG_MSG); + assertThat(sqsMessage.getBody()).isNotEqualTo(originalBody); + } + + private String processOrderSimple(SQSMessage message, String orderId) { + assertThat(message.getBody()).isEqualTo(BIG_MSG); + return orderId + "-processed"; + } + + private ResponseInputStream s3ObjectWithLargeMessage() { + return new ResponseInputStream<>(GetObjectResponse.builder().build(), + AbortableInputStream.create(new ByteArrayInputStream(BIG_MSG.getBytes()))); + } + + private SQSMessage sqsMessageWithBody(String messageBody, boolean largeMessage) { + SQSMessage sqsMessage = new SQSMessage(); + sqsMessage.setBody(messageBody); + if (messageBody != null) { + sqsMessage.setMd5OfBody("dummy-md5"); + } + + if (largeMessage) { + Map attributeMap = new HashMap<>(); + MessageAttribute payloadAttribute = new MessageAttribute(); + payloadAttribute.setStringValue("300450"); + payloadAttribute.setDataType("Number"); + attributeMap.put("ExtendedPayloadSize", payloadAttribute); + + sqsMessage.setMessageAttributes(attributeMap); + sqsMessage.setMd5OfMessageAttributes("dummy-md5"); + } + return sqsMessage; + } + + private SNSRecord snsRecordWithMessage(String messageBody, boolean largeMessage) { + SNS sns = new SNS().withMessage(messageBody); + if (largeMessage) { + sns.setMessageAttributes(Collections.singletonMap("ExtendedPayloadSize", + new SNSEvent.MessageAttribute())); + } + return new SNSRecord().withSns(sns); + } +} diff --git a/powertools-large-messages/src/test/java/software/amazon/lambda/powertools/largemessages/internal/LargeMessageAspectTest.java b/powertools-large-messages/src/test/java/software/amazon/lambda/powertools/largemessages/internal/LargeMessageAspectTest.java index c364a89d9..b84709ddc 100644 --- a/powertools-large-messages/src/test/java/software/amazon/lambda/powertools/largemessages/internal/LargeMessageAspectTest.java +++ b/powertools-large-messages/src/test/java/software/amazon/lambda/powertools/largemessages/internal/LargeMessageAspectTest.java @@ -22,17 +22,9 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoInteractions; import static org.mockito.Mockito.when; -import static org.mockito.MockitoAnnotations.openMocks; import static software.amazon.lambda.powertools.largemessages.internal.LargeSQSMessageProcessor.calculateMessageAttributesMd5; import static software.amazon.lambda.powertools.largemessages.internal.LargeSQSMessageProcessor.calculateMessageBodyMd5; -import com.amazonaws.services.lambda.runtime.Context; -import com.amazonaws.services.lambda.runtime.events.KinesisEvent.KinesisEventRecord; -import com.amazonaws.services.lambda.runtime.events.SNSEvent; -import com.amazonaws.services.lambda.runtime.events.SNSEvent.SNS; -import com.amazonaws.services.lambda.runtime.events.SNSEvent.SNSRecord; -import com.amazonaws.services.lambda.runtime.events.SQSEvent.MessageAttribute; -import com.amazonaws.services.lambda.runtime.events.SQSEvent.SQSMessage; import java.io.ByteArrayInputStream; import java.lang.reflect.Field; import java.nio.ByteBuffer; @@ -41,11 +33,22 @@ import java.util.HashMap; import java.util.Map; import java.util.function.Consumer; + import org.assertj.core.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.ArgumentCaptor; import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +import com.amazonaws.services.lambda.runtime.events.KinesisEvent.KinesisEventRecord; +import com.amazonaws.services.lambda.runtime.events.SNSEvent; +import com.amazonaws.services.lambda.runtime.events.SNSEvent.SNS; +import com.amazonaws.services.lambda.runtime.events.SNSEvent.SNSRecord; +import com.amazonaws.services.lambda.runtime.events.SQSEvent.MessageAttribute; +import com.amazonaws.services.lambda.runtime.events.SQSEvent.SQSMessage; + import software.amazon.awssdk.core.ResponseInputStream; import software.amazon.awssdk.http.AbortableInputStream; import software.amazon.awssdk.services.s3.S3Client; @@ -53,11 +56,13 @@ import software.amazon.awssdk.services.s3.model.GetObjectRequest; import software.amazon.awssdk.services.s3.model.GetObjectResponse; import software.amazon.awssdk.services.s3.model.S3Exception; +import software.amazon.lambda.powertools.common.stubs.TestLambdaContext; import software.amazon.lambda.powertools.largemessages.LargeMessage; import software.amazon.lambda.powertools.largemessages.LargeMessageConfig; import software.amazon.lambda.powertools.largemessages.LargeMessageProcessingException; -public class LargeMessageAspectTest { +@ExtendWith(MockitoExtension.class) +class LargeMessageAspectTest { private static final String BIG_MSG = "A biiiiiiiig message"; private static final String BIG_MSG_MD5 = "919ebd392d8cb7161f95cb612a903d42"; @@ -65,19 +70,17 @@ public class LargeMessageAspectTest { private static final String BUCKET_NAME = "bucketname"; private static final String BUCKET_KEY = "c71eb2ae-37e0-4265-8909-32f4153faddf"; - private static final String BIG_MESSAGE_BODY = - "[\"software.amazon.payloadoffloading.PayloadS3Pointer\", {\"s3BucketName\":\"" + BUCKET_NAME + - "\", \"s3Key\":\"" + BUCKET_KEY + "\"}]"; + private static final String BIG_MESSAGE_BODY = "[\"software.amazon.payloadoffloading.PayloadS3Pointer\", {\"s3BucketName\":\"" + + BUCKET_NAME + + "\", \"s3Key\":\"" + BUCKET_KEY + "\"}]"; @Mock private S3Client s3Client; - @Mock - private Context context; + + private final TestLambdaContext context = new TestLambdaContext(); @BeforeEach - public void init() throws NoSuchFieldException, IllegalAccessException { - openMocks(this); - setupContext(); + void init() throws NoSuchFieldException, IllegalAccessException { // need to clean the s3Client with introspection (singleton) Field client = LargeMessageConfig.class.getDeclaredField("s3Client"); client.setAccessible(true); @@ -86,13 +89,13 @@ public void init() throws NoSuchFieldException, IllegalAccessException { } @LargeMessage - private String processSQSMessage(SQSMessage sqsMessage, Context context) { + private String processSQSMessage(SQSMessage sqsMessage, TestLambdaContext context) { return sqsMessage.getBody(); } @LargeMessage private String processSQSMessageWithMd5Checks(SQSMessage transformedMessage, String initialBodyMD5, - String initialAttributesMD5) { + String initialAttributesMD5) { assertThat(transformedMessage.getMd5OfBody()).isNotEqualTo(initialBodyMD5); assertThat(transformedMessage.getMd5OfBody()).isEqualTo(BIG_MSG_MD5); @@ -108,7 +111,7 @@ private String processSNSMessageWithoutContext(SNSRecord snsRecord) { } @LargeMessage(deleteS3Object = false) - private String processSQSMessageNoDelete(SQSMessage sqsMessage, Context context) { + private String processSQSMessageNoDelete(SQSMessage sqsMessage, TestLambdaContext context) { return sqsMessage.getBody(); } @@ -122,8 +125,15 @@ private String processNoMessage() { return "Hello World"; } + @LargeMessage + private void verifyMessageObjectIsModified(SQSMessage sqsMessage) { + // This test verifies the message object itself is modified, not a copy + assertThat(sqsMessage.getBody()).isEqualTo(BIG_MSG); + assertThat(sqsMessage.getMd5OfBody()).isEqualTo(BIG_MSG_MD5); + } + @Test - public void testLargeSQSMessageWithDefaultDeletion() { + void testLargeSQSMessageWithDefaultDeletion() { // given when(s3Client.getObject(any(GetObjectRequest.class))).thenReturn(s3ObjectWithLargeMessage()); SQSMessage sqsMessage = sqsMessageWithBody(BIG_MESSAGE_BODY, true); @@ -136,8 +146,7 @@ public void testLargeSQSMessageWithDefaultDeletion() { ArgumentCaptor delete = ArgumentCaptor.forClass(DeleteObjectRequest.class); verify(s3Client).deleteObject(delete.capture()); Assertions.assertThat(delete.getValue()) - .satisfies((Consumer) deleteObjectRequest -> - { + .satisfies((Consumer) deleteObjectRequest -> { assertThat(deleteObjectRequest.bucket()) .isEqualTo(BUCKET_NAME); @@ -147,7 +156,7 @@ public void testLargeSQSMessageWithDefaultDeletion() { } @Test - public void testLargeSQSMessage_shouldChangeMd5OfBodyAndAttributes() { + void testLargeSQSMessage_shouldChangeMd5OfBodyAndAttributes() { // given when(s3Client.getObject(any(GetObjectRequest.class))).thenReturn(s3ObjectWithLargeMessage()); @@ -179,12 +188,12 @@ public void testLargeSQSMessage_shouldChangeMd5OfBodyAndAttributes() { } @Test - public void testLargeSNSMessageWithDefaultDeletion() { + void testLargeSNSMessageWithDefaultDeletion() { // given when(s3Client.getObject(any(GetObjectRequest.class))).thenReturn(s3ObjectWithLargeMessage()); SNSRecord snsRecord = snsRecordWithMessage(BIG_MESSAGE_BODY, true); - //when + // when String message = processSNSMessageWithoutContext(snsRecord); // then @@ -192,8 +201,7 @@ public void testLargeSNSMessageWithDefaultDeletion() { ArgumentCaptor delete = ArgumentCaptor.forClass(DeleteObjectRequest.class); verify(s3Client).deleteObject(delete.capture()); Assertions.assertThat(delete.getValue()) - .satisfies((Consumer) deleteObjectRequest -> - { + .satisfies((Consumer) deleteObjectRequest -> { assertThat(deleteObjectRequest.bucket()) .isEqualTo(BUCKET_NAME); @@ -203,7 +211,7 @@ public void testLargeSNSMessageWithDefaultDeletion() { } @Test - public void testLargeSQSMessageWithNoDeletion_shouldNotDelete() { + void testLargeSQSMessageWithNoDeletion_shouldNotDelete() { // given when(s3Client.getObject(any(GetObjectRequest.class))).thenReturn(s3ObjectWithLargeMessage()); SQSMessage sqsMessage = sqsMessageWithBody(BIG_MESSAGE_BODY, true); @@ -217,7 +225,7 @@ public void testLargeSQSMessageWithNoDeletion_shouldNotDelete() { } @Test - public void testKinesisMessage_shouldProceedWithoutS3() { + void testKinesisMessage_shouldProceedWithoutS3() { // given KinesisEventRecord kinesisEventRecord = new KinesisEventRecord(); kinesisEventRecord.setEventID("kinesis_id1234567890"); @@ -231,7 +239,7 @@ public void testKinesisMessage_shouldProceedWithoutS3() { } @Test - public void testNoMessage_shouldProceedWithoutS3() { + void testNoMessage_shouldProceedWithoutS3() { // when String message = processNoMessage(); @@ -241,7 +249,7 @@ public void testNoMessage_shouldProceedWithoutS3() { } @Test - public void testSmallMessage_shouldProceedWithoutS3() { + void testSmallMessage_shouldProceedWithoutS3() { // given SQSMessage sqsMessage = sqsMessageWithBody("This is small message", false); @@ -255,7 +263,7 @@ public void testSmallMessage_shouldProceedWithoutS3() { } @Test - public void testNullMessage_shouldProceedWithoutS3() { + void testNullMessage_shouldProceedWithoutS3() { // given SQSMessage sqsMessage = sqsMessageWithBody(null, true); @@ -268,7 +276,7 @@ public void testNullMessage_shouldProceedWithoutS3() { } @Test - public void testGetS3ObjectException_shouldThrowLargeMessageProcessingException() { + void testGetS3ObjectException_shouldThrowLargeMessageProcessingException() { // given when(s3Client.getObject(any(GetObjectRequest.class))).thenThrow(S3Exception.create("Permission denied", new Exception("User is not allowed to access bucket " + BUCKET_NAME))); @@ -281,7 +289,7 @@ public void testGetS3ObjectException_shouldThrowLargeMessageProcessingException( } @Test - public void testDeleteS3ObjectException_shouldThrowLargeMessageProcessingException() { + void testDeleteS3ObjectException_shouldThrowLargeMessageProcessingException() { // given when(s3Client.getObject(any(GetObjectRequest.class))).thenReturn(s3ObjectWithLargeMessage()); when(s3Client.deleteObject(any(DeleteObjectRequest.class))).thenThrow(S3Exception.create("Permission denied", @@ -294,6 +302,22 @@ public void testDeleteS3ObjectException_shouldThrowLargeMessageProcessingExcepti .hasMessage(format("Failed deleting S3 record [%s]", BIG_MESSAGE_BODY)); } + @Test + void testMessageObjectIsModifiedInPlace() { + // given + when(s3Client.getObject(any(GetObjectRequest.class))).thenReturn(s3ObjectWithLargeMessage()); + SQSMessage sqsMessage = sqsMessageWithBody(BIG_MESSAGE_BODY, true); + String originalBody = sqsMessage.getBody(); + + // when + verifyMessageObjectIsModified(sqsMessage); + + // then - verify the original message object was modified + assertThat(sqsMessage.getBody()).isEqualTo(BIG_MSG); + assertThat(sqsMessage.getBody()).isNotEqualTo(originalBody); + assertThat(sqsMessage.getMd5OfBody()).isEqualTo(BIG_MSG_MD5); + } + private ResponseInputStream s3ObjectWithLargeMessage() { return new ResponseInputStream<>(GetObjectResponse.builder().build(), AbortableInputStream.create(new ByteArrayInputStream(BIG_MSG.getBytes()))); @@ -304,7 +328,7 @@ private SQSMessage sqsMessageWithBody(String messageBody, boolean largeMessage) } private SQSMessage sqsMessageWithBody(String messageBody, boolean largeMessage, - Map optionalAttributes) { + Map optionalAttributes) { SQSMessage sqsMessage = new SQSMessage(); sqsMessage.setBody(messageBody); if (messageBody != null) { @@ -338,10 +362,4 @@ private SNSRecord snsRecordWithMessage(String messageBody, boolean largeMessage) return new SNSRecord().withSns(sns); } - private void setupContext() { - when(context.getFunctionName()).thenReturn("testFunction"); - when(context.getInvokedFunctionArn()).thenReturn("testArn"); - when(context.getFunctionVersion()).thenReturn("1"); - when(context.getMemoryLimitInMB()).thenReturn(1024); - } } diff --git a/powertools-large-messages/src/test/resources/simplelogger.properties b/powertools-large-messages/src/test/resources/simplelogger.properties new file mode 100644 index 000000000..559c22385 --- /dev/null +++ b/powertools-large-messages/src/test/resources/simplelogger.properties @@ -0,0 +1,7 @@ +org.slf4j.simpleLogger.logFile=target/large-messages-test.log +org.slf4j.simpleLogger.defaultLogLevel=warn +org.slf4j.simpleLogger.showDateTime=true +org.slf4j.simpleLogger.dateTimeFormat=yyyy-MM-dd HH:mm:ss:SSS +org.slf4j.simpleLogger.showThreadName=false +org.slf4j.simpleLogger.showLogName=true +org.slf4j.simpleLogger.showShortLogName=false From f106143a2beafd24e0258fb8318cbcacdebb6e7e Mon Sep 17 00:00:00 2001 From: Philipp Page Date: Mon, 3 Nov 2025 17:56:19 +0100 Subject: [PATCH 009/202] fix(idempotency): Validate payload for optimistic idempotent writes. (#2261) * Validate payload for optimistic idempotent writes. * Re-throw IdempotencyValidationException instead of wrapping in a persistence layer exception. --- .../internal/IdempotencyHandler.java | 2 + .../persistence/BasePersistenceStore.java | 45 ++++++++++----- .../persistence/BasePersistenceStoreTest.java | 56 +++++++++++++++++-- 3 files changed, 84 insertions(+), 19 deletions(-) diff --git a/powertools-idempotency/powertools-idempotency-core/src/main/java/software/amazon/lambda/powertools/idempotency/internal/IdempotencyHandler.java b/powertools-idempotency/powertools-idempotency-core/src/main/java/software/amazon/lambda/powertools/idempotency/internal/IdempotencyHandler.java index 77d3d49b0..d4e0d2222 100644 --- a/powertools-idempotency/powertools-idempotency-core/src/main/java/software/amazon/lambda/powertools/idempotency/internal/IdempotencyHandler.java +++ b/powertools-idempotency/powertools-idempotency-core/src/main/java/software/amazon/lambda/powertools/idempotency/internal/IdempotencyHandler.java @@ -109,6 +109,8 @@ private Object processIdempotency() throws Throwable { } } catch (IdempotencyKeyException ike) { throw ike; + } catch (IdempotencyValidationException ive) { + throw ive; } catch (Exception e) { throw new IdempotencyPersistenceLayerException( "Failed to save in progress record to idempotency store. If you believe this is a Powertools for AWS Lambda (Java) bug, please open an issue.", diff --git a/powertools-idempotency/powertools-idempotency-core/src/main/java/software/amazon/lambda/powertools/idempotency/persistence/BasePersistenceStore.java b/powertools-idempotency/powertools-idempotency-core/src/main/java/software/amazon/lambda/powertools/idempotency/persistence/BasePersistenceStore.java index 7e93dc00c..00ddc4336 100644 --- a/powertools-idempotency/powertools-idempotency-core/src/main/java/software/amazon/lambda/powertools/idempotency/persistence/BasePersistenceStore.java +++ b/powertools-idempotency/powertools-idempotency-core/src/main/java/software/amazon/lambda/powertools/idempotency/persistence/BasePersistenceStore.java @@ -16,10 +16,6 @@ import static software.amazon.lambda.powertools.common.internal.LambdaConstants.LAMBDA_FUNCTION_NAME_ENV; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectWriter; -import io.burt.jmespath.Expression; import java.math.BigInteger; import java.nio.charset.StandardCharsets; import java.security.MessageDigest; @@ -33,8 +29,15 @@ import java.util.Spliterators; import java.util.stream.Stream; import java.util.stream.StreamSupport; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectWriter; + +import io.burt.jmespath.Expression; import software.amazon.lambda.powertools.idempotency.IdempotencyConfig; import software.amazon.lambda.powertools.idempotency.exceptions.IdempotencyItemAlreadyExistsException; import software.amazon.lambda.powertools.idempotency.exceptions.IdempotencyItemNotFoundException; @@ -125,8 +128,7 @@ public void saveSuccess(JsonNode data, Object result, Instant now) { DataRecord.Status.COMPLETED, getExpiryEpochSecond(now), responseJson, - getHashedPayload(data) - ); + getHashedPayload(data)); LOG.debug("Function successfully executed. Saving record to persistence store with idempotency key: {}", dataRecord.getIdempotencyKey()); updateRecord(dataRecord); @@ -157,8 +159,8 @@ public void saveInProgress(JsonNode data, Instant now, OptionalInt remainingTime OptionalLong inProgressExpirationMsTimestamp = OptionalLong.empty(); if (remainingTimeInMs.isPresent()) { - inProgressExpirationMsTimestamp = - OptionalLong.of(now.plus(remainingTimeInMs.getAsInt(), ChronoUnit.MILLIS).toEpochMilli()); + inProgressExpirationMsTimestamp = OptionalLong + .of(now.plus(remainingTimeInMs.getAsInt(), ChronoUnit.MILLIS).toEpochMilli()); } DataRecord dataRecord = new DataRecord( @@ -167,10 +169,23 @@ public void saveInProgress(JsonNode data, Instant now, OptionalInt remainingTime getExpiryEpochSecond(now), null, getHashedPayload(data), - inProgressExpirationMsTimestamp - ); + inProgressExpirationMsTimestamp); LOG.debug("saving in progress record for idempotency key: {}", dataRecord.getIdempotencyKey()); - putRecord(dataRecord, now); + + try { + putRecord(dataRecord, now); + } catch (IdempotencyItemAlreadyExistsException iaee) { + // Similar to getRecord, we need to call validatePayload before returning a data record. + // PR https://github.com/aws-powertools/powertools-lambda-java/pull/1821 introduced returning a data record + // through IdempotencyItemAlreadyExistsException to save DynamoDB calls when using DDB as store. + Optional dr = iaee.getDataRecord(); + if (dr.isPresent()) { + // throws IdempotencyValidationException if payload validation is enabled and failing + validatePayload(data, dr.get()); + } + + throw iaee; + } } /** @@ -188,7 +203,7 @@ public void deleteRecord(JsonNode data, Throwable throwable) { String idemPotencyKey = hashedIdempotencyKey.get(); LOG.debug("Function raised an exception {}. " + - "Clearing in progress record in persistence store for idempotency key: {}", + "Clearing in progress record in persistence store for idempotency key: {}", throwable.getClass(), idemPotencyKey); @@ -255,9 +270,9 @@ private Optional getHashedIdempotencyKey(JsonNode data) { private boolean isMissingIdemPotencyKey(JsonNode data) { if (data.isContainerNode()) { - Stream stream = - StreamSupport.stream(Spliterators.spliteratorUnknownSize(data.elements(), Spliterator.ORDERED), - false); + Stream stream = StreamSupport.stream( + Spliterators.spliteratorUnknownSize(data.elements(), Spliterator.ORDERED), + false); return stream.allMatch(JsonNode::isNull); } return data.isNull(); diff --git a/powertools-idempotency/powertools-idempotency-core/src/test/java/software/amazon/lambda/powertools/idempotency/persistence/BasePersistenceStoreTest.java b/powertools-idempotency/powertools-idempotency-core/src/test/java/software/amazon/lambda/powertools/idempotency/persistence/BasePersistenceStoreTest.java index d5d45c78f..8e46de1cc 100644 --- a/powertools-idempotency/powertools-idempotency-core/src/test/java/software/amazon/lambda/powertools/idempotency/persistence/BasePersistenceStoreTest.java +++ b/powertools-idempotency/powertools-idempotency-core/src/test/java/software/amazon/lambda/powertools/idempotency/persistence/BasePersistenceStoreTest.java @@ -28,6 +28,7 @@ import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent; import com.amazonaws.services.lambda.runtime.tests.EventLoader; import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.node.DoubleNode; import com.fasterxml.jackson.databind.node.TextNode; @@ -145,8 +146,8 @@ void saveInProgress_jmespath_NotFound_shouldThrowException() { assertThatThrownBy( () -> persistenceStore.saveInProgress(JsonConfig.get().getObjectMapper().valueToTree(event), now, OptionalInt.empty())) - .isInstanceOf(IdempotencyKeyException.class) - .hasMessageContaining("No data found to create a hashed idempotency key"); + .isInstanceOf(IdempotencyKeyException.class) + .hasMessageContaining("No data found to create a hashed idempotency key"); assertThat(status).isEqualTo(-1); } @@ -181,7 +182,7 @@ void saveInProgress_withLocalCache_NotExpired_ShouldThrowException() { assertThatThrownBy( () -> persistenceStore.saveInProgress(JsonConfig.get().getObjectMapper().valueToTree(event), now, OptionalInt.empty())) - .isInstanceOf(IdempotencyItemAlreadyExistsException.class); + .isInstanceOf(IdempotencyItemAlreadyExistsException.class); assertThat(status).isEqualTo(-1); } @@ -243,7 +244,8 @@ void saveSuccess_withCacheEnabled_shouldSaveInCache() throws JsonProcessingExcep DataRecord cachedDr = cache.get("testFunction#8d6a8f173b46479eff55e0997864a514"); assertThat(cachedDr.getStatus()).isEqualTo(DataRecord.Status.COMPLETED); assertThat(cachedDr.getExpiryTimestamp()).isEqualTo(now.plus(3600, ChronoUnit.SECONDS).getEpochSecond()); - assertThat(cachedDr.getResponseData()).isEqualTo(JsonConfig.get().getObjectMapper().writeValueAsString(product)); + assertThat(cachedDr.getResponseData()) + .isEqualTo(JsonConfig.get().getObjectMapper().writeValueAsString(product)); assertThat(cachedDr.getIdempotencyKey()).isEqualTo("testFunction#8d6a8f173b46479eff55e0997864a514"); assertThat(cachedDr.getPayloadHash()).isEmpty(); } @@ -325,6 +327,52 @@ void getRecord_invalidPayload_shouldThrowValidationException() { assertThatThrownBy( () -> persistenceStore.getRecord(JsonConfig.get().getObjectMapper().valueToTree(event), Instant.now())) + .isInstanceOf(IdempotencyValidationException.class); + } + + @Test + void saveInProgress_invalidPayload_shouldThrowValidationException() { + APIGatewayProxyRequestEvent event = EventLoader.loadApiGatewayRestEvent("apigw_event.json"); + persistenceStore = new BasePersistenceStore() { + @Override + public DataRecord getRecord(String idempotencyKey) throws IdempotencyItemNotFoundException { + return new DataRecord(idempotencyKey, DataRecord.Status.INPROGRESS, + Instant.now().plus(3600, ChronoUnit.SECONDS).getEpochSecond(), "Response", "different hash"); + } + + @Override + public void putRecord(DataRecord dataRecord, Instant now) throws IdempotencyItemAlreadyExistsException { + DataRecord existingRecord = new DataRecord( + dataRecord.getIdempotencyKey(), + DataRecord.Status.INPROGRESS, + Instant.now().plus(3600, ChronoUnit.SECONDS).getEpochSecond(), + null, + "different hash"); + throw new IdempotencyItemAlreadyExistsException("Item already exists", new Exception(), existingRecord); + } + + @Override + public void updateRecord(DataRecord dataRecord) { + // Not needed for this test. + } + + @Override + public void deleteRecord(String idempotencyKey) { + // Not needed for this test. + + } + }; + + persistenceStore.configure(IdempotencyConfig.builder() + .withEventKeyJMESPath("powertools_json(body).id") + .withPayloadValidationJMESPath("powertools_json(body).message") + .build(), + "myfunc"); + + Instant now = Instant.now(); + OptionalInt remainingTime = OptionalInt.empty(); + JsonNode eventJson = JsonConfig.get().getObjectMapper().valueToTree(event); + assertThatThrownBy(() -> persistenceStore.saveInProgress(eventJson, now, remainingTime)) .isInstanceOf(IdempotencyValidationException.class); } From 68b6c026cb62785c23e88ca88f601ff4833e3f63 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 3 Nov 2025 18:08:56 +0100 Subject: [PATCH 010/202] chore: bump aws.sdk.version from 2.36.3 to 2.37.2 (#2253) Bumps `aws.sdk.version` from 2.36.3 to 2.37.2. Updates `software.amazon.awssdk:url-connection-client` from 2.36.3 to 2.37.2 Updates `software.amazon.awssdk:sdk-core` from 2.37.1 to 2.37.2 Updates `software.amazon.awssdk:s3` from 2.36.3 to 2.37.2 Updates `software.amazon.awssdk:kinesis` from 2.36.3 to 2.37.2 Updates `software.amazon.awssdk:sqs` from 2.36.3 to 2.37.2 Updates `software.amazon.awssdk:dynamodb-enhanced` from 2.37.1 to 2.37.2 --- updated-dependencies: - dependency-name: software.amazon.awssdk:url-connection-client dependency-version: 2.37.2 dependency-type: direct:development update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:sdk-core dependency-version: 2.37.2 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: software.amazon.awssdk:s3 dependency-version: 2.37.2 dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:kinesis dependency-version: 2.37.2 dependency-type: direct:development update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:sqs dependency-version: 2.37.2 dependency-type: direct:development update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:dynamodb-enhanced dependency-version: 2.37.2 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- examples/powertools-examples-batch/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/powertools-examples-batch/pom.xml b/examples/powertools-examples-batch/pom.xml index 19b404c82..75b283d3d 100644 --- a/examples/powertools-examples-batch/pom.xml +++ b/examples/powertools-examples-batch/pom.xml @@ -14,7 +14,7 @@ 11 11 1.9.20.1 - 2.37.1 + 2.37.2 From 93d9ee60b69d4de6caab6c41d1f8a7ee15b0dd7e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 3 Nov 2025 18:09:08 +0100 Subject: [PATCH 011/202] chore: bump com.fasterxml.jackson:jackson-bom from 2.20.0 to 2.20.1 (#2254) Bumps [com.fasterxml.jackson:jackson-bom](https://github.com/FasterXML/jackson-bom) from 2.20.0 to 2.20.1. - [Commits](https://github.com/FasterXML/jackson-bom/compare/jackson-bom-2.20.0...jackson-bom-2.20.1) --- updated-dependencies: - dependency-name: com.fasterxml.jackson:jackson-bom dependency-version: 2.20.1 dependency-type: direct:production update-type: version-update:semver-patch ... 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 449baba05..a790145c1 100644 --- a/pom.xml +++ b/pom.xml @@ -84,7 +84,7 @@ 3.1.2 2.25.2 2.0.17 - 2.20.0 + 2.20.1 2.36.3 2.20.0 2.2.0 From 25f02a9c2cd022729a0751f7bdbf4a38f8e8410d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 3 Nov 2025 18:09:24 +0100 Subject: [PATCH 012/202] chore: bump github/codeql-action from 4.31.1 to 4.31.2 (#2255) Bumps [github/codeql-action](https://github.com/github/codeql-action) from 4.31.1 to 4.31.2. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/5fe9434cd24fe243e33e7f3305f8a5b519b70280...0499de31b99561a6d14a36a5f662c2a54f91beee) --- updated-dependencies: - dependency-name: github/codeql-action dependency-version: 4.31.2 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/security-scorecard.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/security-scorecard.yml b/.github/workflows/security-scorecard.yml index 632e4b0d9..996135fa9 100644 --- a/.github/workflows/security-scorecard.yml +++ b/.github/workflows/security-scorecard.yml @@ -52,6 +52,6 @@ jobs: path: results.sarif retention-days: 5 - name: Upload to Code-Scanning - uses: github/codeql-action/upload-sarif@5fe9434cd24fe243e33e7f3305f8a5b519b70280 # v3.29.5 + uses: github/codeql-action/upload-sarif@0499de31b99561a6d14a36a5f662c2a54f91beee # v3.29.5 with: sarif_file: results.sarif From 357f1206801ce8ada3784ecf398ecc8015a722ae Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 3 Nov 2025 18:10:31 +0100 Subject: [PATCH 013/202] chore: bump squidfunk/mkdocs-material in /docs (#2259) Bumps squidfunk/mkdocs-material from `f5c556a` to `58dee36`. --- updated-dependencies: - dependency-name: squidfunk/mkdocs-material dependency-version: 58dee36ad85b0ae4836522ee6d3f0150d828bca9a1f7d3bfbf430bca771c1441 dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- docs/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Dockerfile b/docs/Dockerfile index 9b8bde4c5..88d6ca284 100644 --- a/docs/Dockerfile +++ b/docs/Dockerfile @@ -1,4 +1,4 @@ -FROM squidfunk/mkdocs-material@sha256:f5c556a6d30ce0c1c0df10e3c38c79bbcafdaea4b1c1be366809d0d4f6f9d57f +FROM squidfunk/mkdocs-material@sha256:58dee36ad85b0ae4836522ee6d3f0150d828bca9a1f7d3bfbf430bca771c1441 COPY requirements.txt /tmp/ RUN pip install --require-hashes -r /tmp/requirements.txt From 41f3ef517db2561e596963590b9beb47a2bd6b0f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 4 Nov 2025 11:12:25 +0100 Subject: [PATCH 014/202] chore: bump aws.sdk.version from 2.36.3 to 2.37.3 (#2258) Bumps `aws.sdk.version` from 2.36.3 to 2.37.3. Updates `software.amazon.awssdk:bom` from 2.36.3 to 2.37.3 Updates `software.amazon.awssdk:http-client-spi` from 2.36.3 to 2.37.3 Updates `software.amazon.awssdk:url-connection-client` from 2.36.3 to 2.37.3 Updates `software.amazon.awssdk:s3` from 2.36.3 to 2.37.3 Updates `software.amazon.awssdk:dynamodb` from 2.36.3 to 2.37.3 Updates `software.amazon.awssdk:lambda` from 2.36.3 to 2.37.3 Updates `software.amazon.awssdk:kinesis` from 2.36.3 to 2.37.3 Updates `software.amazon.awssdk:cloudwatch` from 2.36.3 to 2.37.3 Updates `software.amazon.awssdk:xray` from 2.36.3 to 2.37.3 Updates `software.amazon.awssdk:sqs` from 2.36.3 to 2.37.3 Updates `software.amazon.awssdk:cloudformation` from 2.36.3 to 2.37.3 Updates `software.amazon.awssdk:sts` from 2.36.3 to 2.37.3 --- updated-dependencies: - dependency-name: software.amazon.awssdk:bom dependency-version: 2.37.3 dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:http-client-spi dependency-version: 2.37.3 dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:url-connection-client dependency-version: 2.37.3 dependency-type: direct:development update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:s3 dependency-version: 2.37.3 dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:dynamodb dependency-version: 2.37.3 dependency-type: direct:development update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:lambda dependency-version: 2.37.3 dependency-type: direct:development update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:kinesis dependency-version: 2.37.3 dependency-type: direct:development update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:cloudwatch dependency-version: 2.37.3 dependency-type: direct:development update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:xray dependency-version: 2.37.3 dependency-type: direct:development update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:sqs dependency-version: 2.37.3 dependency-type: direct:development update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:cloudformation dependency-version: 2.37.3 dependency-type: direct:development update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:sts dependency-version: 2.37.3 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> --- examples/powertools-examples-cloudformation/pom.xml | 2 +- pom.xml | 2 +- powertools-e2e-tests/handlers/pom.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/powertools-examples-cloudformation/pom.xml b/examples/powertools-examples-cloudformation/pom.xml index 7f9bbc6fa..a164315fe 100644 --- a/examples/powertools-examples-cloudformation/pom.xml +++ b/examples/powertools-examples-cloudformation/pom.xml @@ -14,7 +14,7 @@ 11 1.4.0 3.16.1 - 2.36.3 + 2.37.3 1.9.20.1 diff --git a/pom.xml b/pom.xml index a790145c1..dbf1ac898 100644 --- a/pom.xml +++ b/pom.xml @@ -85,7 +85,7 @@ 2.25.2 2.0.17 2.20.1 - 2.36.3 + 2.37.3 2.20.0 2.2.0 UTF-8 diff --git a/powertools-e2e-tests/handlers/pom.xml b/powertools-e2e-tests/handlers/pom.xml index f171422c5..82b7a1de3 100644 --- a/powertools-e2e-tests/handlers/pom.xml +++ b/powertools-e2e-tests/handlers/pom.xml @@ -19,7 +19,7 @@ 3.6.1 1.14.1 3.14.1 - 2.36.3 + 2.37.3 1.9.20.1 true From 93582c5a895252b7c81ab1757f6048e60e44d596 Mon Sep 17 00:00:00 2001 From: Philipp Page Date: Tue, 4 Nov 2025 15:31:35 +0100 Subject: [PATCH 015/202] Update UA configurator to comply with 50 chars limit. (#2268) --- .../internal/UserAgentConfigurator.java | 35 +++++++- .../internal/UserAgentConfiguratorTest.java | 81 ++++++++++++++++++- 2 files changed, 111 insertions(+), 5 deletions(-) diff --git a/powertools-common/src/main/java/software/amazon/lambda/powertools/common/internal/UserAgentConfigurator.java b/powertools-common/src/main/java/software/amazon/lambda/powertools/common/internal/UserAgentConfigurator.java index 7deca89f1..27b69d5ad 100644 --- a/powertools-common/src/main/java/software/amazon/lambda/powertools/common/internal/UserAgentConfigurator.java +++ b/powertools-common/src/main/java/software/amazon/lambda/powertools/common/internal/UserAgentConfigurator.java @@ -82,18 +82,29 @@ static String getVersionFromProperties(String propertyFileName, String versionKe /** * Configures the AWS SDK to use Powertools user agent by setting the sdk.ua.appId system property. - * If the property is already set and not empty, appends the Powertools user agent with a "/" separator. + * Preserves any user-provided value and replaces any existing Powertools user agent. + * Enforces a 50 character limit to comply with AWS SDK recommendations. * This should be called during library initialization to ensure the user agent is properly configured. */ public static void configureUserAgent(String ptFeature) { try { String existingValue = System.getProperty(SDK_USER_AGENT_APP_ID); String powertoolsUserAgent = getUserAgent(ptFeature); + String newValue; - if (existingValue != null && !existingValue.isEmpty()) { - System.setProperty(SDK_USER_AGENT_APP_ID, existingValue + "/" + powertoolsUserAgent); + if (existingValue == null || existingValue.isEmpty()) { + newValue = powertoolsUserAgent; } else { - System.setProperty(SDK_USER_AGENT_APP_ID, powertoolsUserAgent); + String userValue = extractUserValue(existingValue); + if (userValue.isEmpty()) { + newValue = powertoolsUserAgent; + } else { + newValue = userValue + "/" + powertoolsUserAgent; + } + } + + if (newValue.length() <= 50) { + System.setProperty(SDK_USER_AGENT_APP_ID, newValue); } } catch (Exception e) { // We don't re-raise since we don't want to break the user if something in this logic doesn't work @@ -101,6 +112,22 @@ public static void configureUserAgent(String ptFeature) { } } + /** + * Extracts the user-provided value from the existing user agent string by removing any Powertools user agent. + * A Powertools user agent follows the pattern "PT/{FEATURE}/{VERSION} PTENV/{ENV}". + * + * @param existingValue the existing user agent string + * @return the user-provided value without Powertools user agent, or empty string if none exists + */ + static String extractUserValue(String existingValue) { + if (existingValue == null || existingValue.isEmpty()) { + return ""; + } + // Remove Powertools user agent pattern: PT/{FEATURE}/{VERSION} PTENV/{ENV} + String result = existingValue.replaceAll("/?PT/[^/]+/[^ ]+ PTENV/[^ ]+", ""); + return result.trim(); + } + /** * Retrieves the user agent string for the Powertools for AWS Lambda. * It follows the pattern PT/{PT_FEATURE}/{PT_VERSION} PTENV/{PT_EXEC_ENV} diff --git a/powertools-common/src/test/java/software/amazon/lambda/powertools/common/internal/UserAgentConfiguratorTest.java b/powertools-common/src/test/java/software/amazon/lambda/powertools/common/internal/UserAgentConfiguratorTest.java index fbe4529d8..33050d8b4 100644 --- a/powertools-common/src/test/java/software/amazon/lambda/powertools/common/internal/UserAgentConfiguratorTest.java +++ b/powertools-common/src/test/java/software/amazon/lambda/powertools/common/internal/UserAgentConfiguratorTest.java @@ -131,7 +131,7 @@ void testConfigureUserAgent() { } @Test - void testConfigureUserAgent_WithExistingValue() { + void testConfigureUserAgent_WithExistingUserValue() { System.setProperty("sdk.ua.appId", "UserValueABC123"); UserAgentConfigurator.configureUserAgent("test-feature"); @@ -139,6 +139,64 @@ void testConfigureUserAgent_WithExistingValue() { .isEqualTo("UserValueABC123/PT/TEST-FEATURE/" + VERSION + " PTENV/NA"); } + @Test + void testConfigureUserAgent_ReplacePowertoolsUserAgent() { + System.setProperty("sdk.ua.appId", "PT/BATCH/" + VERSION + " PTENV/NA"); + UserAgentConfigurator.configureUserAgent("logging-log4j"); + + assertThat(System.getProperty("sdk.ua.appId")) + .isEqualTo("PT/LOGGING-LOG4J/" + VERSION + " PTENV/NA"); + } + + @Test + void testConfigureUserAgent_PreserveUserValueAndReplacePowertools() { + System.setProperty("sdk.ua.appId", "UserValue/PT/BATCH/" + VERSION + " PTENV/NA"); + UserAgentConfigurator.configureUserAgent("tracing"); + + assertThat(System.getProperty("sdk.ua.appId")) + .isEqualTo("UserValue/PT/TRACING/" + VERSION + " PTENV/NA"); + } + + @Test + void testConfigureUserAgent_ExceedsLimit() { + System.setProperty("sdk.ua.appId", "VeryLongUserValueThatExceedsTheLimitWhenCombined"); + UserAgentConfigurator.configureUserAgent("test-feature"); + + // Should not update if it would exceed 50 characters + assertThat(System.getProperty("sdk.ua.appId")) + .isEqualTo("VeryLongUserValueThatExceedsTheLimitWhenCombined"); + } + + @Test + void testExtractUserValue_NoUserValue() { + String result = UserAgentConfigurator.extractUserValue("PT/BATCH/" + VERSION + " PTENV/NA"); + assertThat(result).isEmpty(); + } + + @Test + void testExtractUserValue_WithUserValue() { + String result = UserAgentConfigurator.extractUserValue("UserValue/PT/BATCH/" + VERSION + " PTENV/NA"); + assertThat(result).isEqualTo("UserValue"); + } + + @Test + void testExtractUserValue_EmptyString() { + String result = UserAgentConfigurator.extractUserValue(""); + assertThat(result).isEmpty(); + } + + @Test + void testExtractUserValue_NullString() { + String result = UserAgentConfigurator.extractUserValue(null); + assertThat(result).isEmpty(); + } + + @Test + void testExtractUserValue_OnlyUserValue() { + String result = UserAgentConfigurator.extractUserValue("MyCustomValue"); + assertThat(result).isEqualTo("MyCustomValue"); + } + @Test void testConfigureUserAgent_WithEmptyExistingValue() { System.setProperty("sdk.ua.appId", ""); @@ -148,4 +206,25 @@ void testConfigureUserAgent_WithEmptyExistingValue() { .isEqualTo("PT/TEST-FEATURE/" + VERSION + " PTENV/NA"); } + @Test + @SetEnvironmentVariable(key = AWS_EXECUTION_ENV, value = "AWS_Lambda_java11") + void testConfigureUserAgent_MultipleUtilities() { + System.clearProperty("sdk.ua.appId"); + + // First utility + UserAgentConfigurator.configureUserAgent("batch"); + assertThat(System.getProperty("sdk.ua.appId")) + .isEqualTo("PT/BATCH/" + VERSION + " PTENV/AWS_Lambda_java11"); + + // Second utility - should replace, not append + UserAgentConfigurator.configureUserAgent("logging-log4j"); + assertThat(System.getProperty("sdk.ua.appId")) + .isEqualTo("PT/LOGGING-LOG4J/" + VERSION + " PTENV/AWS_Lambda_java11"); + + // Third utility - should replace again + UserAgentConfigurator.configureUserAgent("tracing"); + assertThat(System.getProperty("sdk.ua.appId")) + .isEqualTo("PT/TRACING/" + VERSION + " PTENV/AWS_Lambda_java11"); + } + } From d1c5b46ea263ebafabecf64a0b72a2652806be35 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 4 Nov 2025 15:33:36 +0100 Subject: [PATCH 016/202] chore: bump org.junit.jupiter:junit-jupiter from 5.14.0 to 5.14.1 (#2265) Bumps [org.junit.jupiter:junit-jupiter](https://github.com/junit-team/junit-framework) from 5.14.0 to 5.14.1. - [Release notes](https://github.com/junit-team/junit-framework/releases) - [Commits](https://github.com/junit-team/junit-framework/compare/r5.14.0...r5.14.1) --- updated-dependencies: - dependency-name: org.junit.jupiter:junit-jupiter dependency-version: 5.14.1 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- examples/powertools-examples-core-utilities/cdk/infra/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/powertools-examples-core-utilities/cdk/infra/pom.xml b/examples/powertools-examples-core-utilities/cdk/infra/pom.xml index ce887884c..3a07e6e6c 100644 --- a/examples/powertools-examples-core-utilities/cdk/infra/pom.xml +++ b/examples/powertools-examples-core-utilities/cdk/infra/pom.xml @@ -9,7 +9,7 @@ UTF-8 2.221.1 [10.0.0,11.0.0) - 5.14.0 + 5.14.1 From 578cb8616a3a76c921ef01a319bcb601e153fb31 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 4 Nov 2025 15:34:09 +0100 Subject: [PATCH 017/202] chore: bump aws.sdk.version from 2.37.3 to 2.37.4 (#2264) Bumps `aws.sdk.version` from 2.37.3 to 2.37.4. Updates `software.amazon.awssdk:bom` from 2.37.3 to 2.37.4 Updates `software.amazon.awssdk:http-client-spi` from 2.37.3 to 2.37.4 Updates `software.amazon.awssdk:url-connection-client` from 2.37.2 to 2.37.4 Updates `software.amazon.awssdk:s3` from 2.37.2 to 2.37.4 Updates `software.amazon.awssdk:dynamodb` from 2.37.3 to 2.37.4 Updates `software.amazon.awssdk:lambda` from 2.37.3 to 2.37.4 Updates `software.amazon.awssdk:kinesis` from 2.37.2 to 2.37.4 Updates `software.amazon.awssdk:cloudwatch` from 2.37.3 to 2.37.4 Updates `software.amazon.awssdk:xray` from 2.37.3 to 2.37.4 Updates `software.amazon.awssdk:sqs` from 2.37.2 to 2.37.4 Updates `software.amazon.awssdk:cloudformation` from 2.37.3 to 2.37.4 Updates `software.amazon.awssdk:sts` from 2.37.3 to 2.37.4 --- updated-dependencies: - dependency-name: software.amazon.awssdk:bom dependency-version: 2.37.4 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: software.amazon.awssdk:http-client-spi dependency-version: 2.37.4 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: software.amazon.awssdk:url-connection-client dependency-version: 2.37.4 dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: software.amazon.awssdk:s3 dependency-version: 2.37.4 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: software.amazon.awssdk:dynamodb dependency-version: 2.37.4 dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: software.amazon.awssdk:lambda dependency-version: 2.37.4 dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: software.amazon.awssdk:kinesis dependency-version: 2.37.4 dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: software.amazon.awssdk:cloudwatch dependency-version: 2.37.4 dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: software.amazon.awssdk:xray dependency-version: 2.37.4 dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: software.amazon.awssdk:sqs dependency-version: 2.37.4 dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: software.amazon.awssdk:cloudformation dependency-version: 2.37.4 dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: software.amazon.awssdk:sts dependency-version: 2.37.4 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- examples/powertools-examples-cloudformation/pom.xml | 2 +- pom.xml | 2 +- powertools-e2e-tests/handlers/pom.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/powertools-examples-cloudformation/pom.xml b/examples/powertools-examples-cloudformation/pom.xml index a164315fe..edd774e74 100644 --- a/examples/powertools-examples-cloudformation/pom.xml +++ b/examples/powertools-examples-cloudformation/pom.xml @@ -14,7 +14,7 @@ 11 1.4.0 3.16.1 - 2.37.3 + 2.37.4 1.9.20.1 diff --git a/pom.xml b/pom.xml index dbf1ac898..bc5389841 100644 --- a/pom.xml +++ b/pom.xml @@ -85,7 +85,7 @@ 2.25.2 2.0.17 2.20.1 - 2.37.3 + 2.37.4 2.20.0 2.2.0 UTF-8 diff --git a/powertools-e2e-tests/handlers/pom.xml b/powertools-e2e-tests/handlers/pom.xml index 82b7a1de3..827feccea 100644 --- a/powertools-e2e-tests/handlers/pom.xml +++ b/powertools-e2e-tests/handlers/pom.xml @@ -19,7 +19,7 @@ 3.6.1 1.14.1 3.14.1 - 2.37.3 + 2.37.4 1.9.20.1 true From 9251e18ab11eb647d9d040c6a6822c73fbe5822f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 4 Nov 2025 17:00:10 +0100 Subject: [PATCH 018/202] chore: bump io.github.ascopes:protobuf-maven-plugin (#2269) Bumps [io.github.ascopes:protobuf-maven-plugin](https://github.com/ascopes/protobuf-maven-plugin) from 3.3.0 to 3.10.2. - [Release notes](https://github.com/ascopes/protobuf-maven-plugin/releases) - [Commits](https://github.com/ascopes/protobuf-maven-plugin/compare/v3.3.0...v3.10.2) --- updated-dependencies: - dependency-name: io.github.ascopes:protobuf-maven-plugin dependency-version: 3.10.2 dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- examples/powertools-examples-kafka/tools/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/powertools-examples-kafka/tools/pom.xml b/examples/powertools-examples-kafka/tools/pom.xml index 80ed6c264..e6f2654d1 100644 --- a/examples/powertools-examples-kafka/tools/pom.xml +++ b/examples/powertools-examples-kafka/tools/pom.xml @@ -62,7 +62,7 @@ io.github.ascopes protobuf-maven-plugin - 3.3.0 + 3.10.2 From 9ca99332edc2732cce3a7eeb9b2acf79aa489abf Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 5 Nov 2025 11:53:05 +0100 Subject: [PATCH 019/202] chore(ci): bump version to 2.6.0 (#2270) * chore(ci): bump version to 2.6.0 * Restore CHANGELOG.md from main. --------- Co-authored-by: Powertools for AWS Lambda (Java) Bot <151832416+aws-powertools-bot@users.noreply.github.com> Co-authored-by: Philipp Page --- README.md | 6 +++--- examples/pom.xml | 2 +- examples/powertools-examples-batch/pom.xml | 2 +- examples/powertools-examples-cloudformation/README.md | 4 ++-- .../infra/sam-graalvm/README.md | 2 +- examples/powertools-examples-cloudformation/pom.xml | 2 +- examples/powertools-examples-core-utilities/cdk/app/pom.xml | 2 +- .../powertools-examples-core-utilities/cdk/infra/pom.xml | 2 +- .../powertools-examples-core-utilities/gradle/build.gradle | 6 +++--- .../kotlin/build.gradle.kts | 6 +++--- .../powertools-examples-core-utilities/sam-graalvm/pom.xml | 2 +- examples/powertools-examples-core-utilities/sam/pom.xml | 2 +- .../powertools-examples-core-utilities/serverless/pom.xml | 2 +- .../powertools-examples-core-utilities/terraform/pom.xml | 2 +- .../powertools-examples-idempotency/sam-graalvm/pom.xml | 2 +- examples/powertools-examples-idempotency/sam/pom.xml | 2 +- examples/powertools-examples-kafka/pom.xml | 2 +- examples/powertools-examples-parameters/sam-graalvm/pom.xml | 2 +- examples/powertools-examples-parameters/sam/pom.xml | 2 +- .../powertools-examples-serialization/sam-graalvm/pom.xml | 2 +- examples/powertools-examples-serialization/sam/pom.xml | 2 +- examples/powertools-examples-validation/pom.xml | 2 +- mkdocs.yml | 2 +- pom.xml | 2 +- powertools-batch/pom.xml | 2 +- powertools-cloudformation/pom.xml | 2 +- powertools-common/pom.xml | 2 +- powertools-e2e-tests/handlers/batch/pom.xml | 2 +- .../handlers/idempotency-functional/pom.xml | 2 +- powertools-e2e-tests/handlers/idempotency-generics/pom.xml | 2 +- powertools-e2e-tests/handlers/idempotency/pom.xml | 2 +- .../handlers/largemessage-functional/pom.xml | 2 +- powertools-e2e-tests/handlers/largemessage/pom.xml | 2 +- .../handlers/largemessage_idempotent/pom.xml | 2 +- powertools-e2e-tests/handlers/logging-functional/pom.xml | 2 +- powertools-e2e-tests/handlers/logging-log4j/pom.xml | 2 +- powertools-e2e-tests/handlers/logging-logback/pom.xml | 2 +- powertools-e2e-tests/handlers/metrics/pom.xml | 2 +- powertools-e2e-tests/handlers/parameters/pom.xml | 2 +- powertools-e2e-tests/handlers/pom.xml | 2 +- powertools-e2e-tests/handlers/tracing/pom.xml | 2 +- powertools-e2e-tests/handlers/validation-alb-event/pom.xml | 2 +- .../handlers/validation-apigw-event/pom.xml | 2 +- powertools-e2e-tests/pom.xml | 2 +- powertools-idempotency/pom.xml | 2 +- powertools-idempotency/powertools-idempotency-core/pom.xml | 2 +- .../powertools-idempotency-dynamodb/pom.xml | 2 +- powertools-kafka/pom.xml | 2 +- powertools-large-messages/pom.xml | 2 +- powertools-logging/pom.xml | 2 +- powertools-logging/powertools-logging-log4j/pom.xml | 2 +- powertools-logging/powertools-logging-logback/pom.xml | 2 +- powertools-metrics/pom.xml | 2 +- powertools-parameters/pom.xml | 2 +- .../powertools-parameters-appconfig/pom.xml | 2 +- .../powertools-parameters-dynamodb/pom.xml | 2 +- powertools-parameters/powertools-parameters-secrets/pom.xml | 2 +- powertools-parameters/powertools-parameters-ssm/pom.xml | 2 +- powertools-parameters/powertools-parameters-tests/pom.xml | 2 +- powertools-serialization/pom.xml | 2 +- powertools-tracing/pom.xml | 2 +- powertools-validation/pom.xml | 2 +- 62 files changed, 69 insertions(+), 69 deletions(-) diff --git a/README.md b/README.md index b53d5aeb1..58d3901dc 100644 --- a/README.md +++ b/README.md @@ -22,17 +22,17 @@ Powertools for AWS Lambda (Java) is available in Maven Central. You can use your software.amazon.lambda powertools-tracing - 2.5.0 + 2.6.0 software.amazon.lambda powertools-logging - 2.5.0 + 2.6.0 software.amazon.lambda powertools-metrics - 2.5.0 + 2.6.0 ... diff --git a/examples/pom.xml b/examples/pom.xml index 71d924c26..9ce451a33 100644 --- a/examples/pom.xml +++ b/examples/pom.xml @@ -20,7 +20,7 @@ software.amazon.lambda powertools-examples - 2.5.0 + 2.6.0 pom Powertools for AWS Lambda (Java) - Examples diff --git a/examples/powertools-examples-batch/pom.xml b/examples/powertools-examples-batch/pom.xml index 75b283d3d..707b9bcfb 100644 --- a/examples/powertools-examples-batch/pom.xml +++ b/examples/powertools-examples-batch/pom.xml @@ -5,7 +5,7 @@ 4.0.0 software.amazon.lambda.examples - 2.5.0 + 2.6.0 powertools-examples-batch jar Powertools for AWS Lambda (Java) - Examples - Batch diff --git a/examples/powertools-examples-cloudformation/README.md b/examples/powertools-examples-cloudformation/README.md index b26007d44..35184b6d2 100644 --- a/examples/powertools-examples-cloudformation/README.md +++ b/examples/powertools-examples-cloudformation/README.md @@ -15,7 +15,7 @@ Run the following in your shell: ```bash cd infra/sam sam build -sam deploy --guided --parameter-overrides BucketNameParam=my-unique-bucket-2.5.0718 +sam deploy --guided --parameter-overrides BucketNameParam=my-unique-bucket-2.6.0718 ``` ### Deploy with CDK @@ -32,5 +32,5 @@ To build and deploy this application for the first time, run the following in yo cd infra/cdk mvn package cdk synth -cdk deploy -c BucketNameParam=my-unique-bucket-2.5.0718 +cdk deploy -c BucketNameParam=my-unique-bucket-2.6.0718 ``` \ No newline at end of file diff --git a/examples/powertools-examples-cloudformation/infra/sam-graalvm/README.md b/examples/powertools-examples-cloudformation/infra/sam-graalvm/README.md index b577855ce..01365932e 100644 --- a/examples/powertools-examples-cloudformation/infra/sam-graalvm/README.md +++ b/examples/powertools-examples-cloudformation/infra/sam-graalvm/README.md @@ -40,7 +40,7 @@ sam build ## Deploy the sample application ```shell -sam deploy --guided --parameter-overrides BucketNameParam=my-unique-bucket-2.5.0718 +sam deploy --guided --parameter-overrides BucketNameParam=my-unique-bucket-2.6.0718 ``` This sample is based on Serverless Application Model (SAM). To deploy it, check out the instructions for getting started with SAM in [the examples directory](../../../README.md) diff --git a/examples/powertools-examples-cloudformation/pom.xml b/examples/powertools-examples-cloudformation/pom.xml index edd774e74..389245bbc 100644 --- a/examples/powertools-examples-cloudformation/pom.xml +++ b/examples/powertools-examples-cloudformation/pom.xml @@ -3,7 +3,7 @@ 4.0.0 software.amazon.lambda.examples - 2.5.0 + 2.6.0 powertools-examples-cloudformation jar diff --git a/examples/powertools-examples-core-utilities/cdk/app/pom.xml b/examples/powertools-examples-core-utilities/cdk/app/pom.xml index 8a5ac6601..756c082b8 100644 --- a/examples/powertools-examples-core-utilities/cdk/app/pom.xml +++ b/examples/powertools-examples-core-utilities/cdk/app/pom.xml @@ -6,7 +6,7 @@ software.amazon.lambda.examples - 2.5.0 + 2.6.0 powertools-examples-core-utilities-cdk jar diff --git a/examples/powertools-examples-core-utilities/cdk/infra/pom.xml b/examples/powertools-examples-core-utilities/cdk/infra/pom.xml index 3a07e6e6c..4d3414c63 100644 --- a/examples/powertools-examples-core-utilities/cdk/infra/pom.xml +++ b/examples/powertools-examples-core-utilities/cdk/infra/pom.xml @@ -4,7 +4,7 @@ 4.0.0 software.amazon.lambda.examples cdk - 2.5.0 + 2.6.0 UTF-8 2.221.1 diff --git a/examples/powertools-examples-core-utilities/gradle/build.gradle b/examples/powertools-examples-core-utilities/gradle/build.gradle index 9b89d923a..36524f0b1 100644 --- a/examples/powertools-examples-core-utilities/gradle/build.gradle +++ b/examples/powertools-examples-core-utilities/gradle/build.gradle @@ -29,8 +29,8 @@ dependencies { implementation 'com.amazonaws:aws-lambda-java-events:3.16.0' implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.13.2' implementation 'org.aspectj:aspectjrt:1.9.20.1' - aspect 'software.amazon.lambda:powertools-tracing:2.5.0' - aspect 'software.amazon.lambda:powertools-logging-log4j:2.5.0' - aspect 'software.amazon.lambda:powertools-metrics:2.5.0' + aspect 'software.amazon.lambda:powertools-tracing:2.6.0' + aspect 'software.amazon.lambda:powertools-logging-log4j:2.6.0' + aspect 'software.amazon.lambda:powertools-metrics:2.6.0' } diff --git a/examples/powertools-examples-core-utilities/kotlin/build.gradle.kts b/examples/powertools-examples-core-utilities/kotlin/build.gradle.kts index 85ec540a9..c3713c344 100644 --- a/examples/powertools-examples-core-utilities/kotlin/build.gradle.kts +++ b/examples/powertools-examples-core-utilities/kotlin/build.gradle.kts @@ -15,9 +15,9 @@ dependencies { implementation("com.amazonaws:aws-lambda-java-events:3.16.0") implementation("com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.15.2") implementation("org.aspectj:aspectjrt:1.9.20.1") - aspect("software.amazon.lambda:powertools-tracing:2.5.0") - aspect("software.amazon.lambda:powertools-logging-log4j:2.5.0") - aspect("software.amazon.lambda:powertools-metrics:2.5.0") + aspect("software.amazon.lambda:powertools-tracing:2.6.0") + aspect("software.amazon.lambda:powertools-logging-log4j:2.6.0") + aspect("software.amazon.lambda:powertools-metrics:2.6.0") implementation("org.jetbrains.kotlin:kotlin-stdlib:1.9.24") } diff --git a/examples/powertools-examples-core-utilities/sam-graalvm/pom.xml b/examples/powertools-examples-core-utilities/sam-graalvm/pom.xml index 71b93be66..b879ae49d 100644 --- a/examples/powertools-examples-core-utilities/sam-graalvm/pom.xml +++ b/examples/powertools-examples-core-utilities/sam-graalvm/pom.xml @@ -4,7 +4,7 @@ Powertools for AWS Lambda (Java) - Examples - Core Utilities (logging, tracing, metrics) with SAM GraalVM software.amazon.lambda.examples - 2.5.0 + 2.6.0 powertools-examples-core-utilities-sam-graalvm jar diff --git a/examples/powertools-examples-core-utilities/sam/pom.xml b/examples/powertools-examples-core-utilities/sam/pom.xml index 60d6b796f..a5e3881b2 100644 --- a/examples/powertools-examples-core-utilities/sam/pom.xml +++ b/examples/powertools-examples-core-utilities/sam/pom.xml @@ -4,7 +4,7 @@ Powertools for AWS Lambda (Java) - Examples - Core Utilities (logging, tracing, metrics) with SAM software.amazon.lambda.examples - 2.5.0 + 2.6.0 powertools-examples-core-utilities-sam jar diff --git a/examples/powertools-examples-core-utilities/serverless/pom.xml b/examples/powertools-examples-core-utilities/serverless/pom.xml index 01e734f6f..8ef3b556d 100644 --- a/examples/powertools-examples-core-utilities/serverless/pom.xml +++ b/examples/powertools-examples-core-utilities/serverless/pom.xml @@ -4,7 +4,7 @@ Powertools for AWS Lambda (Java) - Examples - Core Utilities (logging, tracing, metrics) with Serverless software.amazon.lambda.examples - 2.5.0 + 2.6.0 powertools-examples-core-utilities-serverless jar diff --git a/examples/powertools-examples-core-utilities/terraform/pom.xml b/examples/powertools-examples-core-utilities/terraform/pom.xml index 4b7d19fe4..d320a1d40 100644 --- a/examples/powertools-examples-core-utilities/terraform/pom.xml +++ b/examples/powertools-examples-core-utilities/terraform/pom.xml @@ -4,7 +4,7 @@ Powertools for AWS Lambda (Java) - Examples - Core Utilities (logging, tracing, metrics) with Terraform software.amazon.lambda.examples - 2.5.0 + 2.6.0 powertools-examples-core-utilities-terraform jar diff --git a/examples/powertools-examples-idempotency/sam-graalvm/pom.xml b/examples/powertools-examples-idempotency/sam-graalvm/pom.xml index 6ee70def3..3fa68c7e0 100644 --- a/examples/powertools-examples-idempotency/sam-graalvm/pom.xml +++ b/examples/powertools-examples-idempotency/sam-graalvm/pom.xml @@ -2,7 +2,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 4.0.0 software.amazon.lambda.examples - 2.5.0 + 2.6.0 powertools-examples-idempotency-sam-graalvm jar Powertools for AWS Lambda (Java) - Examples - Idempotency GraalVM diff --git a/examples/powertools-examples-idempotency/sam/pom.xml b/examples/powertools-examples-idempotency/sam/pom.xml index d84651e15..0654867f9 100644 --- a/examples/powertools-examples-idempotency/sam/pom.xml +++ b/examples/powertools-examples-idempotency/sam/pom.xml @@ -17,7 +17,7 @@ 4.0.0 software.amazon.lambda.examples - 2.5.0 + 2.6.0 powertools-examples-idempotency jar Powertools for AWS Lambda (Java) - Examples - Idempotency diff --git a/examples/powertools-examples-kafka/pom.xml b/examples/powertools-examples-kafka/pom.xml index fe56c6b1e..5428655bd 100644 --- a/examples/powertools-examples-kafka/pom.xml +++ b/examples/powertools-examples-kafka/pom.xml @@ -2,7 +2,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 4.0.0 software.amazon.lambda.examples - 2.5.0 + 2.6.0 powertools-examples-kafka jar Powertools for AWS Lambda (Java) - Examples - Kafka diff --git a/examples/powertools-examples-parameters/sam-graalvm/pom.xml b/examples/powertools-examples-parameters/sam-graalvm/pom.xml index e72df3086..bfebbe57d 100644 --- a/examples/powertools-examples-parameters/sam-graalvm/pom.xml +++ b/examples/powertools-examples-parameters/sam-graalvm/pom.xml @@ -2,7 +2,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 4.0.0 software.amazon.lambda.examples - 2.5.0 + 2.6.0 powertools-examples-parameters-sam-graalvm jar Powertools for AWS Lambda (Java) - Examples - Parameters GraalVM diff --git a/examples/powertools-examples-parameters/sam/pom.xml b/examples/powertools-examples-parameters/sam/pom.xml index e2ee15f26..17a1efa79 100644 --- a/examples/powertools-examples-parameters/sam/pom.xml +++ b/examples/powertools-examples-parameters/sam/pom.xml @@ -2,7 +2,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 4.0.0 software.amazon.lambda.examples - 2.5.0 + 2.6.0 powertools-examples-parameters-sam jar Powertools for AWS Lambda (Java) - Examples - Parameters diff --git a/examples/powertools-examples-serialization/sam-graalvm/pom.xml b/examples/powertools-examples-serialization/sam-graalvm/pom.xml index cdf131482..9b03e3046 100644 --- a/examples/powertools-examples-serialization/sam-graalvm/pom.xml +++ b/examples/powertools-examples-serialization/sam-graalvm/pom.xml @@ -2,7 +2,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 4.0.0 software.amazon.lambda.examples - 2.5.0 + 2.6.0 powertools-examples-serialization-sam-graalvm jar Powertools for AWS Lambda (Java) - Examples - Serialization GraalVM diff --git a/examples/powertools-examples-serialization/sam/pom.xml b/examples/powertools-examples-serialization/sam/pom.xml index 683faf783..7120d3a91 100644 --- a/examples/powertools-examples-serialization/sam/pom.xml +++ b/examples/powertools-examples-serialization/sam/pom.xml @@ -2,7 +2,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 4.0.0 software.amazon.lambda.examples - 2.5.0 + 2.6.0 powertools-examples-serialization-sam jar Powertools for AWS Lambda (Java) - Examples - Serialization diff --git a/examples/powertools-examples-validation/pom.xml b/examples/powertools-examples-validation/pom.xml index b84fac5bb..5826e7456 100644 --- a/examples/powertools-examples-validation/pom.xml +++ b/examples/powertools-examples-validation/pom.xml @@ -16,7 +16,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 4.0.0 software.amazon.lambda.examples - 2.5.0 + 2.6.0 powertools-examples-validation jar Powertools for AWS Lambda (Java) - Examples - Validation diff --git a/mkdocs.yml b/mkdocs.yml index 62e211728..da4303c38 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -127,7 +127,7 @@ extra_javascript: extra: powertools: - version: 2.5.0 + version: 2.6.0 version: provider: mike default: latest diff --git a/pom.xml b/pom.xml index bc5389841..66d15731b 100644 --- a/pom.xml +++ b/pom.xml @@ -20,7 +20,7 @@ software.amazon.lambda powertools-parent - 2.5.0 + 2.6.0 pom Powertools for AWS Lambda (Java) - Parent diff --git a/powertools-batch/pom.xml b/powertools-batch/pom.xml index edb849cea..ccf926d39 100644 --- a/powertools-batch/pom.xml +++ b/powertools-batch/pom.xml @@ -6,7 +6,7 @@ software.amazon.lambda powertools-parent - 2.5.0 + 2.6.0 A suite of utilities that makes batch message processing using AWS Lambda easier. diff --git a/powertools-cloudformation/pom.xml b/powertools-cloudformation/pom.xml index f6d8ad33f..015179833 100644 --- a/powertools-cloudformation/pom.xml +++ b/powertools-cloudformation/pom.xml @@ -24,7 +24,7 @@ powertools-parent software.amazon.lambda - 2.5.0 + 2.6.0 Powertools for AWS Lambda (Java) - Cloudformation diff --git a/powertools-common/pom.xml b/powertools-common/pom.xml index 3583a4dc0..2610a8c4f 100644 --- a/powertools-common/pom.xml +++ b/powertools-common/pom.xml @@ -24,7 +24,7 @@ powertools-parent software.amazon.lambda - 2.5.0 + 2.6.0 Powertools for AWS Lambda (Java) - Common Internal Utilities diff --git a/powertools-e2e-tests/handlers/batch/pom.xml b/powertools-e2e-tests/handlers/batch/pom.xml index 21161f9e7..a630ba09b 100644 --- a/powertools-e2e-tests/handlers/batch/pom.xml +++ b/powertools-e2e-tests/handlers/batch/pom.xml @@ -5,7 +5,7 @@ software.amazon.lambda e2e-test-handlers-parent - 2.5.0 + 2.6.0 e2e-test-handler-batch diff --git a/powertools-e2e-tests/handlers/idempotency-functional/pom.xml b/powertools-e2e-tests/handlers/idempotency-functional/pom.xml index c8893c6e9..73c8780d3 100644 --- a/powertools-e2e-tests/handlers/idempotency-functional/pom.xml +++ b/powertools-e2e-tests/handlers/idempotency-functional/pom.xml @@ -5,7 +5,7 @@ software.amazon.lambda e2e-test-handlers-parent - 2.5.0 + 2.6.0 e2e-test-handler-idempotency-functional diff --git a/powertools-e2e-tests/handlers/idempotency-generics/pom.xml b/powertools-e2e-tests/handlers/idempotency-generics/pom.xml index 5387d4059..d89aa33e2 100644 --- a/powertools-e2e-tests/handlers/idempotency-generics/pom.xml +++ b/powertools-e2e-tests/handlers/idempotency-generics/pom.xml @@ -5,7 +5,7 @@ software.amazon.lambda e2e-test-handlers-parent - 2.5.0 + 2.6.0 e2e-test-handler-idempotency-generics diff --git a/powertools-e2e-tests/handlers/idempotency/pom.xml b/powertools-e2e-tests/handlers/idempotency/pom.xml index 7c0e957fe..ea84e7b26 100644 --- a/powertools-e2e-tests/handlers/idempotency/pom.xml +++ b/powertools-e2e-tests/handlers/idempotency/pom.xml @@ -5,7 +5,7 @@ software.amazon.lambda e2e-test-handlers-parent - 2.5.0 + 2.6.0 e2e-test-handler-idempotency diff --git a/powertools-e2e-tests/handlers/largemessage-functional/pom.xml b/powertools-e2e-tests/handlers/largemessage-functional/pom.xml index 4afb633f2..094c54841 100644 --- a/powertools-e2e-tests/handlers/largemessage-functional/pom.xml +++ b/powertools-e2e-tests/handlers/largemessage-functional/pom.xml @@ -5,7 +5,7 @@ software.amazon.lambda e2e-test-handlers-parent - 2.5.0 + 2.6.0 e2e-test-handler-largemessage-functional diff --git a/powertools-e2e-tests/handlers/largemessage/pom.xml b/powertools-e2e-tests/handlers/largemessage/pom.xml index 469a9a48a..3004a884c 100644 --- a/powertools-e2e-tests/handlers/largemessage/pom.xml +++ b/powertools-e2e-tests/handlers/largemessage/pom.xml @@ -5,7 +5,7 @@ software.amazon.lambda e2e-test-handlers-parent - 2.5.0 + 2.6.0 e2e-test-handler-largemessage diff --git a/powertools-e2e-tests/handlers/largemessage_idempotent/pom.xml b/powertools-e2e-tests/handlers/largemessage_idempotent/pom.xml index 1e89edd67..74a7b2999 100644 --- a/powertools-e2e-tests/handlers/largemessage_idempotent/pom.xml +++ b/powertools-e2e-tests/handlers/largemessage_idempotent/pom.xml @@ -5,7 +5,7 @@ software.amazon.lambda e2e-test-handlers-parent - 2.5.0 + 2.6.0 e2e-test-handler-large-msg-idempotent diff --git a/powertools-e2e-tests/handlers/logging-functional/pom.xml b/powertools-e2e-tests/handlers/logging-functional/pom.xml index 5d774fe21..a8f79df30 100644 --- a/powertools-e2e-tests/handlers/logging-functional/pom.xml +++ b/powertools-e2e-tests/handlers/logging-functional/pom.xml @@ -5,7 +5,7 @@ software.amazon.lambda e2e-test-handlers-parent - 2.5.0 + 2.6.0 e2e-test-handler-logging-functional diff --git a/powertools-e2e-tests/handlers/logging-log4j/pom.xml b/powertools-e2e-tests/handlers/logging-log4j/pom.xml index dddc84152..0ed761274 100644 --- a/powertools-e2e-tests/handlers/logging-log4j/pom.xml +++ b/powertools-e2e-tests/handlers/logging-log4j/pom.xml @@ -5,7 +5,7 @@ software.amazon.lambda e2e-test-handlers-parent - 2.5.0 + 2.6.0 e2e-test-handler-logging-log4j diff --git a/powertools-e2e-tests/handlers/logging-logback/pom.xml b/powertools-e2e-tests/handlers/logging-logback/pom.xml index 4f3a28c72..d8523f721 100644 --- a/powertools-e2e-tests/handlers/logging-logback/pom.xml +++ b/powertools-e2e-tests/handlers/logging-logback/pom.xml @@ -5,7 +5,7 @@ software.amazon.lambda e2e-test-handlers-parent - 2.5.0 + 2.6.0 e2e-test-handler-logging-logback diff --git a/powertools-e2e-tests/handlers/metrics/pom.xml b/powertools-e2e-tests/handlers/metrics/pom.xml index 84006df9a..3b60d2aba 100644 --- a/powertools-e2e-tests/handlers/metrics/pom.xml +++ b/powertools-e2e-tests/handlers/metrics/pom.xml @@ -5,7 +5,7 @@ software.amazon.lambda e2e-test-handlers-parent - 2.5.0 + 2.6.0 e2e-test-handler-metrics diff --git a/powertools-e2e-tests/handlers/parameters/pom.xml b/powertools-e2e-tests/handlers/parameters/pom.xml index e0a58f9bd..495b51311 100644 --- a/powertools-e2e-tests/handlers/parameters/pom.xml +++ b/powertools-e2e-tests/handlers/parameters/pom.xml @@ -5,7 +5,7 @@ software.amazon.lambda e2e-test-handlers-parent - 2.5.0 + 2.6.0 e2e-test-handler-parameters diff --git a/powertools-e2e-tests/handlers/pom.xml b/powertools-e2e-tests/handlers/pom.xml index 827feccea..2e024375c 100644 --- a/powertools-e2e-tests/handlers/pom.xml +++ b/powertools-e2e-tests/handlers/pom.xml @@ -4,7 +4,7 @@ software.amazon.lambda e2e-test-handlers-parent - 2.5.0 + 2.6.0 pom Handlers for End-to-End tests Fake handlers that use Powertools for AWS Lambda (Java). diff --git a/powertools-e2e-tests/handlers/tracing/pom.xml b/powertools-e2e-tests/handlers/tracing/pom.xml index 5f6943ca6..2aaae55f5 100644 --- a/powertools-e2e-tests/handlers/tracing/pom.xml +++ b/powertools-e2e-tests/handlers/tracing/pom.xml @@ -5,7 +5,7 @@ software.amazon.lambda e2e-test-handlers-parent - 2.5.0 + 2.6.0 e2e-test-handler-tracing diff --git a/powertools-e2e-tests/handlers/validation-alb-event/pom.xml b/powertools-e2e-tests/handlers/validation-alb-event/pom.xml index e9e8f5c47..c966194b1 100644 --- a/powertools-e2e-tests/handlers/validation-alb-event/pom.xml +++ b/powertools-e2e-tests/handlers/validation-alb-event/pom.xml @@ -5,7 +5,7 @@ software.amazon.lambda e2e-test-handlers-parent - 2.5.0 + 2.6.0 e2e-test-handler-validation-alb-event diff --git a/powertools-e2e-tests/handlers/validation-apigw-event/pom.xml b/powertools-e2e-tests/handlers/validation-apigw-event/pom.xml index 21e80c20e..85b8f47dc 100644 --- a/powertools-e2e-tests/handlers/validation-apigw-event/pom.xml +++ b/powertools-e2e-tests/handlers/validation-apigw-event/pom.xml @@ -5,7 +5,7 @@ software.amazon.lambda e2e-test-handlers-parent - 2.5.0 + 2.6.0 e2e-test-handler-validation-apigw-event diff --git a/powertools-e2e-tests/pom.xml b/powertools-e2e-tests/pom.xml index 557611a93..1898e309f 100644 --- a/powertools-e2e-tests/pom.xml +++ b/powertools-e2e-tests/pom.xml @@ -20,7 +20,7 @@ powertools-parent software.amazon.lambda - 2.5.0 + 2.6.0 powertools-e2e-tests diff --git a/powertools-idempotency/pom.xml b/powertools-idempotency/pom.xml index 8961701d3..7bfe38ef4 100644 --- a/powertools-idempotency/pom.xml +++ b/powertools-idempotency/pom.xml @@ -21,7 +21,7 @@ software.amazon.lambda powertools-parent - 2.5.0 + 2.6.0 powertools-idempotency diff --git a/powertools-idempotency/powertools-idempotency-core/pom.xml b/powertools-idempotency/powertools-idempotency-core/pom.xml index 64907072f..0e784c0f5 100644 --- a/powertools-idempotency/powertools-idempotency-core/pom.xml +++ b/powertools-idempotency/powertools-idempotency-core/pom.xml @@ -21,7 +21,7 @@ software.amazon.lambda powertools-idempotency - 2.5.0 + 2.6.0 powertools-idempotency-core diff --git a/powertools-idempotency/powertools-idempotency-dynamodb/pom.xml b/powertools-idempotency/powertools-idempotency-dynamodb/pom.xml index a55947d4b..ea562ea89 100644 --- a/powertools-idempotency/powertools-idempotency-dynamodb/pom.xml +++ b/powertools-idempotency/powertools-idempotency-dynamodb/pom.xml @@ -21,7 +21,7 @@ software.amazon.lambda powertools-idempotency - 2.5.0 + 2.6.0 powertools-idempotency-dynamodb diff --git a/powertools-kafka/pom.xml b/powertools-kafka/pom.xml index fd001f575..ac8c95f05 100644 --- a/powertools-kafka/pom.xml +++ b/powertools-kafka/pom.xml @@ -21,7 +21,7 @@ powertools-parent software.amazon.lambda - 2.5.0 + 2.6.0 powertools-kafka diff --git a/powertools-large-messages/pom.xml b/powertools-large-messages/pom.xml index bc7bbf03a..e29327c7d 100644 --- a/powertools-large-messages/pom.xml +++ b/powertools-large-messages/pom.xml @@ -23,7 +23,7 @@ software.amazon.lambda powertools-parent - 2.5.0 + 2.6.0 powertools-large-messages diff --git a/powertools-logging/pom.xml b/powertools-logging/pom.xml index 2fa4680fb..bcc28c6c2 100644 --- a/powertools-logging/pom.xml +++ b/powertools-logging/pom.xml @@ -21,7 +21,7 @@ powertools-parent software.amazon.lambda - 2.5.0 + 2.6.0 Powertools for AWS Lambda (Java) - Logging diff --git a/powertools-logging/powertools-logging-log4j/pom.xml b/powertools-logging/powertools-logging-log4j/pom.xml index b4800ab54..fc47ac84d 100644 --- a/powertools-logging/powertools-logging-log4j/pom.xml +++ b/powertools-logging/powertools-logging-log4j/pom.xml @@ -7,7 +7,7 @@ powertools-parent software.amazon.lambda - 2.5.0 + 2.6.0 ../../pom.xml diff --git a/powertools-logging/powertools-logging-logback/pom.xml b/powertools-logging/powertools-logging-logback/pom.xml index 0cfbb6104..2269303f5 100644 --- a/powertools-logging/powertools-logging-logback/pom.xml +++ b/powertools-logging/powertools-logging-logback/pom.xml @@ -6,7 +6,7 @@ powertools-parent software.amazon.lambda - 2.5.0 + 2.6.0 ../../pom.xml diff --git a/powertools-metrics/pom.xml b/powertools-metrics/pom.xml index 74b4ca7c4..ae2871b41 100644 --- a/powertools-metrics/pom.xml +++ b/powertools-metrics/pom.xml @@ -24,7 +24,7 @@ powertools-parent software.amazon.lambda - 2.5.0 + 2.6.0 Powertools for AWS Lambda (Java) - Metrics diff --git a/powertools-parameters/pom.xml b/powertools-parameters/pom.xml index f1e4eae57..72d3133d3 100644 --- a/powertools-parameters/pom.xml +++ b/powertools-parameters/pom.xml @@ -21,7 +21,7 @@ powertools-parent software.amazon.lambda - 2.5.0 + 2.6.0 powertools-parameters diff --git a/powertools-parameters/powertools-parameters-appconfig/pom.xml b/powertools-parameters/powertools-parameters-appconfig/pom.xml index eefc46ac5..454102ede 100644 --- a/powertools-parameters/powertools-parameters-appconfig/pom.xml +++ b/powertools-parameters/powertools-parameters-appconfig/pom.xml @@ -7,7 +7,7 @@ software.amazon.lambda powertools-parent - 2.5.0 + 2.6.0 ../../pom.xml diff --git a/powertools-parameters/powertools-parameters-dynamodb/pom.xml b/powertools-parameters/powertools-parameters-dynamodb/pom.xml index cfc8f64d3..594761bee 100644 --- a/powertools-parameters/powertools-parameters-dynamodb/pom.xml +++ b/powertools-parameters/powertools-parameters-dynamodb/pom.xml @@ -7,7 +7,7 @@ software.amazon.lambda powertools-parent - 2.5.0 + 2.6.0 ../../pom.xml diff --git a/powertools-parameters/powertools-parameters-secrets/pom.xml b/powertools-parameters/powertools-parameters-secrets/pom.xml index 9d3ca0500..4b4616cb2 100644 --- a/powertools-parameters/powertools-parameters-secrets/pom.xml +++ b/powertools-parameters/powertools-parameters-secrets/pom.xml @@ -7,7 +7,7 @@ software.amazon.lambda powertools-parent - 2.5.0 + 2.6.0 ../../pom.xml diff --git a/powertools-parameters/powertools-parameters-ssm/pom.xml b/powertools-parameters/powertools-parameters-ssm/pom.xml index a277337a7..0e31ed729 100644 --- a/powertools-parameters/powertools-parameters-ssm/pom.xml +++ b/powertools-parameters/powertools-parameters-ssm/pom.xml @@ -7,7 +7,7 @@ software.amazon.lambda powertools-parent - 2.5.0 + 2.6.0 ../../pom.xml diff --git a/powertools-parameters/powertools-parameters-tests/pom.xml b/powertools-parameters/powertools-parameters-tests/pom.xml index 61fb4c3b9..b1b655fe8 100644 --- a/powertools-parameters/powertools-parameters-tests/pom.xml +++ b/powertools-parameters/powertools-parameters-tests/pom.xml @@ -6,7 +6,7 @@ software.amazon.lambda powertools-parent - 2.5.0 + 2.6.0 ../../pom.xml diff --git a/powertools-serialization/pom.xml b/powertools-serialization/pom.xml index 1ed2ee259..79b6653fa 100644 --- a/powertools-serialization/pom.xml +++ b/powertools-serialization/pom.xml @@ -21,7 +21,7 @@ powertools-parent software.amazon.lambda - 2.5.0 + 2.6.0 powertools-serialization diff --git a/powertools-tracing/pom.xml b/powertools-tracing/pom.xml index c1f1433a1..3b1e58ccd 100644 --- a/powertools-tracing/pom.xml +++ b/powertools-tracing/pom.xml @@ -24,7 +24,7 @@ powertools-parent software.amazon.lambda - 2.5.0 + 2.6.0 Powertools for AWS Lambda (Java) - Tracing diff --git a/powertools-validation/pom.xml b/powertools-validation/pom.xml index 57f8f25fb..2c119972d 100644 --- a/powertools-validation/pom.xml +++ b/powertools-validation/pom.xml @@ -24,7 +24,7 @@ powertools-parent software.amazon.lambda - 2.5.0 + 2.6.0 Powertools for AWS Lambda (Java) - Validation From e928caedcf5fbbb0e43fbffd38b7d9a617fd3fef Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 5 Nov 2025 16:39:04 +0100 Subject: [PATCH 020/202] chore: bump com.amazonaws:aws-lambda-java-runtime-interface-client (#2272) Bumps [com.amazonaws:aws-lambda-java-runtime-interface-client](https://github.com/aws/aws-lambda-java-libs) from 2.8.6 to 2.8.7. - [Commits](https://github.com/aws/aws-lambda-java-libs/commits) --- updated-dependencies: - dependency-name: com.amazonaws:aws-lambda-java-runtime-interface-client dependency-version: 2.8.7 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- examples/powertools-examples-cloudformation/pom.xml | 2 +- examples/powertools-examples-core-utilities/sam-graalvm/pom.xml | 2 +- examples/powertools-examples-idempotency/sam-graalvm/pom.xml | 2 +- examples/powertools-examples-parameters/sam-graalvm/pom.xml | 2 +- examples/powertools-examples-serialization/sam-graalvm/pom.xml | 2 +- powertools-e2e-tests/handlers/pom.xml | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/examples/powertools-examples-cloudformation/pom.xml b/examples/powertools-examples-cloudformation/pom.xml index 389245bbc..e04a8dc43 100644 --- a/examples/powertools-examples-cloudformation/pom.xml +++ b/examples/powertools-examples-cloudformation/pom.xml @@ -77,7 +77,7 @@ com.amazonaws aws-lambda-java-runtime-interface-client - 2.8.6 + 2.8.7 diff --git a/examples/powertools-examples-core-utilities/sam-graalvm/pom.xml b/examples/powertools-examples-core-utilities/sam-graalvm/pom.xml index b879ae49d..cfd640aa1 100644 --- a/examples/powertools-examples-core-utilities/sam-graalvm/pom.xml +++ b/examples/powertools-examples-core-utilities/sam-graalvm/pom.xml @@ -49,7 +49,7 @@ com.amazonaws aws-lambda-java-runtime-interface-client - 2.8.6 + 2.8.7 org.apache.logging.log4j diff --git a/examples/powertools-examples-idempotency/sam-graalvm/pom.xml b/examples/powertools-examples-idempotency/sam-graalvm/pom.xml index 3fa68c7e0..dff0082f1 100644 --- a/examples/powertools-examples-idempotency/sam-graalvm/pom.xml +++ b/examples/powertools-examples-idempotency/sam-graalvm/pom.xml @@ -43,7 +43,7 @@ com.amazonaws aws-lambda-java-runtime-interface-client - 2.8.6 + 2.8.7 diff --git a/examples/powertools-examples-parameters/sam-graalvm/pom.xml b/examples/powertools-examples-parameters/sam-graalvm/pom.xml index bfebbe57d..9c62498d5 100644 --- a/examples/powertools-examples-parameters/sam-graalvm/pom.xml +++ b/examples/powertools-examples-parameters/sam-graalvm/pom.xml @@ -49,7 +49,7 @@ com.amazonaws aws-lambda-java-runtime-interface-client - 2.8.6 + 2.8.7 org.apache.logging.log4j diff --git a/examples/powertools-examples-serialization/sam-graalvm/pom.xml b/examples/powertools-examples-serialization/sam-graalvm/pom.xml index 9b03e3046..7df5805ce 100644 --- a/examples/powertools-examples-serialization/sam-graalvm/pom.xml +++ b/examples/powertools-examples-serialization/sam-graalvm/pom.xml @@ -36,7 +36,7 @@ com.amazonaws aws-lambda-java-runtime-interface-client - 2.8.6 + 2.8.7 diff --git a/powertools-e2e-tests/handlers/pom.xml b/powertools-e2e-tests/handlers/pom.xml index 2e024375c..95a09d1d9 100644 --- a/powertools-e2e-tests/handlers/pom.xml +++ b/powertools-e2e-tests/handlers/pom.xml @@ -129,7 +129,7 @@ com.amazonaws aws-lambda-java-runtime-interface-client - 2.8.6 + 2.8.7 From f08e8731aaac85014d752c58294c9e11e89b5d03 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 5 Nov 2025 16:39:08 +0100 Subject: [PATCH 021/202] chore: bump aws.sdk.version from 2.37.4 to 2.37.5 (#2271) Bumps `aws.sdk.version` from 2.37.4 to 2.37.5. Updates `software.amazon.awssdk:bom` from 2.37.4 to 2.37.5 Updates `software.amazon.awssdk:http-client-spi` from 2.37.4 to 2.37.5 Updates `software.amazon.awssdk:url-connection-client` from 2.37.2 to 2.37.5 Updates `software.amazon.awssdk:s3` from 2.37.2 to 2.37.5 Updates `software.amazon.awssdk:dynamodb` from 2.37.4 to 2.37.5 Updates `software.amazon.awssdk:lambda` from 2.37.4 to 2.37.5 Updates `software.amazon.awssdk:kinesis` from 2.37.2 to 2.37.5 Updates `software.amazon.awssdk:cloudwatch` from 2.37.4 to 2.37.5 Updates `software.amazon.awssdk:xray` from 2.37.4 to 2.37.5 Updates `software.amazon.awssdk:sqs` from 2.37.2 to 2.37.5 Updates `software.amazon.awssdk:cloudformation` from 2.37.4 to 2.37.5 Updates `software.amazon.awssdk:sts` from 2.37.4 to 2.37.5 --- updated-dependencies: - dependency-name: software.amazon.awssdk:bom dependency-version: 2.37.5 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: software.amazon.awssdk:http-client-spi dependency-version: 2.37.5 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: software.amazon.awssdk:url-connection-client dependency-version: 2.37.5 dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: software.amazon.awssdk:s3 dependency-version: 2.37.5 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: software.amazon.awssdk:dynamodb dependency-version: 2.37.5 dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: software.amazon.awssdk:lambda dependency-version: 2.37.5 dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: software.amazon.awssdk:kinesis dependency-version: 2.37.5 dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: software.amazon.awssdk:cloudwatch dependency-version: 2.37.5 dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: software.amazon.awssdk:xray dependency-version: 2.37.5 dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: software.amazon.awssdk:sqs dependency-version: 2.37.5 dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: software.amazon.awssdk:cloudformation dependency-version: 2.37.5 dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: software.amazon.awssdk:sts dependency-version: 2.37.5 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- examples/powertools-examples-cloudformation/pom.xml | 2 +- pom.xml | 2 +- powertools-e2e-tests/handlers/pom.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/powertools-examples-cloudformation/pom.xml b/examples/powertools-examples-cloudformation/pom.xml index e04a8dc43..a88339746 100644 --- a/examples/powertools-examples-cloudformation/pom.xml +++ b/examples/powertools-examples-cloudformation/pom.xml @@ -14,7 +14,7 @@ 11 1.4.0 3.16.1 - 2.37.4 + 2.37.5 1.9.20.1 diff --git a/pom.xml b/pom.xml index 66d15731b..d262fbc6b 100644 --- a/pom.xml +++ b/pom.xml @@ -85,7 +85,7 @@ 2.25.2 2.0.17 2.20.1 - 2.37.4 + 2.37.5 2.20.0 2.2.0 UTF-8 diff --git a/powertools-e2e-tests/handlers/pom.xml b/powertools-e2e-tests/handlers/pom.xml index 95a09d1d9..599588c1d 100644 --- a/powertools-e2e-tests/handlers/pom.xml +++ b/powertools-e2e-tests/handlers/pom.xml @@ -19,7 +19,7 @@ 3.6.1 1.14.1 3.14.1 - 2.37.4 + 2.37.5 1.9.20.1 true From 1ed3daeba384f12ec5df3ea11d42ef038c791246 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 10 Nov 2025 11:08:51 +0100 Subject: [PATCH 022/202] chore: bump aws.sdk.version from 2.37.2 to 2.37.5 (#2273) Bumps `aws.sdk.version` from 2.37.2 to 2.37.5. Updates `software.amazon.awssdk:url-connection-client` from 2.37.2 to 2.37.5 Updates `software.amazon.awssdk:sdk-core` from 2.37.2 to 2.37.5 Updates `software.amazon.awssdk:s3` from 2.37.2 to 2.37.5 Updates `software.amazon.awssdk:kinesis` from 2.37.2 to 2.37.5 Updates `software.amazon.awssdk:sqs` from 2.37.2 to 2.37.5 Updates `software.amazon.awssdk:dynamodb-enhanced` from 2.37.2 to 2.37.5 --- updated-dependencies: - dependency-name: software.amazon.awssdk:url-connection-client dependency-version: 2.37.5 dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: software.amazon.awssdk:sdk-core dependency-version: 2.37.5 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: software.amazon.awssdk:s3 dependency-version: 2.37.5 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: software.amazon.awssdk:kinesis dependency-version: 2.37.5 dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: software.amazon.awssdk:sqs dependency-version: 2.37.5 dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: software.amazon.awssdk:dynamodb-enhanced dependency-version: 2.37.5 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- examples/powertools-examples-batch/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/powertools-examples-batch/pom.xml b/examples/powertools-examples-batch/pom.xml index 707b9bcfb..103a8a4b4 100644 --- a/examples/powertools-examples-batch/pom.xml +++ b/examples/powertools-examples-batch/pom.xml @@ -14,7 +14,7 @@ 11 11 1.9.20.1 - 2.37.2 + 2.37.5 From 6b032bbaaf019283931ec9fc83d147e9b271cd65 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 10 Nov 2025 11:09:06 +0100 Subject: [PATCH 023/202] chore: bump software.amazon.awscdk:aws-cdk-lib from 2.221.1 to 2.222.0 (#2274) Bumps [software.amazon.awscdk:aws-cdk-lib](https://github.com/aws/aws-cdk) from 2.221.1 to 2.222.0. - [Release notes](https://github.com/aws/aws-cdk/releases) - [Changelog](https://github.com/aws/aws-cdk/blob/main/CHANGELOG.v2.alpha.md) - [Commits](https://github.com/aws/aws-cdk/compare/v2.221.1...v2.222.0) --- updated-dependencies: - dependency-name: software.amazon.awscdk:aws-cdk-lib dependency-version: 2.222.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> --- examples/powertools-examples-core-utilities/cdk/infra/pom.xml | 2 +- powertools-e2e-tests/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/powertools-examples-core-utilities/cdk/infra/pom.xml b/examples/powertools-examples-core-utilities/cdk/infra/pom.xml index 4d3414c63..9348d52d9 100644 --- a/examples/powertools-examples-core-utilities/cdk/infra/pom.xml +++ b/examples/powertools-examples-core-utilities/cdk/infra/pom.xml @@ -7,7 +7,7 @@ 2.6.0 UTF-8 - 2.221.1 + 2.222.0 [10.0.0,11.0.0) 5.14.1 diff --git a/powertools-e2e-tests/pom.xml b/powertools-e2e-tests/pom.xml index 1898e309f..09bfe8271 100644 --- a/powertools-e2e-tests/pom.xml +++ b/powertools-e2e-tests/pom.xml @@ -31,7 +31,7 @@ 11 11 10.4.2 - 2.221.1 + 2.222.0 From e39cc6041417eb13896bc2a0b41a3c4eafd84b11 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 10 Nov 2025 11:09:18 +0100 Subject: [PATCH 024/202] chore: bump sam/build-java21 (#2275) Bumps sam/build-java21 from `72709a0` to `51709ae`. --- updated-dependencies: - dependency-name: sam/build-java21 dependency-version: 51709ae612478654f833998a3455519d0524157230757cf6327e402213811e38 dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- powertools-e2e-tests/src/test/resources/docker/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/powertools-e2e-tests/src/test/resources/docker/Dockerfile b/powertools-e2e-tests/src/test/resources/docker/Dockerfile index 8d26b4770..1abb53643 100644 --- a/powertools-e2e-tests/src/test/resources/docker/Dockerfile +++ b/powertools-e2e-tests/src/test/resources/docker/Dockerfile @@ -1,5 +1,5 @@ # Use the official AWS SAM base image for Java 21 -FROM public.ecr.aws/sam/build-java21@sha256:72709a010ebfc993fb402c1bce599a0b754110b873d1a58e60c52136e8c8f3f1 +FROM public.ecr.aws/sam/build-java21@sha256:51709ae612478654f833998a3455519d0524157230757cf6327e402213811e38 # Install GraalVM dependencies RUN curl -4 -L https://download.oracle.com/graalvm/21/latest/graalvm-jdk-21_linux-x64_bin.tar.gz | tar -xvz From 691aeea73b55126072065237b8bed41b58d497ee Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 11 Nov 2025 11:01:37 +0100 Subject: [PATCH 025/202] chore: bump aws.sdk.version from 2.37.5 to 2.38.2 (#2276) Bumps `aws.sdk.version` from 2.37.5 to 2.38.2. Updates `software.amazon.awssdk:url-connection-client` from 2.37.5 to 2.38.2 Updates `software.amazon.awssdk:sdk-core` from 2.37.5 to 2.38.2 Updates `software.amazon.awssdk:s3` from 2.37.5 to 2.38.2 Updates `software.amazon.awssdk:kinesis` from 2.37.5 to 2.38.2 Updates `software.amazon.awssdk:sqs` from 2.37.5 to 2.38.2 Updates `software.amazon.awssdk:dynamodb-enhanced` from 2.37.5 to 2.38.2 --- updated-dependencies: - dependency-name: software.amazon.awssdk:url-connection-client dependency-version: 2.38.2 dependency-type: direct:development update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:sdk-core dependency-version: 2.38.2 dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:s3 dependency-version: 2.38.2 dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:kinesis dependency-version: 2.38.2 dependency-type: direct:development update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:sqs dependency-version: 2.38.2 dependency-type: direct:development update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:dynamodb-enhanced dependency-version: 2.38.2 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> --- examples/powertools-examples-batch/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/powertools-examples-batch/pom.xml b/examples/powertools-examples-batch/pom.xml index 103a8a4b4..518cdbdd4 100644 --- a/examples/powertools-examples-batch/pom.xml +++ b/examples/powertools-examples-batch/pom.xml @@ -14,7 +14,7 @@ 11 11 1.9.20.1 - 2.37.5 + 2.38.2 From 7c6d6ea17aad11987a276aa06ac4fc63c38e58f9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 11 Nov 2025 11:01:45 +0100 Subject: [PATCH 026/202] chore: bump software.constructs:constructs from 10.4.2 to 10.4.3 (#2277) Bumps [software.constructs:constructs](https://github.com/aws/constructs) from 10.4.2 to 10.4.3. - [Release notes](https://github.com/aws/constructs/releases) - [Commits](https://github.com/aws/constructs/compare/v10.4.2...v10.4.3) --- updated-dependencies: - dependency-name: software.constructs:constructs dependency-version: 10.4.3 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- powertools-e2e-tests/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/powertools-e2e-tests/pom.xml b/powertools-e2e-tests/pom.xml index 09bfe8271..ddf1a360a 100644 --- a/powertools-e2e-tests/pom.xml +++ b/powertools-e2e-tests/pom.xml @@ -30,7 +30,7 @@ 11 11 - 10.4.2 + 10.4.3 2.222.0 From 598f004a0f56fad3e0e4f70594ff28fe1de4f616 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 13 Nov 2025 09:56:26 +0100 Subject: [PATCH 027/202] chore: bump aws.sdk.version from 2.37.5 to 2.38.3 (#2278) Bumps `aws.sdk.version` from 2.37.5 to 2.38.3. Updates `software.amazon.awssdk:bom` from 2.37.5 to 2.38.3 Updates `software.amazon.awssdk:http-client-spi` from 2.37.5 to 2.38.3 Updates `software.amazon.awssdk:url-connection-client` from 2.37.5 to 2.38.3 Updates `software.amazon.awssdk:s3` from 2.37.5 to 2.38.3 Updates `software.amazon.awssdk:dynamodb` from 2.37.5 to 2.38.3 Updates `software.amazon.awssdk:lambda` from 2.37.5 to 2.38.3 Updates `software.amazon.awssdk:kinesis` from 2.37.5 to 2.38.3 Updates `software.amazon.awssdk:cloudwatch` from 2.37.5 to 2.38.3 Updates `software.amazon.awssdk:xray` from 2.37.5 to 2.38.3 Updates `software.amazon.awssdk:sqs` from 2.37.5 to 2.38.3 Updates `software.amazon.awssdk:cloudformation` from 2.37.5 to 2.38.3 Updates `software.amazon.awssdk:sts` from 2.37.5 to 2.38.3 --- updated-dependencies: - dependency-name: software.amazon.awssdk:bom dependency-version: 2.38.3 dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:http-client-spi dependency-version: 2.38.3 dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:url-connection-client dependency-version: 2.38.3 dependency-type: direct:development update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:s3 dependency-version: 2.38.3 dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:dynamodb dependency-version: 2.38.3 dependency-type: direct:development update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:lambda dependency-version: 2.38.3 dependency-type: direct:development update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:kinesis dependency-version: 2.38.3 dependency-type: direct:development update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:cloudwatch dependency-version: 2.38.3 dependency-type: direct:development update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:xray dependency-version: 2.38.3 dependency-type: direct:development update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:sqs dependency-version: 2.38.3 dependency-type: direct:development update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:cloudformation dependency-version: 2.38.3 dependency-type: direct:development update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:sts dependency-version: 2.38.3 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> --- examples/powertools-examples-cloudformation/pom.xml | 2 +- pom.xml | 2 +- powertools-e2e-tests/handlers/pom.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/powertools-examples-cloudformation/pom.xml b/examples/powertools-examples-cloudformation/pom.xml index a88339746..392d08b4b 100644 --- a/examples/powertools-examples-cloudformation/pom.xml +++ b/examples/powertools-examples-cloudformation/pom.xml @@ -14,7 +14,7 @@ 11 1.4.0 3.16.1 - 2.37.5 + 2.38.3 1.9.20.1 diff --git a/pom.xml b/pom.xml index d262fbc6b..4d5ff7248 100644 --- a/pom.xml +++ b/pom.xml @@ -85,7 +85,7 @@ 2.25.2 2.0.17 2.20.1 - 2.37.5 + 2.38.3 2.20.0 2.2.0 UTF-8 diff --git a/powertools-e2e-tests/handlers/pom.xml b/powertools-e2e-tests/handlers/pom.xml index 599588c1d..bf2e78f8c 100644 --- a/powertools-e2e-tests/handlers/pom.xml +++ b/powertools-e2e-tests/handlers/pom.xml @@ -19,7 +19,7 @@ 3.6.1 1.14.1 3.14.1 - 2.37.5 + 2.38.3 1.9.20.1 true From 7cdac1d58edf24648bd0e9875f01748e43391f0f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 13 Nov 2025 09:56:40 +0100 Subject: [PATCH 028/202] chore: bump software.amazon.awscdk:aws-cdk-lib from 2.222.0 to 2.223.0 (#2279) Bumps [software.amazon.awscdk:aws-cdk-lib](https://github.com/aws/aws-cdk) from 2.222.0 to 2.223.0. - [Release notes](https://github.com/aws/aws-cdk/releases) - [Changelog](https://github.com/aws/aws-cdk/blob/main/CHANGELOG.v2.alpha.md) - [Commits](https://github.com/aws/aws-cdk/compare/v2.222.0...v2.223.0) --- updated-dependencies: - dependency-name: software.amazon.awscdk:aws-cdk-lib dependency-version: 2.223.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> --- examples/powertools-examples-core-utilities/cdk/infra/pom.xml | 2 +- powertools-e2e-tests/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/powertools-examples-core-utilities/cdk/infra/pom.xml b/examples/powertools-examples-core-utilities/cdk/infra/pom.xml index 9348d52d9..4ca38877d 100644 --- a/examples/powertools-examples-core-utilities/cdk/infra/pom.xml +++ b/examples/powertools-examples-core-utilities/cdk/infra/pom.xml @@ -7,7 +7,7 @@ 2.6.0 UTF-8 - 2.222.0 + 2.223.0 [10.0.0,11.0.0) 5.14.1 diff --git a/powertools-e2e-tests/pom.xml b/powertools-e2e-tests/pom.xml index ddf1a360a..860593819 100644 --- a/powertools-e2e-tests/pom.xml +++ b/powertools-e2e-tests/pom.xml @@ -31,7 +31,7 @@ 11 11 10.4.3 - 2.222.0 + 2.223.0 From d550de02ffe2ef6901db9cb35b8338f61097bfb4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 13 Nov 2025 09:57:42 +0100 Subject: [PATCH 029/202] chore: bump squidfunk/mkdocs-material in /docs (#2280) Bumps squidfunk/mkdocs-material from `58dee36` to `980e11f`. --- updated-dependencies: - dependency-name: squidfunk/mkdocs-material dependency-version: 980e11fed03b8e7851e579be9f34b1210f516c9f0b4da1a1457f21a460bd6628 dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- docs/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Dockerfile b/docs/Dockerfile index 88d6ca284..56c4c19ea 100644 --- a/docs/Dockerfile +++ b/docs/Dockerfile @@ -1,4 +1,4 @@ -FROM squidfunk/mkdocs-material@sha256:58dee36ad85b0ae4836522ee6d3f0150d828bca9a1f7d3bfbf430bca771c1441 +FROM squidfunk/mkdocs-material@sha256:980e11fed03b8e7851e579be9f34b1210f516c9f0b4da1a1457f21a460bd6628 COPY requirements.txt /tmp/ RUN pip install --require-hashes -r /tmp/requirements.txt From addad65980bd89fd992f6fe91de7b70af68b5135 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 13 Nov 2025 09:57:55 +0100 Subject: [PATCH 030/202] chore: bump actions/dependency-review-action from 4.8.1 to 4.8.2 (#2281) Bumps [actions/dependency-review-action](https://github.com/actions/dependency-review-action) from 4.8.1 to 4.8.2. - [Release notes](https://github.com/actions/dependency-review-action/releases) - [Commits](https://github.com/actions/dependency-review-action/compare/40c09b7dc99638e5ddb0bfd91c1673effc064d8a...3c4e3dcb1aa7874d2c16be7d79418e9b7efd6261) --- updated-dependencies: - dependency-name: actions/dependency-review-action dependency-version: 4.8.2 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/security-dependencies-check.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/security-dependencies-check.yml b/.github/workflows/security-dependencies-check.yml index 692acd64d..c6e06950f 100644 --- a/.github/workflows/security-dependencies-check.yml +++ b/.github/workflows/security-dependencies-check.yml @@ -26,6 +26,6 @@ jobs: - name: Checkout Repository uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 - name: Verify Contents - uses: actions/dependency-review-action@40c09b7dc99638e5ddb0bfd91c1673effc064d8a # v4.8.1 + uses: actions/dependency-review-action@3c4e3dcb1aa7874d2c16be7d79418e9b7efd6261 # v4.8.2 with: config-file: './.github/dependency-review-config.yml' From f9f227cf5a289da7c701057c9228296811ebfb3a Mon Sep 17 00:00:00 2001 From: Philipp Page Date: Thu, 13 Nov 2025 10:19:29 +0100 Subject: [PATCH 031/202] docs: Document new functional API (#2282) * Initial version of documentation revamp adding functional API and usage patterns. * Update tracing docs highlighting functional API. * Update metrics docs highlighting functional API. * Update parameters docs highlithing functional approach. * Update validation docs highlithing functional API. * Update README.md Co-authored-by: Stefano Vozza * Update docs/core/logging.md Co-authored-by: Stefano Vozza * Update docs/core/logging.md Co-authored-by: Stefano Vozza * Update docs/core/logging.md Co-authored-by: Stefano Vozza * Update docs/core/logging.md Co-authored-by: Stefano Vozza * Update docs/core/metrics.md Co-authored-by: Stefano Vozza * Update docs/core/tracing.md Co-authored-by: Stefano Vozza * Update docs/index.md Co-authored-by: Stefano Vozza * Update docs/core/logging.md Co-authored-by: Stefano Vozza * Update docs/utilities/idempotency.md Co-authored-by: Stefano Vozza * Update docs/utilities/idempotency.md Co-authored-by: Stefano Vozza --------- Co-authored-by: Stefano Vozza --- README.md | 14 +- docs/FAQs.md | 4 + docs/core/logging.md | 264 ++++++++++++++++--- docs/core/metrics.md | 82 +++--- docs/core/tracing.md | 142 +++++----- docs/index.md | 39 ++- docs/processes/maintainers.md | 2 +- docs/usage-patterns.md | 183 +++++++++++++ docs/utilities/idempotency.md | 427 +++++++++++++++++++++++++------ docs/utilities/large_messages.md | 271 +++++++++++++++----- docs/utilities/parameters.md | 44 ++-- docs/utilities/validation.md | 23 +- mkdocs.yml | 4 +- 13 files changed, 1167 insertions(+), 332 deletions(-) create mode 100644 docs/usage-patterns.md diff --git a/README.md b/README.md index 58d3901dc..e771db05c 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ Powertools for AWS Lambda (Java) is available in Maven Central. You can use your software.amazon.lambda - powertools-logging + powertools-logging-log4j 2.6.0 @@ -116,6 +116,7 @@ Next, configure the aspectj-maven-plugin to compile-time weave (CTW) the aws-lam aspect 'software.amazon.lambda:powertools-logging:{{ powertools.version }}' aspect 'software.amazon.lambda:powertools-tracing:{{ powertools.version }}' aspect 'software.amazon.lambda:powertools-metrics:{{ powertools.version }}' + implementation 'software.amazon.lambda:powertools-logging-log4j:{{ powertools.version }}' implementation "org.aspectj:aspectjrt:1.9.22" } @@ -126,10 +127,10 @@ Next, configure the aspectj-maven-plugin to compile-time weave (CTW) the aws-lam ### Java Compatibility -Powertools for AWS Lambda (Java) supports all Java version from 11 up to 21 as well as the -[corresponding Lambda runtimes](https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html). +Powertools for AWS Lambda (Java) supports all Java versions from 11 to 25 in line with the [corresponding Lambda runtimes](https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html). + For the modules that provide annotations, Powertools for AWS Lambda (Java) leverages the **aspectj** library. -You may need to add the good version of `aspectjrt` to your dependencies based on the JDK used for building your function: +You may need to add the appropriate version of `aspectjrt` to your dependencies based on the JDK used for building your function: ```xml @@ -142,12 +143,13 @@ You may need to add the good version of `aspectjrt` to your dependencies based o

JDK - aspectj dependency matrix +Use the following [dependency matrix](https://github.com/eclipse-aspectj/aspectj/blob/master/docs/release/JavaVersionCompatibility.adoc) to understand which AspectJ version to use based on your JDK version: + | JDK version | aspectj version | |-------------|------------------------| | `11-17` | `1.9.20.1` (or higher) | | `21` | `1.9.21` (or higher) | - -More info [here](https://github.com/aws-powertools/powertools-lambda-java/pull/1519/files#diff-b335630551682c19a781afebcf4d07bf978fb1f8ac04c6bf87428ed5106870f5R191). +| `25` | `1.9.25` (or higher) |
diff --git a/docs/FAQs.md b/docs/FAQs.md index 75f699c91..cea4b774f 100644 --- a/docs/FAQs.md +++ b/docs/FAQs.md @@ -7,6 +7,8 @@ description: Frequently Asked Questions Many utilities in this library use `aspectj-maven-plugin` to compile-time weave (CTW) aspects into the project. In case you want to use `Lombok` or other compile-time preprocessor for your project, it is required to change `aspectj-maven-plugin` configuration to enable in-place weaving feature. Otherwise the plugin will ignore changes introduced by `Lombok` and will use `.java` files as a source. +Alternatively, you can use the [functional approach](./usage-patterns.md#functional-approach) which does not require AspectJ configuration. + To enable in-place weaving feature you need to use following `aspectj-maven-plugin` configuration: ```xml hl_lines="2-6" @@ -31,6 +33,8 @@ To enable in-place weaving feature you need to use following `aspectj-maven-plug Many utilities use `aspectj-maven-plugin` to compile-time weave (CTW) aspects into the project. When using it with Kotlin projects, it is required to `forceAjcCompile`. No explicit configuration should be required for gradle projects. +Alternatively, you can use the [functional approach](./usage-patterns.md#functional-approach) which does not require AspectJ configuration. + To enable `forceAjcCompile` you need to use following `aspectj-maven-plugin` configuration: ```xml hl_lines="2" diff --git a/docs/core/logging.md b/docs/core/logging.md index db01a3ec0..8358087d2 100644 --- a/docs/core/logging.md +++ b/docs/core/logging.md @@ -23,13 +23,12 @@ Logging provides an opinionated logger with output structured as JSON. You can find complete examples in the [project repository](https://github.com/aws-powertools/powertools-lambda-java/tree/v2/examples/powertools-examples-core-utilities){target="_blank"}. ### Installation -Depending on preference, you must choose to use either _log4j2_ or _logback_ as your log provider. In both cases you need to configure _aspectj_ -to weave the code and make sure the annotation is processed. +Depending on preference, you must choose to use either _log4j2_ or _logback_ as your log provider. If you use the AspectJ annotation approach, you must configure _aspectj_ to weave the code and make sure the annotation is processed. If you prefer the [functional approach](../usage-patterns.md#functional-approach), AspectJ configuration is not required. #### Maven === "log4j2" - ```xml hl_lines="3-7 24-27" + ```xml hl_lines="3-12 30-33" ... @@ -37,10 +36,16 @@ to weave the code and make sure the annotation is processed. powertools-logging-log4j {{ powertools.version }} + + software.amazon.lambda + powertools-logging + {{ powertools.version }} + ... ... + ... @@ -82,7 +87,7 @@ to weave the code and make sure the annotation is processed. === "logback" - ```xml hl_lines="3-7 24-27" + ```xml hl_lines="3-12 30-33" ... @@ -90,10 +95,16 @@ to weave the code and make sure the annotation is processed. powertools-logging-logback {{ powertools.version }} + + software.amazon.lambda + powertools-logging + {{ powertools.version }} + ... ... + ... @@ -137,10 +148,10 @@ to weave the code and make sure the annotation is processed. === "log4j2" - ```groovy hl_lines="3 11" + ```groovy hl_lines="3 11-12" plugins { id 'java' - id 'io.freefair.aspectj.post-compile-weaving' version '8.1.0' + id 'io.freefair.aspectj.post-compile-weaving' version '8.1.0' // Not needed when using the functional approach } repositories { @@ -148,7 +159,8 @@ to weave the code and make sure the annotation is processed. } dependencies { - aspect 'software.amazon.lambda:powertools-logging-log4j:{{ powertools.version }}' + aspect 'software.amazon.lambda:powertools-logging:{{ powertools.version }}' // Not needed when using the functional approach + implementation 'software.amazon.lambda:powertools-logging-log4j:{{ powertools.version }}' } sourceCompatibility = 11 @@ -157,10 +169,10 @@ to weave the code and make sure the annotation is processed. === "logback" - ```groovy hl_lines="3 11" + ```groovy hl_lines="3 11-12" plugins { id 'java' - id 'io.freefair.aspectj.post-compile-weaving' version '8.1.0' + id 'io.freefair.aspectj.post-compile-weaving' version '8.1.0' // Not needed when using the functional approach } repositories { @@ -168,7 +180,8 @@ to weave the code and make sure the annotation is processed. } dependencies { - aspect 'software.amazon.lambda:powertools-logging-logback:{{ powertools.version }}' + aspect 'software.amazon.lambda:powertools-logging:{{ powertools.version }}' // Not needed when using the functional approach + implementation 'software.amazon.lambda:powertools-logging-logback:{{ powertools.version }}' } sourceCompatibility = 11 @@ -317,9 +330,9 @@ If you set `POWERTOOLS_LOG_LEVEL` lower than ALC, we will emit a warning informi ## Basic Usage -To use Lambda Powertools for AWS Lambda Logging, use the `@Logging` annotation in your code and the standard _SLF4J_ logger: +You can use Powertools for AWS Lambda Logging with either the `@Logging` annotation or the functional API: -=== "PaymentFunction.java" +=== "@Logging annotation" ```java hl_lines="8 10 12 14" import org.slf4j.Logger; @@ -341,6 +354,30 @@ To use Lambda Powertools for AWS Lambda Logging, use the `@Logging` annotation i } ``` +=== "Functional API" + + ```java hl_lines="8 11 12 14 17" + import org.slf4j.Logger; + import org.slf4j.LoggerFactory; + import software.amazon.lambda.powertools.logging.PowertoolsLogging; + // ... other imports + + public class PaymentFunction implements RequestHandler { + + private static final Logger LOGGER = LoggerFactory.getLogger(PaymentFunction.class); + + public APIGatewayProxyResponseEvent handleRequest(final APIGatewayProxyRequestEvent input, final Context context) { + return PowertoolsLogging.withLogging(context, () -> { + LOGGER.info("Collecting payment"); + // ... + LOGGER.debug("order={}, amount={}", order.getId(), order.getAmount()); + // ... + return new APIGatewayProxyResponseEvent().withStatusCode(200); + }); + } + } + ``` + ## Standard structured keys Your logs will always include the following keys in your structured logging: @@ -376,11 +413,10 @@ The following keys will also be added to all your structured logs (unless [confi #### Logging a correlation ID -You can set a correlation ID using the `correlationIdPath` attribute of the `@Logging`annotation, -by passing a [JMESPath expression](https://jmespath.org/tutorial.html){target="_blank"}, +You can set a correlation ID using the `correlationIdPath` parameter by passing a [JMESPath expression](https://jmespath.org/tutorial.html){target="_blank"}, including our custom [JMESPath Functions](../utilities/serialization.md#built-in-functions). -=== "AppCorrelationIdPath.java" +=== "@Logging annotation" ```java hl_lines="5" public class AppCorrelationIdPath implements RequestHandler { @@ -395,6 +431,24 @@ including our custom [JMESPath Functions](../utilities/serialization.md#built-in } } ``` + +=== "Functional API" + + ```java hl_lines="6" + public class AppCorrelationIdPath implements RequestHandler { + + private static final Logger LOGGER = LoggerFactory.getLogger(AppCorrelationIdPath.class); + + public APIGatewayProxyResponseEvent handleRequest(final APIGatewayProxyRequestEvent input, final Context context) { + return PowertoolsLogging.withLogging(context, "headers.my_request_id_header", input, () -> { + // ... + LOGGER.info("Collecting payment"); + // ... + return new APIGatewayProxyResponseEvent().withStatusCode(200); + }); + } + } + ``` === "Example HTTP Event" ```json hl_lines="3" @@ -422,7 +476,7 @@ including our custom [JMESPath Functions](../utilities/serialization.md#built-in To ease routine tasks like extracting correlation ID from popular event sources, we provide [built-in JMESPath expressions](#built-in-correlation-id-expressions). -=== "AppCorrelationId.java" +=== "@Logging annotation" ```java hl_lines="1 7" import software.amazon.lambda.powertools.logging.CorrelationIdPaths; @@ -440,6 +494,26 @@ we provide [built-in JMESPath expressions](#built-in-correlation-id-expressions) } ``` +=== "Functional API" + + ```java hl_lines="1 8" + import software.amazon.lambda.powertools.logging.CorrelationIdPaths; + + public class AppCorrelationId implements RequestHandler { + + private static final Logger LOGGER = LoggerFactory.getLogger(AppCorrelationId.class); + + public APIGatewayProxyResponseEvent handleRequest(final APIGatewayProxyRequestEvent input, final Context context) { + return PowertoolsLogging.withLogging(context, CorrelationIdPaths.API_GATEWAY_REST, input, () -> { + // ... + LOGGER.info("Collecting payment"); + // ... + return new APIGatewayProxyResponseEvent().withStatusCode(200); + }); + } + } + ``` + === "Example Event" ```json hl_lines="3" @@ -668,10 +742,9 @@ You can remove additional keys added with the MDC using `MDC.remove("key")`. #### Clearing state Logger is commonly initialized in the global scope. Due to [Lambda Execution Context reuse](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-context.html){target="_blank"}, -this means that custom keys, added with the MDC can be persisted across invocations. If you want all custom keys to be deleted, you can use -`clearState=true` attribute on the `@Logging` annotation. +this means that custom keys, added with the MDC can be persisted across invocations. You can clear state using `clearState=true` on the `@Logging` annotation, or use the functional API which handles cleanup automatically. -=== "CreditCardFunction.java" +=== "@Logging annotation" ```java hl_lines="5 8" public class CreditCardFunction implements RequestHandler { @@ -716,15 +789,18 @@ this means that custom keys, added with the MDC can be persisted across invocati `clearState` is based on `MDC.clear()`. State clearing is automatically done at the end of the execution of the handler if set to `true`. +???+ tip + When using the functional API with `PowertoolsLogging.withLogging()`, state is automatically cleared at the end of execution, so you don't need to manage it manually. + ## Logging incoming event -When debugging in non-production environments, you can instruct the `@Logging` annotation to log the incoming event with `logEvent` param or via `POWERTOOLS_LOGGER_LOG_EVENT` env var. +When debugging in non-production environments, you can log the incoming event using the `@Logging` annotation with the `logEvent` parameter, via the `POWERTOOLS_LOGGER_LOG_EVENT` environment variable, or manually with the functional API. ???+ warning - This is disabled by default to prevent sensitive info being logged + This is disabled by default to prevent sensitive info being logged. -=== "AppLogEvent.java" +=== "@Logging annotation" ```java hl_lines="5" public class AppLogEvent implements RequestHandler { @@ -738,17 +814,36 @@ When debugging in non-production environments, you can instruct the `@Logging` a } ``` +=== "Functional API" + + ```java hl_lines="1 9" + import static software.amazon.lambda.powertools.logging.argument.StructuredArguments.entry; + + public class AppLogEvent implements RequestHandler { + + private static final Logger LOGGER = LoggerFactory.getLogger(AppLogEvent.class); + + public APIGatewayProxyResponseEvent handleRequest(final APIGatewayProxyRequestEvent input, final Context context) { + return PowertoolsLogging.withLogging(context, () -> { + LOGGER.info("Handler Event", entry("event", input)); + // ... + return new APIGatewayProxyResponseEvent().withStatusCode(200); + }); + } + } + ``` + ???+ note - If you use this on a RequestStreamHandler, the SDK must duplicate input streams in order to log them. + If you use this on a RequestStreamHandler, the SDK must duplicate input streams in order to log them when used together with the `@Logging` annotation. ## Logging handler response -When debugging in non-production environments, you can instruct the `@Logging` annotation to log the response with `logResponse` param or via `POWERTOOLS_LOGGER_LOG_RESPONSE` env var. +When debugging in non-production environments, you can log the response using the `@Logging` annotation with the `logResponse` parameter, via the `POWERTOOLS_LOGGER_LOG_RESPONSE` environment variable, or manually with the functional API. ???+ warning - This is disabled by default to prevent sensitive info being logged + This is disabled by default to prevent sensitive info being logged. -=== "AppLogResponse.java" +=== "@Logging annotation" ```java hl_lines="5" public class AppLogResponse implements RequestHandler { @@ -762,18 +857,41 @@ When debugging in non-production environments, you can instruct the `@Logging` a } ``` +=== "Functional API" + + ```java hl_lines="1 11" + import static software.amazon.lambda.powertools.logging.argument.StructuredArguments.entry; + + public class AppLogResponse implements RequestHandler { + + private static final Logger LOGGER = LoggerFactory.getLogger(AppLogResponse.class); + + public APIGatewayProxyResponseEvent handleRequest(final APIGatewayProxyRequestEvent input, final Context context) { + return PowertoolsLogging.withLogging(context, () -> { + // ... + APIGatewayProxyResponseEvent response = new APIGatewayProxyResponseEvent().withStatusCode(200); + LOGGER.info("Handler Response", entry("response", response)); + return response; + }); + } + } + ``` + ???+ note - If you use this on a RequestStreamHandler, Powertools must duplicate output streams in order to log them. + If you use this on a RequestStreamHandler, Powertools must duplicate output streams in order to log them when used together with the `@Logging` annotation. ## Logging handler uncaught exception By default, AWS Lambda logs any uncaught exception that might happen in the handler. However, this log is not structured -and does not contain any additional context. You can instruct the `@Logging` annotation to log this kind of exception +and does not contain any additional context. When using the `@Logging` annotation, you can enable structured exception logging with `logError` param or via `POWERTOOLS_LOGGER_LOG_ERROR` env var. ???+ warning - This is disabled by default to prevent double logging + This is disabled by default to prevent double logging. -=== "AppLogResponse.java" +???+ note + This feature is only available when using the `@Logging` annotation. When using the functional API, you must catch and log exceptions manually using try-catch blocks. + +=== "@Logging annotation" ```java hl_lines="5" public class AppLogError implements RequestHandler { @@ -787,6 +905,29 @@ with `logError` param or via `POWERTOOLS_LOGGER_LOG_ERROR` env var. } ``` +=== "Functional API" + + ```java hl_lines="1 9 12-13" + import org.slf4j.MarkerFactory; + + public class AppLogError implements RequestHandler { + + private static final Logger LOGGER = LoggerFactory.getLogger(AppLogError.class); + + public APIGatewayProxyResponseEvent handleRequest(final APIGatewayProxyRequestEvent input, final Context context) { + return PowertoolsLogging.withLogging(context, () -> { + try { + // ... + return new APIGatewayProxyResponseEvent().withStatusCode(200); + } catch (Exception e) { + LOGGER.error(MarkerFactory.getMarker("FATAL"), "Exception in Lambda Handler", e); + throw e; + } + }); + } + } + ``` + ## Advanced ### Buffering logs @@ -1050,7 +1191,10 @@ You can manually control the log buffer using the `PowertoolsLogging` utility cl Use the `@Logging` annotation to automatically flush buffered logs when an uncaught exception is raised in your Lambda function. This is enabled by default (`flushBufferOnUncaughtError = true`), but you can explicitly configure it if needed. -=== "PaymentFunction.java" +???+ warning + This feature is only available when using the `@Logging` annotation. When using the functional API, you must manually flush the buffer in exception handlers. + +=== "@Logging annotation" ```java hl_lines="5 11" public class PaymentFunction implements RequestHandler { @@ -1068,6 +1212,30 @@ Use the `@Logging` annotation to automatically flush buffered logs when an uncau } ``` +=== "Functional API" + + ```java hl_lines="14" + import software.amazon.lambda.powertools.logging.PowertoolsLogging; + + public class PaymentFunction implements RequestHandler { + + private static final Logger LOGGER = LoggerFactory.getLogger(PaymentFunction.class); + + public APIGatewayProxyResponseEvent handleRequest(final APIGatewayProxyRequestEvent input, final Context context) { + return PowertoolsLogging.withLogging(context, () -> { + try { + LOGGER.debug("a debug log"); // this is buffered + // do stuff + throw new RuntimeException("Something went wrong"); + } catch (Exception e) { + PowertoolsLogging.flushBuffer(); // Manually flush buffered logs + throw e; + } + }); + } + } + ``` + #### Buffering workflows ##### Manual flush @@ -1161,13 +1329,13 @@ sequenceDiagram ## Sampling debug logs -You can dynamically set a percentage of your logs to`DEBUG` level to be included in the logger output, regardless of configured log leve, using the`POWERTOOLS_LOGGER_SAMPLE_RATE` environment variable or -via `samplingRate` attribute on the `@Logging` annotation. +You can dynamically set a percentage of your logs to`DEBUG` level to be included in the logger output, regardless of configured log level, using the`POWERTOOLS_LOGGER_SAMPLE_RATE` environment variable, +via the `samplingRate` attribute on the `@Logging` annotation, or as a parameter in the functional API. !!! info - Configuration on environment variable is given precedence over sampling rate configuration on annotation, provided it's in valid value range. + Configuration via environment variable is given precedence over sampling rate configuration, provided it's in valid value range. -=== "Sampling via annotation attribute" +=== "@Logging annotation" ```java hl_lines="5" public class App implements RequestHandler { @@ -1182,6 +1350,23 @@ via `samplingRate` attribute on the `@Logging` annotation. } ``` +=== "Functional API" + + ```java hl_lines="6" + public class App implements RequestHandler { + + private static final Logger LOGGER = LoggerFactory.getLogger(App.class); + + public APIGatewayProxyResponseEvent handleRequest(final APIGatewayProxyRequestEvent input, final Context context) { + return PowertoolsLogging.withLogging(context, 0.5, () -> { + // will eventually be logged based on the sampling rate + LOGGER.debug("Handle payment"); + return new APIGatewayProxyResponseEvent().withStatusCode(200); + }); + } + } + ``` + === "Sampling via environment variable" ```yaml hl_lines="8" @@ -1198,7 +1383,7 @@ via `samplingRate` attribute on the `@Logging` annotation. ## Built-in Correlation ID expressions -You can use any of the following built-in JMESPath expressions as part of `@Logging(correlationIdPath = ...)`: +You can use any of the following built-in JMESPath expressions with the `@Logging` annotation or the functional API: ???+ note "Note: Any object key named with `-` must be escaped" For example, **`request.headers."x-amzn-trace-id"`**. @@ -1237,8 +1422,7 @@ The `JsonTemplateLayout` is automatically configured with the provided template: "field": "name" }, "message": { - "$resolver": "powertools", - "field": "message" + "$resolver": "message" }, "error": { "message": { @@ -1299,6 +1483,10 @@ The `JsonTemplateLayout` is automatically configured with the provided template: "$resolver": "powertools", "field": "xray_trace_id" }, + "correlation_id": { + "$resolver": "powertools", + "field": "correlation_id" + }, "": { "$resolver": "powertools" } diff --git a/docs/core/metrics.md b/docs/core/metrics.md index 71c56bb8b..e7f7bd87f 100644 --- a/docs/core/metrics.md +++ b/docs/core/metrics.md @@ -48,6 +48,7 @@ Visit the AWS documentation for a complete explanation for [Amazon CloudWatch co ... + ... @@ -89,10 +90,10 @@ Visit the AWS documentation for a complete explanation for [Amazon CloudWatch co === "Gradle" - ```groovy hl_lines="3 11" + ```groovy hl_lines="3 11 12" plugins { id 'java' - id 'io.freefair.aspectj.post-compile-weaving' version '8.1.0' + id 'io.freefair.aspectj.post-compile-weaving' version '8.1.0' // Not needed when using the functional approach } repositories { @@ -100,7 +101,8 @@ Visit the AWS documentation for a complete explanation for [Amazon CloudWatch co } dependencies { - aspect 'software.amazon.lambda:powertools-metrics:{{ powertools.version }}' + aspect 'software.amazon.lambda:powertools-metrics:{{ powertools.version }}' // Not needed when using the functional approach + implementation 'software.amazon.lambda:powertools-metrics:{{ powertools.version }}' // Use this instead of 'aspect' when using the functional approach } sourceCompatibility = 11 @@ -127,27 +129,12 @@ Metrics has three global settings that will be used across all metrics emitted. The `Metrics` Singleton can be configured by three different interfaces. The following order of precedence applies: 1. `@FlushMetrics` annotation -2. `MetricsBuilder` using Builder pattern (see [Advanced section](#usage-without-metrics-annotation)) +2. `MetricsBuilder` using Builder pattern (see [Advanced section](#usage-without-flushmetrics-annotation)) 3. Environment variables (recommended) For most use-cases, we recommend using Environment variables and only overwrite settings in code where needed using either the `@FlushMetrics` annotation or `MetricsBuilder` if the annotation cannot be used. -=== "template.yaml" - - ```yaml hl_lines="9 10" - Resources: - HelloWorldFunction: - Type: AWS::Serverless::Function - Properties: - ... - Runtime: java11 - Environment: - Variables: - POWERTOOLS_SERVICE_NAME: payment - POWERTOOLS_METRICS_NAMESPACE: ServerlessAirline - ``` - -=== "MetricsEnabledHandler.java" +=== "@FlushMetrics annotation" ```java hl_lines="9" import software.amazon.lambda.powertools.metrics.FlushMetrics; @@ -165,9 +152,45 @@ For most use-cases, we recommend using Environment variables and only overwrite } ``` -`Metrics` is implemented as a Singleton to keep track of your aggregate metrics in memory and make them accessible anywhere in your code. To guarantee that metrics are flushed properly the `@FlushMetrics` annotation must be added on the lambda handler. +=== "MetricsBuilder" + + ```java hl_lines="7-8" + import software.amazon.lambda.powertools.metrics.Metrics; + import software.amazon.lambda.powertools.metrics.MetricsBuilder; + + public class MetricsEnabledHandler implements RequestHandler { + + private static final Metrics metrics = MetricsBuilder.builder() + .withNamespace("ServerlessAirline") + .withService("payment") + .build(); + + @Override + public Object handleRequest(Object input, Context context) { + // ... + metrics.flush(); + } + } + ``` + +=== "Environment variables" + + ```yaml hl_lines="9 10" + Resources: + HelloWorldFunction: + Type: AWS::Serverless::Function + Properties: + ... + Runtime: java11 + Environment: + Variables: + POWERTOOLS_SERVICE_NAME: payment + POWERTOOLS_METRICS_NAMESPACE: ServerlessAirline + ``` + +`Metrics` is implemented as a Singleton to keep track of your aggregate metrics in memory and make them accessible anywhere in your code. The `@FlushMetrics` annotation automatically flushes metrics at the end of the Lambda handler execution. Alternatively, you can use the functional approach and manually flush metrics using `metrics.flush()`. -!!!info "You can use the Metrics utility without the `@FlushMetrics` annotation and flush manually. Read more in the [advanced section below](#usage-without-metrics-annotation)." +!!!info "Read more about the functional approach in the [advanced section below](#usage-without-flushmetrics-annotation)." ## Creating metrics @@ -381,7 +404,7 @@ You can use `addMetadata` for advanced use cases, where you want to add metadata This will not be available during metrics visualization, use Dimensions for this purpose. !!! info - Adding metadata with a key that is the same as an existing metric will be ignored + Adding metadata with a key that is the same as an existing metric will be ignored. === "App.java" @@ -468,7 +491,7 @@ You can create metrics with different configurations e.g. different namespace an === "App.java" - ```java hl_lines="12-18" + ```java hl_lines="12-22" import software.amazon.lambda.powertools.metrics.Metrics; import software.amazon.lambda.powertools.metrics.MetricsFactory; import software.amazon.lambda.powertools.metrics.model.DimensionSet; @@ -504,22 +527,22 @@ You can create metrics with different configurations e.g. different namespace an ### Usage without `@FlushMetrics` annotation -The `Metrics` Singleton provides all configuration options via `MetricsBuilder` in addition to the `@FlushMetrics` annotation. This can be useful if work in an environment or framework that does not leverage the vanilla Lambda `handleRequest` method. +You can use the **functional API** approach (see [usage patterns](../usage-patterns.md#functional-approach)) to work with Metrics without the `@FlushMetrics` annotation. The `Metrics` Singleton provides all configuration options via `MetricsBuilder`. This approach eliminates the AspectJ runtime dependency and is useful if you work in an environment or with a framework that does not leverage the vanilla Lambda `handleRequest` method. !!!info "The environment variables for Service and Namespace configuration still apply but can be overwritten with `MetricsBuilder` if needed." -The following example shows how to configure a custom `Metrics` Singleton using the Builder pattern. Note that it is necessary to manually flush metrics now. +The following example shows how to configure a custom `Metrics` Singleton using the Builder pattern. With the functional approach, you must manually flush metrics using `metrics.flush()`. === "App.java" - ```java hl_lines="7-12 19 23" + ```java hl_lines="7-12 19 24" import software.amazon.lambda.powertools.metrics.Metrics; import software.amazon.lambda.powertools.metrics.MetricsBuilder; import software.amazon.lambda.powertools.metrics.model.DimensionSet; import software.amazon.lambda.powertools.metrics.model.MetricUnit; public class App implements RequestHandler { - // Create and configure a Metrics singleton without annotation + // Create and configure a Metrics singleton using the functional approach private static final Metrics metrics = MetricsBuilder.builder() .withNamespace("ServerlessAirline") .withRaiseOnEmptyMetrics(true) @@ -533,8 +556,9 @@ The following example shows how to configure a custom `Metrics` Singleton using // Dimensions are also optional. metrics.captureColdStartMetric(context, DimensionSet.of("FunctionName", "MyFunction", "Service", "payment")); - // Add metrics to the custom metrics singleton + // Add metrics metrics.addMetric("CustomMetric", 1, MetricUnit.COUNT); + // Manually flush metrics metrics.flush(); } } diff --git a/docs/core/tracing.md b/docs/core/tracing.md index 8129d45ba..95fbe6d06 100644 --- a/docs/core/tracing.md +++ b/docs/core/tracing.md @@ -20,7 +20,7 @@ a provides functionality to reduce the overhead of performing common tracing tas === "Maven" - ```xml hl_lines="3-7 16 18 24-27" + ```xml hl_lines="3-7 25-28" ... @@ -32,6 +32,7 @@ a provides functionality to reduce the overhead of performing common tracing tas ... + ... @@ -73,10 +74,10 @@ a provides functionality to reduce the overhead of performing common tracing tas === "Gradle" - ```groovy hl_lines="3 11" + ```groovy hl_lines="3 11 12" plugins { id 'java' - id 'io.freefair.aspectj.post-compile-weaving' version '8.1.0' + id 'io.freefair.aspectj.post-compile-weaving' version '8.1.0' // Not needed when using the functional approach } repositories { @@ -84,11 +85,12 @@ a provides functionality to reduce the overhead of performing common tracing tas } dependencies { - aspect 'software.amazon.lambda:powertools-tracing:{{ powertools.version }}' + aspect 'software.amazon.lambda:powertools-tracing:{{ powertools.version }}' // Not needed when using the functional approach + implementation 'software.amazon.lambda:powertools-tracing:{{ powertools.version }}' // Use this instead of 'aspect' when using the functional approach } - sourceCompatibility = 11 - targetCompatibility = 11 + sourceCompatibility = 11 // or higher + targetCompatibility = 11 // or higher ``` ## Initialization @@ -118,11 +120,13 @@ The Powertools for AWS Lambda (Java) service name is used as the X-Ray namespace ### Lambda handler -To enable Powertools for AWS Lambda (Java) tracing to your function add the `@Tracing` annotation to your `handleRequest` method or on -any method will capture the method as a separate subsegment automatically. You can optionally choose to customize -segment name that appears in traces. +You can enable tracing using either the `@Tracing` annotation or the functional API. -=== "Tracing annotation" +**With the `@Tracing` annotation**, add it to your `handleRequest` method or any method to capture it as a separate subsegment automatically. You can optionally customize the segment name that appears in traces. + +**With the functional API**, use `TracingUtils.withSubsegment()` to manually create subsegments without AspectJ configuration. + +=== "@Tracing annotation" ```java hl_lines="3 10 15" public class App implements RequestHandler { @@ -146,6 +150,25 @@ segment name that appears in traces. } ``` +=== "Functional API" + + ```java hl_lines="1 6 7 8 10 11 12" + import software.amazon.lambda.powertools.tracing.TracingUtils; + + public class App implements RequestHandler { + + public APIGatewayProxyResponseEvent handleRequest(APIGatewayProxyRequestEvent input, Context context) { + TracingUtils.withSubsegment("businessLogic1", subsegment -> { + // Business logic 1 + }); + + TracingUtils.withSubsegment("businessLogic2", subsegment -> { + // Business logic 2 + }); + } + } + ``` + === "Custom Segment names" ```java hl_lines="3" @@ -157,22 +180,25 @@ segment name that appears in traces. } ``` -When using this `@Tracing` annotation, Utility performs these additional tasks to ease operations: +When using the `@Tracing` annotation, the utility performs these additional tasks to ease operations: * Creates a `ColdStart` annotation to easily filter traces that have had an initialization overhead. * Creates a `Service` annotation if service parameter or `POWERTOOLS_SERVICE_NAME` is set. * Captures any response, or full exceptions generated by the handler, and include as tracing metadata. +By default, the `@Tracing` annotation uses `captureMode=ENVIRONMENT_VAR`, which means it will only record method responses and exceptions if you set +the environment variables `POWERTOOLS_TRACER_CAPTURE_RESPONSE` and `POWERTOOLS_TRACER_CAPTURE_ERROR` to `true`. You can override this behavior by +specifying a different `captureMode` to always record response, exception, both, or neither. -By default, this annotation will automatically record method responses and exceptions. You can change the default behavior by setting -the environment variables `POWERTOOLS_TRACER_CAPTURE_RESPONSE` and `POWERTOOLS_TRACER_CAPTURE_ERROR` as needed. Optionally, you can override behavior by -different supported `captureMode` to record response, exception or both. +!!! note + When using the functional API with `TracingUtils.withSubsegment()`, response and exception capture is not automatic. You can manually add metadata using `TracingUtils.putMetadata()` as needed. -!!! warning "Returning sensitive information from your Lambda handler or functions, where `Tracing` is used?" - You can disable annotation from capturing their responses and exception as tracing metadata with **`captureMode=DISABLED`** - or globally by setting environment variables **`POWERTOOLS_TRACER_CAPTURE_RESPONSE`** and **`POWERTOOLS_TRACER_CAPTURE_ERROR`** to **`false`** +!!! warning "Returning sensitive information from your Lambda handler or functions?" + When using the `@Tracing` annotation, you can disable it from capturing responses and exceptions as tracing metadata with **`captureMode=DISABLED`** + or globally by setting the environment variables **`POWERTOOLS_TRACER_CAPTURE_RESPONSE`** and **`POWERTOOLS_TRACER_CAPTURE_ERROR`** to **`false`**. + When using the functional API, you have full control over what metadata is captured. -=== "Disable on annotation" +=== "@Tracing annotation - Disable on method" ```java hl_lines="3" public class App implements RequestHandler { @@ -183,7 +209,7 @@ different supported `captureMode` to record response, exception or both. } ``` -=== "Disable Globally" +=== "@Tracing annotation - Disable Globally" ```yaml hl_lines="11 12" Resources: @@ -200,6 +226,20 @@ different supported `captureMode` to record response, exception or both. POWERTOOLS_TRACER_CAPTURE_ERROR: false ``` +=== "Functional API" + + ```java hl_lines="6 7 8" + import software.amazon.lambda.powertools.tracing.TracingUtils; + + public class App implements RequestHandler { + + public APIGatewayProxyResponseEvent handleRequest(APIGatewayProxyRequestEvent input, Context context) { + TracingUtils.withSubsegment("businessLogic", subsegment -> { + // With functional API, you control what metadata is captured + }); + } + ``` + ### Annotations & Metadata **Annotations** are key-values associated with traces and indexed by AWS X-Ray. You can use them to filter traces and to @@ -272,32 +312,13 @@ specific fields from received event due to security. } ``` -## Utilities - -Tracing modules comes with certain utility method when you don't want to use annotation for capturing a code block -under a subsegment, or you are doing multithreaded programming. Refer examples below. +## Advanced usage -=== "Functional Api" +### Multi-threaded programming - ```java hl_lines="7 8 9 11 12 13" - import software.amazon.lambda.powertools.tracing.Tracing; - import software.amazon.lambda.powertools.tracing.TracingUtils; - - public class App implements RequestHandler { - - public APIGatewayProxyResponseEvent handleRequest(APIGatewayProxyRequestEvent input, Context context) { - TracingUtils.withSubsegment("loggingResponse", subsegment -> { - // Some business logic - }); - - TracingUtils.withSubsegment("localNamespace", "loggingResponse", subsegment -> { - // Some business logic - }); - } - } - ``` +When working with multiple threads, you need to pass the trace entity to ensure proper trace context propagation. -=== "Multi Threaded Programming" +=== "Multi-threaded example" ```java hl_lines="7 9 10 11" import static software.amazon.lambda.powertools.tracing.TracingUtils.withEntitySubsegment; @@ -317,25 +338,33 @@ under a subsegment, or you are doing multithreaded programming. Refer examples b ## Instrumenting SDK clients and HTTP calls -Powertools for Lambda (Java) cannot intercept SDK clients instantiation to add X-Ray instrumentation. You should make sure to instrument the SDK clients explicitly. Refer details on -[how to instrument SDK client with Xray](https://docs.aws.amazon.com/xray/latest/devguide/xray-sdk-java.html#xray-sdk-java-awssdkclients) -and [outgoing http calls](https://docs.aws.amazon.com/xray/latest/devguide/xray-sdk-java.html#xray-sdk-java-httpclients). For example: +### AWS SDK for Java 2.x -=== "LambdaHandler.java" +Powertools for AWS Lambda (Java) includes the `aws-xray-recorder-sdk-aws-sdk-v2-instrumentor` library, which **automatically instruments all AWS SDK v2 clients** when you add the `powertools-tracing` dependency to your project. This means downstream calls to AWS services are traced without any additional configuration. - ```java hl_lines="1 2 7" - import com.amazonaws.xray.AWSXRay; - import com.amazonaws.xray.handlers.TracingHandler; +If you need more control over which clients are instrumented, you can manually add the `TracingInterceptor` to specific clients: + +=== "Manual instrumentation (optional)" + + ```java hl_lines="1 2 3 8 9 10 11" + import com.amazonaws.xray.interceptors.TracingInterceptor; + import software.amazon.awssdk.core.client.config.ClientOverrideConfiguration; + import software.amazon.awssdk.services.dynamodb.DynamoDbClient; public class LambdaHandler { - private AmazonDynamoDB client = AmazonDynamoDBClientBuilder.standard() - .withRegion(Regions.fromName(System.getenv("AWS_REGION"))) - .withRequestHandlers(new TracingHandler(AWSXRay.getGlobalRecorder())) + private DynamoDbClient client = DynamoDbClient.builder() + .region(Region.US_WEST_2) + .overrideConfiguration(ClientOverrideConfiguration.builder() + .addExecutionInterceptor(new TracingInterceptor()) + .build() + ) .build(); // ... } ``` +For more details, refer to the [AWS X-Ray documentation on tracing AWS SDK calls](https://docs.aws.amazon.com/xray/latest/devguide/xray-sdk-java-awssdkclients.html) and [outgoing HTTP calls](https://docs.aws.amazon.com/xray/latest/devguide/xray-sdk-java-httpclients.html). + ## Testing your code When using `@Tracing` annotation, your Junit test cases needs to be configured to create parent Segment required by [AWS X-Ray SDK for Java](https://docs.aws.amazon.com/xray/latest/devguide/xray-sdk-java.html). @@ -351,7 +380,7 @@ used internally via AWS X-Ray SDK to configure itself properly for lambda runtim === "Maven (pom.xml)" - ```xml hl_lines="4-13" + ```xml ... @@ -370,9 +399,9 @@ used internally via AWS X-Ray SDK to configure itself properly for lambda runtim ``` -=== "Gradle (build.gradle) " +=== "Gradle (build.gradle)" - ```json hl_lines="2-4" + ```json // Configures environment variable to avoid initialization of AWS X-Ray segments for each tests test { environment "LAMBDA_TASK_ROOT", "handler" @@ -418,6 +447,3 @@ Below is an example configuration needed for each test case. // test logic } ``` - - - diff --git a/docs/index.md b/docs/index.md index 9c5c803cb..655c16e03 100644 --- a/docs/index.md +++ b/docs/index.md @@ -26,6 +26,7 @@ This project separates core utilities that will be available in other runtimes v ## Install + -**Manual installation** Powertools for AWS Lambda (Java) dependencies are available in Maven Central. You can use your favourite dependency management tool to install it * [Maven](https://maven.apache.org/) @@ -90,7 +91,7 @@ Powertools for AWS Lambda (Java) dependencies are available in Maven Central. Yo software.amazon.lambda - powertools-logging + powertools-logging-log4j {{ powertools.version }} @@ -107,7 +108,8 @@ Powertools for AWS Lambda (Java) dependencies are available in Maven Central. Yo ... ... - + + ... @@ -175,7 +177,8 @@ Powertools for AWS Lambda (Java) dependencies are available in Maven Central. Yo } dependencies { - aspect 'software.amazon.lambda:powertools-logging:{{ powertools.version }}' + // Note: This AspectJ configuration is not needed when using the functional approach + aspect 'software.amazon.lambda:powertools-logging-log4j:{{ powertools.version }}' aspect 'software.amazon.lambda:powertools-tracing:{{ powertools.version }}' aspect 'software.amazon.lambda:powertools-metrics:{{ powertools.version }}' } @@ -184,28 +187,15 @@ Powertools for AWS Lambda (Java) dependencies are available in Maven Central. Yo targetCompatibility = 11 ``` -???+ tip "Why a different configuration?" - Powertools for AWS Lambda (Java) is using [AspectJ](https://eclipse.dev/aspectj/doc/released/progguide/starting.html) internally - to handle annotations. Recently, in order to support Java 17 we had to move to `dev.aspectj:aspectj-maven-plugin` because - `org.codehaus.mojo:aspectj-maven-plugin` does not support Java 17. - Under the hood, `org.codehaus.mojo:aspectj-maven-plugin` is based on AspectJ 1.9.7, - while `dev.aspectj:aspectj-maven-plugin` is based on AspectJ 1.9.8, compiled for Java 11+. +???+ tip "Don't want to use AspectJ?" + Powertools for AWS Lambda (Java) now provides a functional API that doesn't require AspectJ configuration. Learn more about the [functional approach](./usage-patterns.md#functional-approach). ### Java Compatibility -Powertools for AWS Lambda (Java) supports all Java version from 11 up to 21 as well as the -[corresponding Lambda runtimes](https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html). +Powertools for AWS Lambda (Java) supports all Java versions from 11 to 25 in line with the [corresponding Lambda runtimes](https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html). -For the following modules, Powertools for AWS Lambda (Java) leverages the **aspectj** library to provide annotations: -- Logging -- Metrics -- Tracing -- Parameters -- Idempotency -- Validation -- Large messages +In addition to the functional approach, [Logging](./core/logging.md), [Metrics](./core/metrics.md), [Tracing](./core/tracing.md), [Parameters](./utilities/parameters.md), [Idempotency](./utilities/idempotency.md), [Validation](./utilities/validation.md), and [Large Messages](./utilities/large_messages.md) utilities support annotations using AspectJ, which require configuration of the `aspectjrt` runtime library. - -You may need to add the good version of `aspectjrt` to your dependencies based on the jdk used for building your function: +You may need to add the appropriate version of `aspectjrt` to your dependencies based on the JDK used for building your function: ```xml @@ -215,17 +205,18 @@ You may need to add the good version of `aspectjrt` to your dependencies based o ``` -Use the following [dependency matrix](https://github.com/eclipse-aspectj/aspectj/blob/master/docs/dist/doc/JavaVersionCompatibility.md) between this library and the JDK: +Use the following [dependency matrix](https://github.com/eclipse-aspectj/aspectj/blob/master/docs/release/JavaVersionCompatibility.adoc) to understand which AspectJ version to use based on your JDK version: | JDK version | aspectj version | |-------------|------------------------| | `11-17` | `1.9.20.1` (or higher) | | `21` | `1.9.21` (or higher) | +| `25` | `1.9.25` (or higher) | ## Environment variables !!! info - **Explicit parameters take precedence over environment variables.** + Explicit parameters take precedence over environment variables. | Environment variable | Description | Utility | | -------------------------------------- | -------------------------------------------------------------------------------------- | ------------------------- | diff --git a/docs/processes/maintainers.md b/docs/processes/maintainers.md index 8f7f6a8fd..f2839c532 100644 --- a/docs/processes/maintainers.md +++ b/docs/processes/maintainers.md @@ -17,7 +17,6 @@ This is document explains who the maintainers are, their responsibilities, and h | Maintainer | GitHub ID | Affiliation | | --------------- | -------------------------------------------------------------------- | ----------- | | Philipp Page | [phipag](https://github.com/phipag){target="\_blank" rel="nofollow"} | Amazon | -| Simon Thulbourn | [sthulb](https://github.com/sthulb){target="\_blank" rel="nofollow"} | Amazon | ## Emeritus @@ -25,6 +24,7 @@ Previous active maintainers who contributed to this project. | Maintainer | GitHub ID | Affiliation | | --------------------- | -------------------------------------------------------------------------------------- | ------------- | +| Simon Thulbourn | [sthulb](https://github.com/sthulb){target="\_blank" rel="nofollow"} | Former Amazon | | Jerome Van Der Linden | [jeromevdl](https://github.com/jeromevdl){target="\_blank" rel="nofollow"} | Amazon | | Michele Ricciardi | [mriccia](https://github.com/mriccia){target="\_blank" rel="nofollow"} | Amazon | | Scott Gerring | [scottgerring](https://github.com/scottgerring){target="\_blank" rel="nofollow"} | DataDog | diff --git a/docs/usage-patterns.md b/docs/usage-patterns.md new file mode 100644 index 000000000..e66538937 --- /dev/null +++ b/docs/usage-patterns.md @@ -0,0 +1,183 @@ +--- +title: Usage patterns +description: Getting to know the Powertools for AWS Lambda toolkit +--- + + + +Powertools for AWS Lambda (Java) is a collection of utilities designed to help you build serverless applications on AWS. + +The toolkit is modular, so you can pick and choose the utilities you need for your application, but also combine them for a complete solution for your serverless applications. + +## Patterns + +Many of the utilities provided can be used with different patterns, depending on your preferences and the structure of your code. + +### AspectJ Annotation + +If you prefer using annotations to apply cross-cutting concerns to your Lambda handlers, the AspectJ annotation pattern is a good fit. This approach lets you decorate methods with Powertools utilities using annotations, applying their functionality with minimal code changes. + +This pattern works well when you want to keep your business logic clean and separate concerns using aspect-oriented programming. + + +!!! note + This approach requires configuring AspectJ compile-time weaving in your build tool (Maven or Gradle). See the [installation guide](./index.md#install) for setup instructions. + +=== "Logging" + + ```java + import com.amazonaws.services.lambda.runtime.Context; + import com.amazonaws.services.lambda.runtime.RequestHandler; + import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent; + import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyResponseEvent; + import org.slf4j.Logger; + import org.slf4j.LoggerFactory; + import software.amazon.lambda.powertools.logging.CorrelationIdPaths; + import software.amazon.lambda.powertools.logging.Logging; + + public class App implements RequestHandler { + private static final Logger log = LoggerFactory.getLogger(App.class); + + @Logging(logEvent = true, correlationIdPath = CorrelationIdPaths.API_GATEWAY_REST) + public APIGatewayProxyResponseEvent handleRequest(APIGatewayProxyRequestEvent input, Context context) { + log.info("Processing request"); + return new APIGatewayProxyResponseEvent().withStatusCode(200).withBody("Success"); + } + } + ``` + +=== "Metrics" + + ```java + import com.amazonaws.services.lambda.runtime.Context; + import com.amazonaws.services.lambda.runtime.RequestHandler; + import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent; + import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyResponseEvent; + import software.amazon.lambda.powertools.metrics.FlushMetrics; + import software.amazon.lambda.powertools.metrics.Metrics; + import software.amazon.lambda.powertools.metrics.MetricsFactory; + import software.amazon.lambda.powertools.metrics.model.MetricUnit; + + public class App implements RequestHandler { + private static final Metrics metrics = MetricsFactory.getMetricsInstance(); + + @FlushMetrics(namespace = "ServerlessApp", service = "payment") + public APIGatewayProxyResponseEvent handleRequest(APIGatewayProxyRequestEvent input, Context context) { + metrics.addMetric("SuccessfulBooking", 1, MetricUnit.COUNT); + return new APIGatewayProxyResponseEvent().withStatusCode(200).withBody("Success"); + } + } + ``` + +=== "Tracing" + + ```java + import com.amazonaws.services.lambda.runtime.Context; + import com.amazonaws.services.lambda.runtime.RequestHandler; + import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent; + import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyResponseEvent; + import software.amazon.lambda.powertools.tracing.Tracing; + import software.amazon.lambda.powertools.tracing.TracingUtils; + + public class App implements RequestHandler { + + @Tracing + public APIGatewayProxyResponseEvent handleRequest(APIGatewayProxyRequestEvent input, Context context) { + TracingUtils.putAnnotation("operation", "payment"); + return processPayment(); + } + + @Tracing + private APIGatewayProxyResponseEvent processPayment() { + return new APIGatewayProxyResponseEvent().withStatusCode(200).withBody("Success"); + } + } + ``` + +### Functional Approach + +If you prefer a more functional programming style or want to avoid AspectJ configuration, you can use the Powertools for AWS Lambda (Java) utilities directly in your code. This approach is more explicit and provides full control over how the utilities are applied. + +This pattern is ideal when you want to avoid AspectJ setup or prefer a more imperative style. It also eliminates the AspectJ runtime dependency, making your deployment package more lightweight. + +=== "Logging" + + ```java + import com.amazonaws.services.lambda.runtime.Context; + import com.amazonaws.services.lambda.runtime.RequestHandler; + import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent; + import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyResponseEvent; + import org.slf4j.Logger; + import org.slf4j.LoggerFactory; + import software.amazon.lambda.powertools.logging.CorrelationIdPaths; + import software.amazon.lambda.powertools.logging.PowertoolsLogging; + + public class App implements RequestHandler { + private static final Logger log = LoggerFactory.getLogger(App.class); + + public APIGatewayProxyResponseEvent handleRequest(APIGatewayProxyRequestEvent input, Context context) { + return PowertoolsLogging.withLogging( + context, + 0.7, + CorrelationIdPaths.API_GATEWAY_REST, + input, + () -> processRequest(input)); + } + + private APIGatewayProxyResponseEvent processRequest(APIGatewayProxyRequestEvent input) { + // do something with input + log.info("Processing request"); + return new APIGatewayProxyResponseEvent().withStatusCode(200).withBody("Success"); + } + } + ``` + +=== "Metrics" + + ```java + import com.amazonaws.services.lambda.runtime.Context; + import com.amazonaws.services.lambda.runtime.RequestHandler; + import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent; + import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyResponseEvent; + import software.amazon.lambda.powertools.metrics.Metrics; + import software.amazon.lambda.powertools.metrics.MetricsFactory; + import software.amazon.lambda.powertools.metrics.model.MetricUnit; + + public class App implements RequestHandler { + private static final Metrics metrics = MetricsFactory.getMetricsInstance(); + + public APIGatewayProxyResponseEvent handleRequest(APIGatewayProxyRequestEvent input, Context context) { + try { + metrics.addMetric("SuccessfulBooking", 1, MetricUnit.COUNT); + return new APIGatewayProxyResponseEvent().withStatusCode(200).withBody("Success"); + } finally { + metrics.flush(); + } + } + } + ``` + +=== "Tracing" + + ```java + import com.amazonaws.services.lambda.runtime.Context; + import com.amazonaws.services.lambda.runtime.RequestHandler; + import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent; + import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyResponseEvent; + import software.amazon.lambda.powertools.tracing.TracingUtils; + + public class App implements RequestHandler { + + public APIGatewayProxyResponseEvent handleRequest(APIGatewayProxyRequestEvent input, Context context) { + TracingUtils.withSubsegment("processPayment", subsegment -> { + subsegment.putAnnotation("operation", "payment"); + // Business logic here + }); + return new APIGatewayProxyResponseEvent().withStatusCode(200).withBody("Success"); + } + } + ``` + + +!!! note + The functional approach is available for all utilities. Further examples and detailed usage can be found in the individual documentation pages for each utility. diff --git a/docs/utilities/idempotency.md b/docs/utilities/idempotency.md index 83f256e6b..cecc65d7b 100644 --- a/docs/utilities/idempotency.md +++ b/docs/utilities/idempotency.md @@ -29,7 +29,7 @@ times with the same parameters**. This makes idempotent operations safe to retry === "Maven" - ```xml hl_lines="3-7 16 18 24-27" + ```xml hl_lines="3-7 16 18 25-28" ... @@ -41,6 +41,7 @@ times with the same parameters**. This makes idempotent operations safe to retry ... + ... @@ -82,10 +83,10 @@ times with the same parameters**. This makes idempotent operations safe to retry === "Gradle" - ```groovy hl_lines="3 11" + ```groovy hl_lines="3 11 12" plugins { id 'java' - id 'io.freefair.aspectj.post-compile-weaving' version '8.1.0' + id 'io.freefair.aspectj.post-compile-weaving' version '8.1.0' // Not needed when using the functional approach } repositories { @@ -93,7 +94,8 @@ times with the same parameters**. This makes idempotent operations safe to retry } dependencies { - aspect 'software.amazon.lambda:powertools-idempotency-dynamodb:{{ powertools.version }}' + aspect 'software.amazon.lambda:powertools-idempotency-core:{{ powertools.version }}' // Not needed when using the functional approach + implementation 'software.amazon.lambda:powertools-idempotency-dynamodb:{{ powertools.version }}' } sourceCompatibility = 11 // or higher @@ -104,7 +106,7 @@ times with the same parameters**. This makes idempotent operations safe to retry Before getting started, you need to create a persistent storage layer where the idempotency utility can store its state - your Lambda functions will need read and write access to it. -As of now, Amazon DynamoDB is the only supported persistent storage layer, so you'll need to create a table first. +As of now, Amazon DynamoDB is the only supported persistent storage layer, so you'll need to create a table first or [bring your own persistence store](#bring-your-own-persistent-store). **Default table configuration** @@ -148,29 +150,29 @@ Resources: ``` !!! warning "Warning: Large responses with DynamoDB persistence layer" - When using this utility with DynamoDB, your function's responses must be [smaller than 400KB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Limits.html#limits-items). + When using this utility with DynamoDB, your function's responses must be [smaller than 400KB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Constraints.html#limits-items). Larger items cannot be written to DynamoDB and will cause exceptions. !!! info "Info: DynamoDB" - Each function invocation will generally make 2 requests to DynamoDB. If the - result returned by your Lambda is less than 1kb, you can expect 2 WCUs per invocation. For retried invocations, you will - see 1WCU and 1RCU. Review the [DynamoDB pricing documentation](https://aws.amazon.com/dynamodb/pricing/) to + Each function invocation will generally make 1 request to DynamoDB. If the + result returned by your Lambda is less than 1kb, you can expect 1 WCUs per invocation. For retried invocations, you will + see 1 WCU. In some cases, the utility might make 2 requests to DynamoDB in which case you will see 1 RCU and 1 WCU. Review the [DynamoDB pricing documentation](https://aws.amazon.com/dynamodb/pricing/) to estimate the cost. -### Idempotent annotation +### Basic usage -You can quickly start by initializing the `DynamoDBPersistenceStore` and using it with the `@Idempotent` annotation on your Lambda handler. +You can use Powertools for AWS Lambda Idempotency with either the `@Idempotent` annotation or the functional API. !!! warning "Important" Initialization and configuration of the `DynamoDBPersistenceStore` must be performed outside the handler, preferably in the constructor. -=== "App.java" +=== "@Idempotent annotation" ```java hl_lines="5-9 12 19" public class App implements RequestHandler { public App() { - // we need to initialize idempotency store before the handleRequest method is called + // We need to initialize idempotency store before the handleRequest method is called Idempotency.config().withPersistenceStore( DynamoDBPersistenceStore.builder() .withTableName(System.getenv("TABLE_NAME")) @@ -191,6 +193,33 @@ You can quickly start by initializing the `DynamoDBPersistenceStore` and using i ``` +=== "Functional API" + + ```java hl_lines="5-9 13-14" + public class App implements RequestHandler { + + public App() { + // We need to initialize idempotency store before the handleRequest method is called + Idempotency.config().withPersistenceStore( + DynamoDBPersistenceStore.builder() + .withTableName(System.getenv("TABLE_NAME")) + .build() + ).configure(); + } + + public SubscriptionResult handleRequest(final Subscription event, final Context context) { + Idempotency.registerLambdaContext(context); + return Idempotency.makeIdempotent(this::processSubscription, event, SubscriptionResult.class); + } + + private SubscriptionResult processSubscription(Subscription event) { + SubscriptionPayment payment = createSubscriptionPayment(event.getUsername(), event.getProductId()); + return new SubscriptionResult(payment.getId(), "success", 200); + } + } + + ``` + === "Example event" ```json @@ -200,25 +229,32 @@ You can quickly start by initializing the `DynamoDBPersistenceStore` and using i } ``` -#### Idempotent annotation on another method +#### Making non-handler methods idempotent -You can use the `@Idempotent` annotation for any synchronous Java function, not only the `handleRequest` one. +You can make any synchronous Java function idempotent, not only the `handleRequest` handler. -When using `@Idempotent` annotation on another method, you must tell which parameter in the method signature has the data we should use: +**With the `@Idempotent` annotation**, you must specify which parameter contains the idempotency key: - If the method only has one parameter, it will be used by default. - If there are 2 or more parameters, you must set the `@IdempotencyKey` on the parameter to use. +**With the functional API**, you explicitly pass the idempotency key: + + - For single-parameter methods, use `Idempotency.makeIdempotent(this::method, param, ReturnType.class)` + - For multi-parameter methods, use `Idempotency.makeIdempotent(idempotencyKey, () -> method(param1, param2), ReturnType.class)` + !!! info "The parameter must be serializable in JSON. We use Jackson internally to (de)serialize objects" -=== "AppSqsEvent.java" +=== "@Idempotent annotation" This example also demonstrates how you can integrate with [Batch utility](batch.md), so you can process each record in an idempotent manner. - ```java hl_lines="19 23-25 30-31" - public class AppSqsEvent implements RequestHandler { + ```java hl_lines="6-15 17-19 27-28" + public class SqsBatchHandler implements RequestHandler { + + private final BatchMessageHandler handler; - public AppSqsEvent() { + public SqsBatchHandler() { Idempotency.config() .withPersistenceStore( DynamoDBPersistenceStore.builder() @@ -226,31 +262,66 @@ When using `@Idempotent` annotation on another method, you must tell which param .build() ).withConfig( IdempotencyConfig.builder() - .withEventKeyJMESPath("messageId") // see Choosing a payload subset section + .withEventKeyJMESPath("messageId") .build() ).configure(); - } + + handler = new BatchMessageHandlerBuilder() + .withSqsBatchHandler() + .buildWithRawMessageHandler(this::processMessage); + } @Override - @SqsBatch(SampleMessageHandler.class) - public String handleRequest(SQSEvent input, Context context) { - dummy("hello", "world"); - return "{\"statusCode\": 200}"; + public SQSBatchResponse handleRequest(SQSEvent sqsEvent, Context context) { + return handler.processBatch(sqsEvent, context); } @Idempotent - private String dummy(String argOne, @IdempotencyKey String argTwo) { - return "something"; + private void processMessage(@IdempotencyKey SQSEvent.SQSMessage message) { + // Process message } + } + ``` + +=== "Functional API" + + This example also demonstrates how you can integrate with the [Batch utility](batch.md), so you can process each record in an idempotent manner. **Note: The JMESPath function still applies even when passing the idempotency key manually.** + + ```java hl_lines="6-15 17-19 24 29" + public class SqsBatchHandler implements RequestHandler { - public static class SampleMessageHandler implements SqsMessageHandler { - @Override - @Idempotent - // no need to use @IdempotencyKey as there is only one parameter - public String process(SQSMessage message) { - String returnVal = doSomething(message.getBody()); - return returnVal; - } + private final BatchMessageHandler handler; + + public SqsBatchHandler() { + Idempotency.config() + .withPersistenceStore( + DynamoDBPersistenceStore.builder() + .withTableName(System.getenv("TABLE_NAME")) + .build() + ).withConfig( + IdempotencyConfig.builder() + .withEventKeyJMESPath("messageId") + .build() + ).configure(); + + handler = new BatchMessageHandlerBuilder() + .withSqsBatchHandler() + .buildWithRawMessageHandler(this::processMessage); + } + + @Override + public SQSBatchResponse handleRequest(SQSEvent sqsEvent, Context context) { + Idempotency.registerLambdaContext(context); + return handler.processBatch(sqsEvent, context); + } + + private void processMessage(SQSEvent.SQSMessage message) { + Idempotency.makeIdempotent(this::handleMessage, message, Void.class); + } + + private Void handleMessage(SQSEvent.SQSMessage message) { + // Process message + return null; } } ``` @@ -304,9 +375,9 @@ Imagine the function executes successfully, but the client never receives the re To alter this behaviour, you can use the [JMESPath built-in function](serialization.md#jmespath-functions) `powertools_json()` to treat the payload as a JSON object rather than a string. -=== "PaymentFunction.java" +=== "@Idempotent annotation" - ```java hl_lines="5-7 16 29-31" + ```java hl_lines="7 16" public class PaymentFunction implements RequestHandler { public PaymentFunction() { @@ -344,6 +415,50 @@ Imagine the function executes successfully, but the client never receives the re } ``` +=== "Functional API" + + ```java hl_lines="7 17-18" + public class PaymentFunction implements RequestHandler { + + public PaymentFunction() { + Idempotency.config() + .withConfig( + IdempotencyConfig.builder() + .withEventKeyJMESPath("powertools_json(body)") + .build()) + .withPersistenceStore( + DynamoDBPersistenceStore.builder() + .withTableName(System.getenv("TABLE_NAME")) + .build()) + .configure(); + } + + public APIGatewayProxyResponseEvent handleRequest(final APIGatewayProxyRequestEvent event, final Context context) { + Idempotency.registerLambdaContext(context); + return Idempotency.makeIdempotent(this::processPayment, event, APIGatewayProxyResponseEvent.class); + } + + private APIGatewayProxyResponseEvent processPayment(APIGatewayProxyRequestEvent event) { + APIGatewayProxyResponseEvent response = new APIGatewayProxyResponseEvent(); + + try { + Subscription subscription = JsonConfig.get().getObjectMapper().readValue(event.getBody(), Subscription.class); + + SubscriptionPayment payment = createSubscriptionPayment( + subscription.getUsername(), + subscription.getProductId() + ); + + return response + .withStatusCode(200) + .withBody(String.format("{\"paymentId\":\"%s\"}", payment.getId())); + + } catch (JsonProcessingException e) { + return response.withStatusCode(500); + } + } + ``` + === "Example event" ```json hl_lines="3" @@ -417,46 +532,82 @@ The client was successful in receiving the result after the retry. Since the Lam #### Lambda timeouts -This is automatically done when you annotate your Lambda handler with [@Idempotent annotation](#idempotent-annotation). - To prevent against extended failed retries when a [Lambda function times out](https://aws.amazon.com/premiumsupport/knowledge-center/lambda-verify-invocation-timeouts/), Powertools for AWS Lambda (Java) calculates and includes the remaining invocation available time as part of the idempotency record. !!! example If a second invocation happens **after** this timestamp, and the record is marked as `INPROGRESS`, we will execute the invocation again as if it was in the `EXPIRED` state. This means that if an invocation expired during execution, it will be quickly executed again on the next retry. -!!! important - If you are using the [@Idempotent annotation on another method](#idempotent-annotation-on-another-method) to guard isolated parts of your code, you must use `registerLambdaContext` method available in the `Idempotency` object to benefit from this protection. +**With the `@Idempotent` annotation**, this is automatically done when you annotate your Lambda handler. + +**With the functional API** or when using the `@Idempotent` annotation on methods other than the handler, you must call `Idempotency.registerLambdaContext(context)` to benefit from this protection. +!!! important Here is an example on how you register the Lambda context in your handler: - ```java hl_lines="13-19" title="Registering the Lambda context" - public class PaymentHandler implements RequestHandler> { - - public PaymentHandler() { - Idempotency.config() - .withPersistenceStore( - DynamoDBPersistenceStore.builder() - .withTableName(System.getenv("TABLE_NAME")) - .build()) - .configure(); - } + === "@Idempotent annotation" + + ```java hl_lines="14" title="Registering the Lambda context" + public class PaymentHandler implements RequestHandler> { + + public PaymentHandler() { + Idempotency.config() + .withPersistenceStore( + DynamoDBPersistenceStore.builder() + .withTableName(System.getenv("TABLE_NAME")) + .build()) + .configure(); + } + + @Override + public List handleRequest(SQSEvent sqsEvent, Context context) { + Idempotency.registerLambdaContext(context); + return sqsEvent.getRecords().stream().map(record -> process(record.getMessageId(), record.getBody())).collect(Collectors.toList()); + } + + @Idempotent + private String process(String messageId, @IdempotencyKey String messageBody) { + logger.info("Processing messageId: {}", messageId); + PaymentRequest request = extractDataFrom(messageBody).as(PaymentRequest.class); + return paymentService.process(request); + } - @Override - public List handleRequest(SQSEvent sqsEvent, Context context) { - Idempotency.registerLambdaContext(context); - return sqsEvent.getRecords().stream().map(record -> process(record.getMessageId(), record.getBody())).collect(Collectors.toList()); } - - @Idempotent - private String process(String messageId, @IdempotencyKey String messageBody) { - logger.info("Processing messageId: {}", messageId); - PaymentRequest request = extractDataFrom(messageBody).as(PaymentRequest.class); - return paymentService.process(request); + ``` + + === "Functional API" + + ```java hl_lines="14" title="Registering the Lambda context" + public class PaymentHandler implements RequestHandler> { + + public PaymentHandler() { + Idempotency.config() + .withPersistenceStore( + DynamoDBPersistenceStore.builder() + .withTableName(System.getenv("TABLE_NAME")) + .build()) + .configure(); + } + + @Override + public List handleRequest(SQSEvent sqsEvent, Context context) { + Idempotency.registerLambdaContext(context); + return sqsEvent.getRecords().stream() + .map(record -> Idempotency.makeIdempotent( + record.getBody(), + () -> process(record.getMessageId(), record.getBody()), + String.class)) + .collect(Collectors.toList()); + } + + private String process(String messageId, String messageBody) { + logger.info("Processing messageId: {}", messageId); + PaymentRequest request = extractDataFrom(messageBody).as(PaymentRequest.class); + return paymentService.process(request); + } + } - - } - ``` + ``` #### Lambda timeout sequence diagram @@ -499,9 +650,11 @@ sequenceDiagram ### Handling exceptions -If you are using the `@Idempotent` annotation on your Lambda handler or any other method, any unhandled exceptions that are thrown during the code execution will cause **the record in the persistence layer to be deleted**. +**With the `@Idempotent` annotation**, any unhandled exceptions that are thrown during the code execution will cause **the record in the persistence layer to be deleted**. This means that new invocations will execute your code again despite having the same payload. If you don't want the record to be deleted, you need to catch exceptions within the idempotent function and return a successful response. +**With the functional API**, exceptions are handled the same way - unhandled exceptions will cause the record to be deleted. You should catch and handle exceptions within your idempotent function if you want to preserve the record. +
```mermaid sequenceDiagram @@ -553,7 +706,7 @@ If an Exception is raised _outside_ the scope of a decorated method and after yo This persistence store is built-in, and you can either use an existing DynamoDB table or create a new one dedicated for idempotency state (recommended). Use the builder to customize the table structure: -```java hl_lines="3-7" title="Customizing DynamoDBPersistenceStore to suit your table structure" +```java hl_lines="2-7" title="Customizing DynamoDBPersistenceStore to suit your table structure" DynamoDBPersistenceStore.builder() .withTableName(System.getenv("TABLE_NAME")) .withKeyAttr("idempotency_key") @@ -579,11 +732,68 @@ When using DynamoDB as a persistence layer, you can alter the attribute names by ## Advanced +### Using explicit function names + +When using the functional API, if you need to call different methods with the same payload as the idempotency key, you must provide explicit function names to differentiate between them. This ensures each function has its own idempotency scope. + +=== "Functional API with explicit names" + + ```java hl_lines="5-9 11-15" + public Response handleRequest(Order order, Context context) { + Idempotency.registerLambdaContext(context); + + // Same orderId, different operations - need explicit function names + Idempotency.makeIdempotent( + "processPayment", + order.getId(), + () -> processPayment(order), + PaymentResult.class); + + Idempotency.makeIdempotent( + "sendConfirmation", + order.getId(), + () -> sendEmail(order), + EmailResult.class); + + return new Response("success"); + } + ``` + +!!! note + When using the `@Idempotent` annotation, the function name is automatically inferred from the method name, so this is not needed. + +### Generic return types support + +The functional API supports making methods with generic return types idempotent using Jackson's `TypeReference`. This is not possible with the `@Idempotent` annotation due to type erasure. + +=== "Functional API with TypeReference" + + ```java hl_lines="1 6-10" + import com.fasterxml.jackson.core.type.TypeReference; + + public Map handleRequest(Product input, Context context) { + Idempotency.registerLambdaContext(context); + + return Idempotency.makeIdempotent( + this::processProduct, + input, + new TypeReference>() {} + ); + } + + private Map processProduct(Product product) { + // business logic returning generic type + Map result = new HashMap<>(); + // ... + return result; + } + ``` + ### Customizing the default behavior Idempotency behavior can be further configured with **`IdempotencyConfig`** using a builder: -```java hl_lines="2-8" title="Customizing IdempotencyConfig" +```java hl_lines="2-9" title="Customizing IdempotencyConfig" IdempotencyConfig.builder() .withEventKeyJMESPath("id") .withPayloadValidationJMESPath("paymentId") @@ -667,7 +877,7 @@ By default, we will return the same result as it returned before, however in thi With **`PayloadValidationJMESPath`**, you can provide an additional JMESPath expression to specify which part of the event body should be validated against previous idempotent invocations -=== "App.java" +=== "@Idempotent annotation" ```java hl_lines="8 13 20 26" public App() { @@ -700,6 +910,43 @@ With **`PayloadValidationJMESPath`**, you can provide an additional JMESPath exp } ``` +=== "Functional API" + + ```java hl_lines="8 14-15 24 30" + public App() { + Idempotency.config() + .withPersistenceStore(DynamoDBPersistenceStore.builder() + .withTableName(System.getenv("TABLE_NAME")) + .build()) + .withConfig(IdempotencyConfig.builder() + .withEventKeyJMESPath("[userDetail, productId]") + .withPayloadValidationJMESPath("amount") + .build()) + .configure(); + } + + public SubscriptionResult handleRequest(final Subscription input, final Context context) { + Idempotency.registerLambdaContext(context); + return Idempotency.makeIdempotent(this::processSubscription, input, SubscriptionResult.class); + } + + private SubscriptionResult processSubscription(Subscription input) { + // Creating a subscription payment is a side + // effect of calling this function! + SubscriptionPayment payment = createSubscriptionPayment( + input.getUserDetail().getUsername(), + input.getProductId(), + input.getAmount() + ) + // ... + return new SubscriptionResult( + "success", 200, + payment.getId(), + payment.getAmount() + ); + } + ``` + === "Example Event 1" ```json hl_lines="8" @@ -745,9 +992,9 @@ This means that we will throw **`IdempotencyKeyException`** if the evaluation of When set to `false` (the default), if the idempotency key is null, then the data is not persisted in the store. -=== "App.java" +=== "@Idempotent annotation" - ```java hl_lines="9-10 13" + ```java hl_lines="9" public App() { Idempotency.config() .withPersistenceStore(DynamoDBPersistenceStore.builder() @@ -767,6 +1014,32 @@ When set to `false` (the default), if the idempotency key is null, then the data } ``` +=== "Functional API" + + ```java hl_lines="9" + public App() { + Idempotency.config() + .withPersistenceStore(DynamoDBPersistenceStore.builder() + .withTableName(System.getenv("TABLE_NAME")) + .build()) + .withConfig(IdempotencyConfig.builder() + // Requires "user"."uid" and "orderId" to be present + .withEventKeyJMESPath("[user.uid, orderId]") + .withThrowOnNoIdempotencyKey(true) + .build()) + .configure(); + } + + public OrderResult handleRequest(final Order input, final Context context) { + Idempotency.registerLambdaContext(context); + return Idempotency.makeIdempotent(this::processOrder, input, OrderResult.class); + } + + private OrderResult processOrder(Order input) { + // ... + } + ``` + === "Success Event" ```json hl_lines="3 6" @@ -977,7 +1250,7 @@ To unit test your function with DynamoDB Local, you can refer to this guide to [ === "pom.xml" - ```xml hl_lines="4-6 24-26 28-31 42 45-47" + ```xml @@ -1046,7 +1319,7 @@ To unit test your function with DynamoDB Local, you can refer to this guide to [ === "AppTest.java" - ```java hl_lines="13-18 24-30 34" + ```java public class AppTest { @Mock private Context context; @@ -1143,7 +1416,7 @@ To unit test your function with DynamoDB Local, you can refer to this guide to [ === "App.java" - ```java hl_lines="8 9 16" + ```java public class App implements RequestHandler { public App() { @@ -1174,7 +1447,7 @@ To unit test your function with DynamoDB Local, you can refer to this guide to [ === "shell" - ```shell hl_lines="2 6 7 12 16 21 22" + ```shell # use or create a docker network docker network inspect sam-local || docker network create sam-local @@ -1201,7 +1474,7 @@ To unit test your function with DynamoDB Local, you can refer to this guide to [ === "env.json" - ```json hl_lines="3" + ```json { "IdempotentFunction": { "TABLE_NAME": "idempotency" diff --git a/docs/utilities/large_messages.md b/docs/utilities/large_messages.md index 38228afe9..9d14c8228 100644 --- a/docs/utilities/large_messages.md +++ b/docs/utilities/large_messages.md @@ -4,7 +4,7 @@ description: Utility --- The large message utility handles SQS and SNS messages which have had their payloads -offloaded to S3 if they are larger than the maximum allowed size (256 KB). +offloaded to S3 if they are larger than the maximum allowed size (1 MB). ## Features @@ -27,12 +27,12 @@ stateDiagram-v2 sendMsg --> extendLib state extendLib { state if_big <> - bigMsg: MessageBody > 256KB ? + bigMsg: MessageBody > 1MB ? putObject: putObject(S3Bucket, S3Key, Body) updateMsg: Update MessageBody
with a pointer to S3
and add a message attribute bigMsg --> if_big - if_big --> [*]: size(body) <= 256kb - if_big --> putObject: size(body) > 256kb + if_big --> [*]: size(body) <= 1MB + if_big --> putObject: size(body) > 1MB putObject --> updateMsg updateMsg --> [*] } @@ -72,7 +72,7 @@ stateDiagram-v2 ``` -SQS and SNS message payload is limited to 256KB. If you wish to send messages with a larger payload, you can leverage the +SQS and SNS message payload is limited to 1MB. If you wish to send messages with a larger payload, you can leverage the [amazon-sqs-java-extended-client-lib](https://github.com/awslabs/amazon-sqs-java-extended-client-lib) or [amazon-sns-java-extended-client-lib](https://github.com/awslabs/amazon-sns-java-extended-client-lib) which offload the message to Amazon S3. See documentation @@ -87,16 +87,14 @@ extended client libraries. Once a message's payload has been processed successfu utility deletes the payload from S3. This utility is compatible with -versions *[1.1.0+](https://github.com/awslabs/amazon-sqs-java-extended-client-lib/releases/tag/1.1.0)* -of amazon-sqs-java-extended-client-lib -and *[1.0.0+](https://github.com/awslabs/amazon-sns-java-extended-client-lib/releases/tag/1.0.0)* -of amazon-sns-java-extended-client-lib. +versions *[1.1.0+](https://github.com/awslabs/amazon-sqs-java-extended-client-lib/releases/tag/1.1.0)* and *[2.0.0+](https://github.com/awslabs/amazon-sqs-java-extended-client-lib/releases/tag/2.0.0)* +of [amazon-sqs-java-extended-client-lib](https://github.com/awslabs/amazon-sqs-java-extended-client-lib) / [amazon-sns-java-extended-client-lib](https://github.com/awslabs/amazon-sns-java-extended-client-lib). ## Install === "Maven" - ```xml hl_lines="3-7 16 18 24-27" + ```xml hl_lines="3-7 25-28" ... @@ -108,6 +106,7 @@ of amazon-sns-java-extended-client-lib. ... + ... @@ -152,7 +151,7 @@ of amazon-sns-java-extended-client-lib. ```groovy hl_lines="3 11" plugins { id 'java' - id 'io.freefair.aspectj.post-compile-weaving' version '8.1.0' + id 'io.freefair.aspectj.post-compile-weaving' version '8.1.0' // Not needed when using the functional approach } repositories { @@ -160,7 +159,7 @@ of amazon-sns-java-extended-client-lib. } dependencies { - aspect 'software.amazon.lambda:powertools-large-messages:{{ powertools.version }}' + aspect 'software.amazon.lambda:powertools-large-messages:{{ powertools.version }}' // Use 'implementation' instead of 'aspect' when using the functional approach } sourceCompatibility = 11 // or higher @@ -175,14 +174,20 @@ on the S3 bucket used for the large messages offloading: - `s3:GetObject` - `s3:DeleteObject` -## Annotation +## Usage -The annotation `@LargeMessage` can be used on any method where the *first* parameter is one of: +You can use the Large Messages utility with either the `@LargeMessage` annotation or the functional API. + +The `@LargeMessage` annotation can be used on any method where the *first* parameter is one of: - `SQSEvent.SQSMessage` - `SNSEvent.SNSRecord` -=== "SQS Example" +The functional API `LargeMessages.processLargeMessage()` accepts the same message types. + +### Basic usage + +=== "@LargeMessage annotation - SQS" ```java hl_lines="8 13 15" import software.amazon.lambda.powertools.largemessages.LargeMessage; @@ -204,7 +209,28 @@ The annotation `@LargeMessage` can be used on any method where the *first* param } ``` -=== "SNS Example" +=== "Functional API - SQS" + + ```java hl_lines="1 8" + import software.amazon.lambda.powertools.largemessages.LargeMessages; + + public class SqsMessageHandler implements RequestHandler { + + @Override + public SQSBatchResponse handleRequest(SQSEvent event, Context context) { + for (SQSMessage message: event.getRecords()) { + LargeMessages.processLargeMessage(message, this::processRawMessage); + } + return SQSBatchResponse.builder().build(); + } + + private void processRawMessage(SQSEvent.SQSMessage sqsMessage) { + // sqsMessage.getBody() will contain the content of the S3 object + } + } + ``` + +=== "@LargeMessage annotation - SNS" ```java hl_lines="7 11 13" import software.amazon.lambda.powertools.largemessages.LargeMessage; @@ -224,6 +250,25 @@ The annotation `@LargeMessage` can be used on any method where the *first* param } ``` +=== "Functional API - SNS" + + ```java hl_lines="1 7" + import software.amazon.lambda.powertools.largemessages.LargeMessages; + + public class SnsRecordHandler implements RequestHandler { + + @Override + public String handleRequest(SNSEvent event, Context context) { + return LargeMessages.processLargeMessage(event.records.get(0), this::processSNSRecord); + } + + private String processSNSRecord(SNSEvent.SNSRecord snsRecord) { + // snsRecord.getSNS().getMessage() will contain the content of the S3 object + return "Hello World"; + } + } + ``` + When the Lambda function is invoked with a SQS or SNS event, the utility first checks if the content was offloaded to S3. In the case of a large message, there is a message attribute specifying the size of the offloaded message and the message contains a pointer to the S3 object. @@ -233,9 +278,9 @@ and place the content of the object in the message payload. You can then directl If there was an error during the S3 download, the function will fail with a `LargeMessageProcessingException`. After your code is invoked and returns without error, the object is deleted from S3 -using the `deleteObject(bucket, key)` API. You can disable the deletion of S3 objects with the following configuration: +using the `deleteObject(bucket, key)` API. You can disable the deletion of S3 objects: -=== "Don't delete S3 Objects" +=== "@LargeMessage annotation" ```java @LargeMessage(deleteS3Object = false) private void processRawMessage(SQSEvent.SQSMessage sqsMessage) { @@ -243,71 +288,143 @@ using the `deleteObject(bucket, key)` API. You can disable the deletion of S3 ob } ``` +=== "Functional API" + ```java + LargeMessages.processLargeMessage(message, this::processRawMessage, false); + ``` + !!! tip "Use together with batch module" This utility works perfectly together with the batch module (`powertools-batch`), especially for SQS: - ```java hl_lines="2 5-7 12 15 16" title="Combining batch and large message modules" - public class SqsBatchHandler implements RequestHandler { - private final BatchMessageHandler handler; - - public SqsBatchHandler() { - handler = new BatchMessageHandlerBuilder() - .withSqsBatchHandler() - .buildWithRawMessageHandler(this::processMessage); - } + === "@LargeMessage annotation" + ```java hl_lines="2 5-7 12 15 16" title="Combining batch and large message modules" + public class SqsBatchHandler implements RequestHandler { + private final BatchMessageHandler handler; + + public SqsBatchHandler() { + handler = new BatchMessageHandlerBuilder() + .withSqsBatchHandler() + .buildWithRawMessageHandler(this::processMessage); + } - @Override - public SQSBatchResponse handleRequest(SQSEvent sqsEvent, Context context) { - return handler.processBatch(sqsEvent, context); + @Override + public SQSBatchResponse handleRequest(SQSEvent sqsEvent, Context context) { + return handler.processBatch(sqsEvent, context); + } + + @LargeMessage + private void processMessage(SQSEvent.SQSMessage sqsMessage) { + // do something with the message + } } + ``` - @LargeMessage - private void processMessage(SQSEvent.SQSMessage sqsMessage) { - // do something with the message + === "Functional API" + ```java hl_lines="7-9 14 18" title="Combining batch and large message modules" + import software.amazon.lambda.powertools.largemessages.LargeMessages; + + public class SqsBatchHandler implements RequestHandler { + private final BatchMessageHandler handler; + + public SqsBatchHandler() { + handler = new BatchMessageHandlerBuilder() + .withSqsBatchHandler() + .buildWithRawMessageHandler(this::processMessage); + } + + @Override + public SQSBatchResponse handleRequest(SQSEvent sqsEvent, Context context) { + return handler.processBatch(sqsEvent, context); + } + + private void processMessage(SQSEvent.SQSMessage sqsMessage) { + LargeMessages.processLargeMessage(sqsMessage, this::handleProcessedMessage); + } + + private void handleProcessedMessage(SQSEvent.SQSMessage processedMessage) { + // do something with the message + } } - } - ``` + ``` !!! tip "Use together with idempotency module" - This utility also works together with the idempotency module (`powertools-idempotency`). - You can add both the `@LargeMessage` and `@Idempotent` annotations, in any order, to the same method. - The `@Idempotent` takes precedence over the `@LargeMessage` annotation. - It means Idempotency module will use the initial raw message (containing the S3 pointer) and not the large message. + When using the `@LargeMessage` annotation, you can combine it with the `@Idempotent` annotation on the same method. + The `@Idempotent` takes precedence over the `@LargeMessage` annotation, meaning the Idempotency module will use the initial raw message (containing the S3 pointer) and not the large message. + + When using the functional API, call `LargeMessages.processLargeMessage()` from within the `@Idempotent` method to ensure idempotency is based on the S3 pointer, not the unwrapped large blob. - ```java hl_lines="6 23-25" title="Combining idempotency and large message modules" - public class SqsBatchHandler implements RequestHandler { + === "@LargeMessage annotation" + ```java hl_lines="6 23-25" title="Combining idempotency and large message modules" + public class SqsBatchHandler implements RequestHandler { - public SqsBatchHandler() { - Idempotency.config().withConfig( - IdempotencyConfig.builder() - .withEventKeyJMESPath("body") // get the body of the message for the idempotency key - .build()) - .withPersistenceStore( - DynamoDBPersistenceStore.builder() - .withTableName(System.getenv("IDEMPOTENCY_TABLE")) - .build() - ).configure(); - } + public SqsBatchHandler() { + Idempotency.config().withConfig( + IdempotencyConfig.builder() + .withEventKeyJMESPath("body") // get the body of the message for the idempotency key + .build()) + .withPersistenceStore( + DynamoDBPersistenceStore.builder() + .withTableName(System.getenv("IDEMPOTENCY_TABLE")) + .build() + ).configure(); + } - @Override - public SQSBatchResponse handleRequest(SQSEvent sqsEvent, Context context) { - for (SQSMessage message: event.getRecords()) { - processRawMessage(message, context); + @Override + public SQSBatchResponse handleRequest(SQSEvent sqsEvent, Context context) { + for (SQSMessage message: event.getRecords()) { + processRawMessage(message, context); + } + return SQSBatchResponse.builder().build(); + } + + @Idempotent + @LargeMessage + private String processRawMessage(@IdempotencyKey SQSEvent.SQSMessage sqsMessage, Context context) { + // do something with the message } - return SQSBatchResponse.builder().build(); } + ``` - @Idempotent - @LargeMessage - private String processRawMessage(@IdempotencyKey SQSEvent.SQSMessage sqsMessage, Context context) { - // do something with the message + === "Functional API" + ```java hl_lines="8 25 27" title="Combining idempotency and large message modules" + import software.amazon.lambda.powertools.largemessages.LargeMessages; + + public class SqsBatchHandler implements RequestHandler { + + public SqsBatchHandler() { + Idempotency.config().withConfig( + IdempotencyConfig.builder() + .withEventKeyJMESPath("body") // get the body of the message for the idempotency key + .build()) + .withPersistenceStore( + DynamoDBPersistenceStore.builder() + .withTableName(System.getenv("IDEMPOTENCY_TABLE")) + .build() + ).configure(); + } + + @Override + public SQSBatchResponse handleRequest(SQSEvent sqsEvent, Context context) { + for (SQSMessage message: event.getRecords()) { + processRawMessage(message, context); + } + return SQSBatchResponse.builder().build(); + } + + @Idempotent + private String processRawMessage(@IdempotencyKey SQSEvent.SQSMessage sqsMessage, Context context) { + return LargeMessages.processLargeMessage(sqsMessage, this::handleProcessedMessage); + } + + private String handleProcessedMessage(SQSEvent.SQSMessage processedMessage) { + // do something with the message + } } - } - ``` + ``` ## Customizing S3 client configuration -To interact with S3, the utility creates a default S3 Client : +To interact with S3, the utility creates a default S3 Client: === "Default S3 Client" ```java @@ -317,9 +434,9 @@ To interact with S3, the utility creates a default S3 Client : .build(); ``` -If you need to customize this `S3Client`, you can leverage the `LargeMessageConfig` singleton: +If you need to customize this `S3Client`, you can leverage the `LargeMessageConfig` singleton. This works with both the annotation and functional API: -=== "Custom S3 Client" +=== "@LargeMessage annotation" ```java hl_lines="6" import software.amazon.lambda.powertools.largemessages.LargeMessage; @@ -342,6 +459,28 @@ If you need to customize this `S3Client`, you can leverage the `LargeMessageConf } ``` +=== "Functional API" + ```java hl_lines="1 6" + import software.amazon.lambda.powertools.largemessages.LargeMessages; + + public class SnsRecordHandler implements RequestHandler { + + public SnsRecordHandler() { + LargeMessageConfig.init().withS3Client(/* put your custom S3Client here */); + } + + @Override + public String handleRequest(SNSEvent event, Context context) { + return LargeMessages.processLargeMessage(event.records.get(0), this::processSNSRecord); + } + + private String processSNSRecord(SNSEvent.SNSRecord snsRecord) { + // snsRecord.getSNS().getMessage() will contain the content of the S3 object + return "Hello World"; + } + } + ``` + ## Migration from the SQS Large Message utility - Replace the dependency in maven / gradle: `powertools-sqs` ==> `powertools-large-messages` diff --git a/docs/utilities/parameters.md b/docs/utilities/parameters.md index beb460aa6..6de47df68 100644 --- a/docs/utilities/parameters.md +++ b/docs/utilities/parameters.md @@ -49,6 +49,7 @@ Note that you must provide the concrete parameters module you want to use below
... + ... @@ -91,10 +92,10 @@ Note that you must provide the concrete parameters module you want to use below === "Gradle" - ```groovy hl_lines="3 11 12" + ```groovy hl_lines="3 11-13" plugins { id 'java' - id 'io.freefair.aspectj.post-compile-weaving' version '8.1.0' + id 'io.freefair.aspectj.post-compile-weaving' version '8.1.0' // Not needed when using provider classes directly (without annotations) } repositories { @@ -103,7 +104,8 @@ Note that you must provide the concrete parameters module you want to use below dependencies { // TODO! Provide the parameters module you want to use here - aspect 'software.amazon.lambda:powertools-parameters-secrets:{{ powertools.version }}' + aspect 'software.amazon.lambda:powertools-parameters-secrets:{{ powertools.version }}' // Not needed when using provider classes directly (without annotations) + implementation 'software.amazon.lambda:powertools-parameters-secrets:{{ powertools.version }}' // Use this instead of 'aspect' when using provider classes directly } sourceCompatibility = 11 // or higher @@ -124,19 +126,18 @@ This utility requires additional permissions to work as expected. See the table | AppConfig | `AppConfigProvider.get(String)` `AppConfigProvider.getMultiple(string)` | `appconfig:StartConfigurationSession`, `appConfig:GetLatestConfiguration` | ## Retrieving Parameters -You can retrieve parameters either using annotations or by using the `xParamProvider` class for each parameter -provider directly. The latter is useful if you need to configure the underlying SDK client, for example to use -a different region or credentials, the former is simpler to use. +You can retrieve parameters using either annotations or provider classes directly: + +- **Annotations** (e.g., `@SecretsParam`, `@SSMParam`) - Simpler syntax with field injection, but requires AspectJ configuration +- **Provider classes** (e.g., `SecretsProvider`, `SSMProvider`) - No AspectJ required, useful when you need to configure the underlying SDK client (e.g., different region or credentials), or prefer avoiding AspectJ setup ## Built-in provider classes -This section describes the built-in provider classes for each parameter store, providing -examples showing how to inject parameters using annotations, and how to use the provider -interface. In cases where a provider supports extra features, these will also be described. +This section describes the built-in provider classes for each parameter store. For each provider, examples are shown for both the annotation-based approach and the provider class approach. In cases where a provider supports extra features, these will also be described. ### Secrets Manager -=== "Secrets Manager: @SecretsParam" +=== "@SecretsParam annotation" ```java hl_lines="8 9" import com.amazonaws.services.lambda.runtime.Context; @@ -156,7 +157,7 @@ interface. In cases where a provider supports extra features, these will also be } ``` -=== "Secrets Manager: SecretsProvider" +=== "SecretsProvider class" ```java hl_lines="12-15 19" import static software.amazon.lambda.powertools.parameters.transform.Transformer.base64; @@ -195,7 +196,7 @@ The AWS Systems Manager Parameter Store provider supports two additional argumen | **recursive()** | `False` | For `getMultiple()` only, will fetch all parameter values recursively based on a path prefix. | -=== "SSM Parameter Store: @SSMParam" +=== "@SSMParam annotation" ```java hl_lines="8 9" import com.amazonaws.services.lambda.runtime.Context; @@ -214,7 +215,7 @@ The AWS Systems Manager Parameter Store provider supports two additional argumen } ``` -=== "SSM Parameter Store: SSMProvider" +=== "SSMProvider class" ```java hl_lines="12-15 19-20 22" import static software.amazon.lambda.powertools.parameters.transform.Transformer.base64; @@ -246,15 +247,14 @@ The AWS Systems Manager Parameter Store provider supports two additional argumen } ``` -=== "SSM Parameter Store: Additional Options" +=== "Additional Options" - ```java hl_lines="9 12" - import software.amazon.lambda.powertools.parameters.SSMProvider; - import software.amazon.lambda.powertools.parameters.ParamManager; + ```java hl_lines="5 9 12" + import software.amazon.lambda.powertools.parameters.ssm.SSMProvider; public class AppWithSSM implements RequestHandler { // Get an instance of the SSM Provider - SSMProvider ssmProvider = ParamManager.getSsmProvider(); + SSMProvider ssmProvider = SSMProvider.builder().build(); // Retrieve a single parameter and decrypt it String value = ssmProvider.withDecryption().get("/my/parameter"); @@ -267,7 +267,7 @@ The AWS Systems Manager Parameter Store provider supports two additional argumen ### DynamoDB -=== "DynamoDB: @DyanmoDbParam" +=== "@DynamoDbParam annotation" ```java hl_lines="8 9" import com.amazonaws.services.lambda.runtime.Context; @@ -286,7 +286,7 @@ The AWS Systems Manager Parameter Store provider supports two additional argumen } ``` -=== "DynamoDB: DynamoDbProvider" +=== "DynamoDbProvider class" ```java hl_lines="12-15 19-20 22" import static software.amazon.lambda.powertools.parameters.transform.Transformer.base64; @@ -320,7 +320,7 @@ The AWS Systems Manager Parameter Store provider supports two additional argumen ### AppConfig -=== "AppConfig: @AppConfigParam" +=== "@AppConfigParam annotation" ```java hl_lines="8 9" import com.amazonaws.services.lambda.runtime.Context; @@ -339,7 +339,7 @@ The AWS Systems Manager Parameter Store provider supports two additional argumen } ``` -=== "AppConfig: AppConfigProvider" +=== "AppConfigProvider class" ```java hl_lines="12-15 19-20" import static software.amazon.lambda.powertools.parameters.transform.Transformer.base64; diff --git a/docs/utilities/validation.md b/docs/utilities/validation.md index ec35b7034..8e0d2c631 100644 --- a/docs/utilities/validation.md +++ b/docs/utilities/validation.md @@ -26,6 +26,7 @@ This utility provides JSON Schema validation for payloads held within events and ... + ... @@ -67,10 +68,10 @@ This utility provides JSON Schema validation for payloads held within events and === "Gradle" - ```groovy hl_lines="3 11" + ```groovy hl_lines="3 11 12" plugins { id 'java' - id 'io.freefair.aspectj.post-compile-weaving' version '8.1.0' + id 'io.freefair.aspectj.post-compile-weaving' version '8.1.0' // Not needed when using the functional approach with ValidationUtils.validate() } repositories { @@ -78,7 +79,8 @@ This utility provides JSON Schema validation for payloads held within events and } dependencies { - aspect 'software.amazon.lambda:powertools-validation:{{ powertools.version }}' + aspect 'software.amazon.lambda:powertools-validation:{{ powertools.version }}' // Not needed when using the functional approach with ValidationUtils.validate() + implementation 'software.amazon.lambda:powertools-validation:{{ powertools.version }}' // Use this instead of 'aspect' when using the functional approach } sourceCompatibility = 11 // or higher @@ -87,17 +89,18 @@ This utility provides JSON Schema validation for payloads held within events and ## Validating events -You can validate inbound and outbound events using `@Validation` annotation. +You can validate inbound and outbound events using either the `@Validation` annotation or the functional approach with `ValidationUtils.validate()` methods: -You can also use the `Validator#validate()` methods, if you want more control over the validation process such as handling a validation error. +- **@Validation annotation** - Simpler syntax with automatic validation, but requires AspectJ configuration +- **ValidationUtils.validate()** - No AspectJ required, provides more control over the validation process such as handling validation errors -We support JSON schema version 4, 6, 7, 2019-09 and 2020-12 using the [NetworkNT JSON Schema Validator](https://github.com/networknt/json-schema-validator). ([Compatibility with JSON Schema versions](https://github.com/networknt/json-schema-validator/blob/master/doc/compatibility.md)). +We support JSON schema version 4, 6, 7, 2019-09 and 2020-12 using the [NetworkNT JSON Schema Validator](https://github.com/networknt/json-schema-validator) ([Compatibility with JSON Schema versions](https://github.com/networknt/json-schema-validator/blob/master/doc/compatibility.md)). The validator is configured to enable format assertions by default even for 2019-09 and 2020-12. ### Validation annotation -`@Validation` annotation is used to validate either inbound events or functions' response. +The `@Validation` annotation is used to validate either inbound events or functions' response. It will fail fast if an event or response doesn't conform with given JSON Schema. For most type of events a `ValidationException` will be thrown. @@ -129,11 +132,11 @@ While it is easier to specify a json schema file in the classpath (using the not **NOTE**: It's not a requirement to validate both inbound and outbound schemas - You can either use one, or both. -### Validate function +### Functional approach with ValidationUtils -Validate standalone function is used within the Lambda handler, or any other methods that perform data validation. +The `ValidationUtils.validate()` method provides a functional approach that can be used within the Lambda handler or any other methods that perform data validation. This approach does not require AspectJ configuration. -You can also gracefully handle schema validation errors by catching `ValidationException`. +With this approach, you can gracefully handle schema validation errors by catching `ValidationException`. === "MyFunctionHandler.java" diff --git a/mkdocs.yml b/mkdocs.yml index da4303c38..3914cfa1a 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -1,9 +1,10 @@ site_name: Powertools for AWS Lambda (Java) site_description: Powertools for AWS Lambda (Java) site_author: Amazon Web Services -site_url: https://docs.powertools.aws.dev/lambda/java/latest/ +site_url: https://docs.aws.amazon.com/powertools/java/latest/ nav: - Homepage: index.md + - Usage patterns: usage-patterns.md - Changelog: changelog.md - Upgrade Guide: upgrade.md - FAQs: FAQs.md @@ -99,6 +100,7 @@ plugins: sections: Project Overview: - index.md + - usage-patterns.md - changelog.md - FAQs.md - roadmap.md From c2763c5a7db3ad63472d54b128d2a1dc74deb810 Mon Sep 17 00:00:00 2001 From: Philipp Page Date: Thu, 13 Nov 2025 10:35:58 +0100 Subject: [PATCH 032/202] chore(ci): Enable Java 25 builds. (#2285) --- .github/workflows/check-build.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/check-build.yml b/.github/workflows/check-build.yml index e1d949aad..88f1eabee 100644 --- a/.github/workflows/check-build.yml +++ b/.github/workflows/check-build.yml @@ -47,6 +47,7 @@ on: - 'powertools-large-messages/**' - 'powertools-logging/**' - 'powertools-metrics/**' + - 'powertools-kafka/**' - 'powertools-parameters/**' - 'powertools-serialization/**' - 'powertools-sqs/**' @@ -72,6 +73,7 @@ jobs: - 11 - 17 - 21 + - 25 steps: - id: checkout name: Checkout repository From 464490dd6e08c01b3e92507a05a34b555730fdaa Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 13 Nov 2025 13:42:28 +0100 Subject: [PATCH 033/202] chore(ci): bump version to 2.7.0 (#2286) * chore(ci): bump version to 2.7.0 * Restore CHANGELOG.md from main. --------- Co-authored-by: Powertools for AWS Lambda (Java) Bot <151832416+aws-powertools-bot@users.noreply.github.com> Co-authored-by: Philipp Page --- README.md | 6 +++--- examples/pom.xml | 2 +- examples/powertools-examples-batch/pom.xml | 2 +- examples/powertools-examples-cloudformation/README.md | 4 ++-- .../infra/sam-graalvm/README.md | 2 +- examples/powertools-examples-cloudformation/pom.xml | 2 +- examples/powertools-examples-core-utilities/cdk/app/pom.xml | 2 +- .../powertools-examples-core-utilities/cdk/infra/pom.xml | 2 +- .../powertools-examples-core-utilities/gradle/build.gradle | 6 +++--- .../kotlin/build.gradle.kts | 6 +++--- .../powertools-examples-core-utilities/sam-graalvm/pom.xml | 2 +- examples/powertools-examples-core-utilities/sam/pom.xml | 2 +- .../powertools-examples-core-utilities/serverless/pom.xml | 2 +- .../powertools-examples-core-utilities/terraform/pom.xml | 2 +- .../powertools-examples-idempotency/sam-graalvm/pom.xml | 2 +- examples/powertools-examples-idempotency/sam/pom.xml | 2 +- examples/powertools-examples-kafka/pom.xml | 2 +- examples/powertools-examples-parameters/sam-graalvm/pom.xml | 2 +- examples/powertools-examples-parameters/sam/pom.xml | 2 +- .../powertools-examples-serialization/sam-graalvm/pom.xml | 2 +- examples/powertools-examples-serialization/sam/pom.xml | 2 +- examples/powertools-examples-validation/pom.xml | 2 +- mkdocs.yml | 2 +- pom.xml | 2 +- powertools-batch/pom.xml | 2 +- powertools-cloudformation/pom.xml | 2 +- powertools-common/pom.xml | 2 +- powertools-e2e-tests/handlers/batch/pom.xml | 2 +- .../handlers/idempotency-functional/pom.xml | 2 +- powertools-e2e-tests/handlers/idempotency-generics/pom.xml | 2 +- powertools-e2e-tests/handlers/idempotency/pom.xml | 2 +- .../handlers/largemessage-functional/pom.xml | 2 +- powertools-e2e-tests/handlers/largemessage/pom.xml | 2 +- .../handlers/largemessage_idempotent/pom.xml | 2 +- powertools-e2e-tests/handlers/logging-functional/pom.xml | 2 +- powertools-e2e-tests/handlers/logging-log4j/pom.xml | 2 +- powertools-e2e-tests/handlers/logging-logback/pom.xml | 2 +- powertools-e2e-tests/handlers/metrics/pom.xml | 2 +- powertools-e2e-tests/handlers/parameters/pom.xml | 2 +- powertools-e2e-tests/handlers/pom.xml | 2 +- powertools-e2e-tests/handlers/tracing/pom.xml | 2 +- powertools-e2e-tests/handlers/validation-alb-event/pom.xml | 2 +- .../handlers/validation-apigw-event/pom.xml | 2 +- powertools-e2e-tests/pom.xml | 2 +- powertools-idempotency/pom.xml | 2 +- powertools-idempotency/powertools-idempotency-core/pom.xml | 2 +- .../powertools-idempotency-dynamodb/pom.xml | 2 +- powertools-kafka/pom.xml | 2 +- powertools-large-messages/pom.xml | 2 +- powertools-logging/pom.xml | 2 +- powertools-logging/powertools-logging-log4j/pom.xml | 2 +- powertools-logging/powertools-logging-logback/pom.xml | 2 +- powertools-metrics/pom.xml | 2 +- powertools-parameters/pom.xml | 2 +- .../powertools-parameters-appconfig/pom.xml | 2 +- .../powertools-parameters-dynamodb/pom.xml | 2 +- powertools-parameters/powertools-parameters-secrets/pom.xml | 2 +- powertools-parameters/powertools-parameters-ssm/pom.xml | 2 +- powertools-parameters/powertools-parameters-tests/pom.xml | 2 +- powertools-serialization/pom.xml | 2 +- powertools-tracing/pom.xml | 2 +- powertools-validation/pom.xml | 2 +- 62 files changed, 69 insertions(+), 69 deletions(-) diff --git a/README.md b/README.md index e771db05c..6d3689092 100644 --- a/README.md +++ b/README.md @@ -22,17 +22,17 @@ Powertools for AWS Lambda (Java) is available in Maven Central. You can use your software.amazon.lambda powertools-tracing - 2.6.0 + 2.7.0 software.amazon.lambda powertools-logging-log4j - 2.6.0 + 2.7.0 software.amazon.lambda powertools-metrics - 2.6.0 + 2.7.0 ... diff --git a/examples/pom.xml b/examples/pom.xml index 9ce451a33..c02d318cc 100644 --- a/examples/pom.xml +++ b/examples/pom.xml @@ -20,7 +20,7 @@ software.amazon.lambda powertools-examples - 2.6.0 + 2.7.0 pom Powertools for AWS Lambda (Java) - Examples diff --git a/examples/powertools-examples-batch/pom.xml b/examples/powertools-examples-batch/pom.xml index 518cdbdd4..5226166fb 100644 --- a/examples/powertools-examples-batch/pom.xml +++ b/examples/powertools-examples-batch/pom.xml @@ -5,7 +5,7 @@ 4.0.0 software.amazon.lambda.examples - 2.6.0 + 2.7.0 powertools-examples-batch jar Powertools for AWS Lambda (Java) - Examples - Batch diff --git a/examples/powertools-examples-cloudformation/README.md b/examples/powertools-examples-cloudformation/README.md index 35184b6d2..84d9d7fac 100644 --- a/examples/powertools-examples-cloudformation/README.md +++ b/examples/powertools-examples-cloudformation/README.md @@ -15,7 +15,7 @@ Run the following in your shell: ```bash cd infra/sam sam build -sam deploy --guided --parameter-overrides BucketNameParam=my-unique-bucket-2.6.0718 +sam deploy --guided --parameter-overrides BucketNameParam=my-unique-bucket-2.7.0718 ``` ### Deploy with CDK @@ -32,5 +32,5 @@ To build and deploy this application for the first time, run the following in yo cd infra/cdk mvn package cdk synth -cdk deploy -c BucketNameParam=my-unique-bucket-2.6.0718 +cdk deploy -c BucketNameParam=my-unique-bucket-2.7.0718 ``` \ No newline at end of file diff --git a/examples/powertools-examples-cloudformation/infra/sam-graalvm/README.md b/examples/powertools-examples-cloudformation/infra/sam-graalvm/README.md index 01365932e..85c8b386f 100644 --- a/examples/powertools-examples-cloudformation/infra/sam-graalvm/README.md +++ b/examples/powertools-examples-cloudformation/infra/sam-graalvm/README.md @@ -40,7 +40,7 @@ sam build ## Deploy the sample application ```shell -sam deploy --guided --parameter-overrides BucketNameParam=my-unique-bucket-2.6.0718 +sam deploy --guided --parameter-overrides BucketNameParam=my-unique-bucket-2.7.0718 ``` This sample is based on Serverless Application Model (SAM). To deploy it, check out the instructions for getting started with SAM in [the examples directory](../../../README.md) diff --git a/examples/powertools-examples-cloudformation/pom.xml b/examples/powertools-examples-cloudformation/pom.xml index 392d08b4b..74ced3a4f 100644 --- a/examples/powertools-examples-cloudformation/pom.xml +++ b/examples/powertools-examples-cloudformation/pom.xml @@ -3,7 +3,7 @@ 4.0.0 software.amazon.lambda.examples - 2.6.0 + 2.7.0 powertools-examples-cloudformation jar diff --git a/examples/powertools-examples-core-utilities/cdk/app/pom.xml b/examples/powertools-examples-core-utilities/cdk/app/pom.xml index 756c082b8..dbd6743a8 100644 --- a/examples/powertools-examples-core-utilities/cdk/app/pom.xml +++ b/examples/powertools-examples-core-utilities/cdk/app/pom.xml @@ -6,7 +6,7 @@ software.amazon.lambda.examples - 2.6.0 + 2.7.0 powertools-examples-core-utilities-cdk jar diff --git a/examples/powertools-examples-core-utilities/cdk/infra/pom.xml b/examples/powertools-examples-core-utilities/cdk/infra/pom.xml index 4ca38877d..87dc26169 100644 --- a/examples/powertools-examples-core-utilities/cdk/infra/pom.xml +++ b/examples/powertools-examples-core-utilities/cdk/infra/pom.xml @@ -4,7 +4,7 @@ 4.0.0 software.amazon.lambda.examples cdk - 2.6.0 + 2.7.0 UTF-8 2.223.0 diff --git a/examples/powertools-examples-core-utilities/gradle/build.gradle b/examples/powertools-examples-core-utilities/gradle/build.gradle index 36524f0b1..0b7951f11 100644 --- a/examples/powertools-examples-core-utilities/gradle/build.gradle +++ b/examples/powertools-examples-core-utilities/gradle/build.gradle @@ -29,8 +29,8 @@ dependencies { implementation 'com.amazonaws:aws-lambda-java-events:3.16.0' implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.13.2' implementation 'org.aspectj:aspectjrt:1.9.20.1' - aspect 'software.amazon.lambda:powertools-tracing:2.6.0' - aspect 'software.amazon.lambda:powertools-logging-log4j:2.6.0' - aspect 'software.amazon.lambda:powertools-metrics:2.6.0' + aspect 'software.amazon.lambda:powertools-tracing:2.7.0' + aspect 'software.amazon.lambda:powertools-logging-log4j:2.7.0' + aspect 'software.amazon.lambda:powertools-metrics:2.7.0' } diff --git a/examples/powertools-examples-core-utilities/kotlin/build.gradle.kts b/examples/powertools-examples-core-utilities/kotlin/build.gradle.kts index c3713c344..47e82c5b8 100644 --- a/examples/powertools-examples-core-utilities/kotlin/build.gradle.kts +++ b/examples/powertools-examples-core-utilities/kotlin/build.gradle.kts @@ -15,9 +15,9 @@ dependencies { implementation("com.amazonaws:aws-lambda-java-events:3.16.0") implementation("com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.15.2") implementation("org.aspectj:aspectjrt:1.9.20.1") - aspect("software.amazon.lambda:powertools-tracing:2.6.0") - aspect("software.amazon.lambda:powertools-logging-log4j:2.6.0") - aspect("software.amazon.lambda:powertools-metrics:2.6.0") + aspect("software.amazon.lambda:powertools-tracing:2.7.0") + aspect("software.amazon.lambda:powertools-logging-log4j:2.7.0") + aspect("software.amazon.lambda:powertools-metrics:2.7.0") implementation("org.jetbrains.kotlin:kotlin-stdlib:1.9.24") } diff --git a/examples/powertools-examples-core-utilities/sam-graalvm/pom.xml b/examples/powertools-examples-core-utilities/sam-graalvm/pom.xml index cfd640aa1..682e1a10b 100644 --- a/examples/powertools-examples-core-utilities/sam-graalvm/pom.xml +++ b/examples/powertools-examples-core-utilities/sam-graalvm/pom.xml @@ -4,7 +4,7 @@ Powertools for AWS Lambda (Java) - Examples - Core Utilities (logging, tracing, metrics) with SAM GraalVM software.amazon.lambda.examples - 2.6.0 + 2.7.0 powertools-examples-core-utilities-sam-graalvm jar diff --git a/examples/powertools-examples-core-utilities/sam/pom.xml b/examples/powertools-examples-core-utilities/sam/pom.xml index a5e3881b2..d03cafcfb 100644 --- a/examples/powertools-examples-core-utilities/sam/pom.xml +++ b/examples/powertools-examples-core-utilities/sam/pom.xml @@ -4,7 +4,7 @@ Powertools for AWS Lambda (Java) - Examples - Core Utilities (logging, tracing, metrics) with SAM software.amazon.lambda.examples - 2.6.0 + 2.7.0 powertools-examples-core-utilities-sam jar diff --git a/examples/powertools-examples-core-utilities/serverless/pom.xml b/examples/powertools-examples-core-utilities/serverless/pom.xml index 8ef3b556d..996f77d4b 100644 --- a/examples/powertools-examples-core-utilities/serverless/pom.xml +++ b/examples/powertools-examples-core-utilities/serverless/pom.xml @@ -4,7 +4,7 @@ Powertools for AWS Lambda (Java) - Examples - Core Utilities (logging, tracing, metrics) with Serverless software.amazon.lambda.examples - 2.6.0 + 2.7.0 powertools-examples-core-utilities-serverless jar diff --git a/examples/powertools-examples-core-utilities/terraform/pom.xml b/examples/powertools-examples-core-utilities/terraform/pom.xml index d320a1d40..d28835a8a 100644 --- a/examples/powertools-examples-core-utilities/terraform/pom.xml +++ b/examples/powertools-examples-core-utilities/terraform/pom.xml @@ -4,7 +4,7 @@ Powertools for AWS Lambda (Java) - Examples - Core Utilities (logging, tracing, metrics) with Terraform software.amazon.lambda.examples - 2.6.0 + 2.7.0 powertools-examples-core-utilities-terraform jar diff --git a/examples/powertools-examples-idempotency/sam-graalvm/pom.xml b/examples/powertools-examples-idempotency/sam-graalvm/pom.xml index dff0082f1..205958c9a 100644 --- a/examples/powertools-examples-idempotency/sam-graalvm/pom.xml +++ b/examples/powertools-examples-idempotency/sam-graalvm/pom.xml @@ -2,7 +2,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 4.0.0 software.amazon.lambda.examples - 2.6.0 + 2.7.0 powertools-examples-idempotency-sam-graalvm jar Powertools for AWS Lambda (Java) - Examples - Idempotency GraalVM diff --git a/examples/powertools-examples-idempotency/sam/pom.xml b/examples/powertools-examples-idempotency/sam/pom.xml index 0654867f9..694b79342 100644 --- a/examples/powertools-examples-idempotency/sam/pom.xml +++ b/examples/powertools-examples-idempotency/sam/pom.xml @@ -17,7 +17,7 @@ 4.0.0 software.amazon.lambda.examples - 2.6.0 + 2.7.0 powertools-examples-idempotency jar Powertools for AWS Lambda (Java) - Examples - Idempotency diff --git a/examples/powertools-examples-kafka/pom.xml b/examples/powertools-examples-kafka/pom.xml index 5428655bd..184025be8 100644 --- a/examples/powertools-examples-kafka/pom.xml +++ b/examples/powertools-examples-kafka/pom.xml @@ -2,7 +2,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 4.0.0 software.amazon.lambda.examples - 2.6.0 + 2.7.0 powertools-examples-kafka jar Powertools for AWS Lambda (Java) - Examples - Kafka diff --git a/examples/powertools-examples-parameters/sam-graalvm/pom.xml b/examples/powertools-examples-parameters/sam-graalvm/pom.xml index 9c62498d5..a83ddddb8 100644 --- a/examples/powertools-examples-parameters/sam-graalvm/pom.xml +++ b/examples/powertools-examples-parameters/sam-graalvm/pom.xml @@ -2,7 +2,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 4.0.0 software.amazon.lambda.examples - 2.6.0 + 2.7.0 powertools-examples-parameters-sam-graalvm jar Powertools for AWS Lambda (Java) - Examples - Parameters GraalVM diff --git a/examples/powertools-examples-parameters/sam/pom.xml b/examples/powertools-examples-parameters/sam/pom.xml index 17a1efa79..83efef4d2 100644 --- a/examples/powertools-examples-parameters/sam/pom.xml +++ b/examples/powertools-examples-parameters/sam/pom.xml @@ -2,7 +2,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 4.0.0 software.amazon.lambda.examples - 2.6.0 + 2.7.0 powertools-examples-parameters-sam jar Powertools for AWS Lambda (Java) - Examples - Parameters diff --git a/examples/powertools-examples-serialization/sam-graalvm/pom.xml b/examples/powertools-examples-serialization/sam-graalvm/pom.xml index 7df5805ce..b77ce975e 100644 --- a/examples/powertools-examples-serialization/sam-graalvm/pom.xml +++ b/examples/powertools-examples-serialization/sam-graalvm/pom.xml @@ -2,7 +2,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 4.0.0 software.amazon.lambda.examples - 2.6.0 + 2.7.0 powertools-examples-serialization-sam-graalvm jar Powertools for AWS Lambda (Java) - Examples - Serialization GraalVM diff --git a/examples/powertools-examples-serialization/sam/pom.xml b/examples/powertools-examples-serialization/sam/pom.xml index 7120d3a91..789d9969f 100644 --- a/examples/powertools-examples-serialization/sam/pom.xml +++ b/examples/powertools-examples-serialization/sam/pom.xml @@ -2,7 +2,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 4.0.0 software.amazon.lambda.examples - 2.6.0 + 2.7.0 powertools-examples-serialization-sam jar Powertools for AWS Lambda (Java) - Examples - Serialization diff --git a/examples/powertools-examples-validation/pom.xml b/examples/powertools-examples-validation/pom.xml index 5826e7456..abcdd4e3a 100644 --- a/examples/powertools-examples-validation/pom.xml +++ b/examples/powertools-examples-validation/pom.xml @@ -16,7 +16,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 4.0.0 software.amazon.lambda.examples - 2.6.0 + 2.7.0 powertools-examples-validation jar Powertools for AWS Lambda (Java) - Examples - Validation diff --git a/mkdocs.yml b/mkdocs.yml index 3914cfa1a..98f6945d7 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -129,7 +129,7 @@ extra_javascript: extra: powertools: - version: 2.6.0 + version: 2.7.0 version: provider: mike default: latest diff --git a/pom.xml b/pom.xml index 4d5ff7248..48be39d47 100644 --- a/pom.xml +++ b/pom.xml @@ -20,7 +20,7 @@ software.amazon.lambda powertools-parent - 2.6.0 + 2.7.0 pom Powertools for AWS Lambda (Java) - Parent diff --git a/powertools-batch/pom.xml b/powertools-batch/pom.xml index ccf926d39..bce58ab58 100644 --- a/powertools-batch/pom.xml +++ b/powertools-batch/pom.xml @@ -6,7 +6,7 @@ software.amazon.lambda powertools-parent - 2.6.0 + 2.7.0 A suite of utilities that makes batch message processing using AWS Lambda easier. diff --git a/powertools-cloudformation/pom.xml b/powertools-cloudformation/pom.xml index 015179833..a3270563a 100644 --- a/powertools-cloudformation/pom.xml +++ b/powertools-cloudformation/pom.xml @@ -24,7 +24,7 @@ powertools-parent software.amazon.lambda - 2.6.0 + 2.7.0 Powertools for AWS Lambda (Java) - Cloudformation diff --git a/powertools-common/pom.xml b/powertools-common/pom.xml index 2610a8c4f..d4e9f6213 100644 --- a/powertools-common/pom.xml +++ b/powertools-common/pom.xml @@ -24,7 +24,7 @@ powertools-parent software.amazon.lambda - 2.6.0 + 2.7.0 Powertools for AWS Lambda (Java) - Common Internal Utilities diff --git a/powertools-e2e-tests/handlers/batch/pom.xml b/powertools-e2e-tests/handlers/batch/pom.xml index a630ba09b..2c726340a 100644 --- a/powertools-e2e-tests/handlers/batch/pom.xml +++ b/powertools-e2e-tests/handlers/batch/pom.xml @@ -5,7 +5,7 @@ software.amazon.lambda e2e-test-handlers-parent - 2.6.0 + 2.7.0 e2e-test-handler-batch diff --git a/powertools-e2e-tests/handlers/idempotency-functional/pom.xml b/powertools-e2e-tests/handlers/idempotency-functional/pom.xml index 73c8780d3..133a0ccff 100644 --- a/powertools-e2e-tests/handlers/idempotency-functional/pom.xml +++ b/powertools-e2e-tests/handlers/idempotency-functional/pom.xml @@ -5,7 +5,7 @@ software.amazon.lambda e2e-test-handlers-parent - 2.6.0 + 2.7.0 e2e-test-handler-idempotency-functional diff --git a/powertools-e2e-tests/handlers/idempotency-generics/pom.xml b/powertools-e2e-tests/handlers/idempotency-generics/pom.xml index d89aa33e2..a69babd0d 100644 --- a/powertools-e2e-tests/handlers/idempotency-generics/pom.xml +++ b/powertools-e2e-tests/handlers/idempotency-generics/pom.xml @@ -5,7 +5,7 @@ software.amazon.lambda e2e-test-handlers-parent - 2.6.0 + 2.7.0 e2e-test-handler-idempotency-generics diff --git a/powertools-e2e-tests/handlers/idempotency/pom.xml b/powertools-e2e-tests/handlers/idempotency/pom.xml index ea84e7b26..cbe7e0cac 100644 --- a/powertools-e2e-tests/handlers/idempotency/pom.xml +++ b/powertools-e2e-tests/handlers/idempotency/pom.xml @@ -5,7 +5,7 @@ software.amazon.lambda e2e-test-handlers-parent - 2.6.0 + 2.7.0 e2e-test-handler-idempotency diff --git a/powertools-e2e-tests/handlers/largemessage-functional/pom.xml b/powertools-e2e-tests/handlers/largemessage-functional/pom.xml index 094c54841..e2e67b2da 100644 --- a/powertools-e2e-tests/handlers/largemessage-functional/pom.xml +++ b/powertools-e2e-tests/handlers/largemessage-functional/pom.xml @@ -5,7 +5,7 @@ software.amazon.lambda e2e-test-handlers-parent - 2.6.0 + 2.7.0 e2e-test-handler-largemessage-functional diff --git a/powertools-e2e-tests/handlers/largemessage/pom.xml b/powertools-e2e-tests/handlers/largemessage/pom.xml index 3004a884c..56d179c3b 100644 --- a/powertools-e2e-tests/handlers/largemessage/pom.xml +++ b/powertools-e2e-tests/handlers/largemessage/pom.xml @@ -5,7 +5,7 @@ software.amazon.lambda e2e-test-handlers-parent - 2.6.0 + 2.7.0 e2e-test-handler-largemessage diff --git a/powertools-e2e-tests/handlers/largemessage_idempotent/pom.xml b/powertools-e2e-tests/handlers/largemessage_idempotent/pom.xml index 74a7b2999..9896db217 100644 --- a/powertools-e2e-tests/handlers/largemessage_idempotent/pom.xml +++ b/powertools-e2e-tests/handlers/largemessage_idempotent/pom.xml @@ -5,7 +5,7 @@ software.amazon.lambda e2e-test-handlers-parent - 2.6.0 + 2.7.0 e2e-test-handler-large-msg-idempotent diff --git a/powertools-e2e-tests/handlers/logging-functional/pom.xml b/powertools-e2e-tests/handlers/logging-functional/pom.xml index a8f79df30..ba532c3db 100644 --- a/powertools-e2e-tests/handlers/logging-functional/pom.xml +++ b/powertools-e2e-tests/handlers/logging-functional/pom.xml @@ -5,7 +5,7 @@ software.amazon.lambda e2e-test-handlers-parent - 2.6.0 + 2.7.0 e2e-test-handler-logging-functional diff --git a/powertools-e2e-tests/handlers/logging-log4j/pom.xml b/powertools-e2e-tests/handlers/logging-log4j/pom.xml index 0ed761274..445da94e2 100644 --- a/powertools-e2e-tests/handlers/logging-log4j/pom.xml +++ b/powertools-e2e-tests/handlers/logging-log4j/pom.xml @@ -5,7 +5,7 @@ software.amazon.lambda e2e-test-handlers-parent - 2.6.0 + 2.7.0 e2e-test-handler-logging-log4j diff --git a/powertools-e2e-tests/handlers/logging-logback/pom.xml b/powertools-e2e-tests/handlers/logging-logback/pom.xml index d8523f721..9f5035722 100644 --- a/powertools-e2e-tests/handlers/logging-logback/pom.xml +++ b/powertools-e2e-tests/handlers/logging-logback/pom.xml @@ -5,7 +5,7 @@ software.amazon.lambda e2e-test-handlers-parent - 2.6.0 + 2.7.0 e2e-test-handler-logging-logback diff --git a/powertools-e2e-tests/handlers/metrics/pom.xml b/powertools-e2e-tests/handlers/metrics/pom.xml index 3b60d2aba..5bf3bd5ef 100644 --- a/powertools-e2e-tests/handlers/metrics/pom.xml +++ b/powertools-e2e-tests/handlers/metrics/pom.xml @@ -5,7 +5,7 @@ software.amazon.lambda e2e-test-handlers-parent - 2.6.0 + 2.7.0 e2e-test-handler-metrics diff --git a/powertools-e2e-tests/handlers/parameters/pom.xml b/powertools-e2e-tests/handlers/parameters/pom.xml index 495b51311..e30a51150 100644 --- a/powertools-e2e-tests/handlers/parameters/pom.xml +++ b/powertools-e2e-tests/handlers/parameters/pom.xml @@ -5,7 +5,7 @@ software.amazon.lambda e2e-test-handlers-parent - 2.6.0 + 2.7.0 e2e-test-handler-parameters diff --git a/powertools-e2e-tests/handlers/pom.xml b/powertools-e2e-tests/handlers/pom.xml index bf2e78f8c..afc21131f 100644 --- a/powertools-e2e-tests/handlers/pom.xml +++ b/powertools-e2e-tests/handlers/pom.xml @@ -4,7 +4,7 @@ software.amazon.lambda e2e-test-handlers-parent - 2.6.0 + 2.7.0 pom Handlers for End-to-End tests Fake handlers that use Powertools for AWS Lambda (Java). diff --git a/powertools-e2e-tests/handlers/tracing/pom.xml b/powertools-e2e-tests/handlers/tracing/pom.xml index 2aaae55f5..1a3b56a77 100644 --- a/powertools-e2e-tests/handlers/tracing/pom.xml +++ b/powertools-e2e-tests/handlers/tracing/pom.xml @@ -5,7 +5,7 @@ software.amazon.lambda e2e-test-handlers-parent - 2.6.0 + 2.7.0 e2e-test-handler-tracing diff --git a/powertools-e2e-tests/handlers/validation-alb-event/pom.xml b/powertools-e2e-tests/handlers/validation-alb-event/pom.xml index c966194b1..d2e1266fc 100644 --- a/powertools-e2e-tests/handlers/validation-alb-event/pom.xml +++ b/powertools-e2e-tests/handlers/validation-alb-event/pom.xml @@ -5,7 +5,7 @@ software.amazon.lambda e2e-test-handlers-parent - 2.6.0 + 2.7.0 e2e-test-handler-validation-alb-event diff --git a/powertools-e2e-tests/handlers/validation-apigw-event/pom.xml b/powertools-e2e-tests/handlers/validation-apigw-event/pom.xml index 85b8f47dc..6832280a6 100644 --- a/powertools-e2e-tests/handlers/validation-apigw-event/pom.xml +++ b/powertools-e2e-tests/handlers/validation-apigw-event/pom.xml @@ -5,7 +5,7 @@ software.amazon.lambda e2e-test-handlers-parent - 2.6.0 + 2.7.0 e2e-test-handler-validation-apigw-event diff --git a/powertools-e2e-tests/pom.xml b/powertools-e2e-tests/pom.xml index 860593819..998c6a803 100644 --- a/powertools-e2e-tests/pom.xml +++ b/powertools-e2e-tests/pom.xml @@ -20,7 +20,7 @@ powertools-parent software.amazon.lambda - 2.6.0 + 2.7.0 powertools-e2e-tests diff --git a/powertools-idempotency/pom.xml b/powertools-idempotency/pom.xml index 7bfe38ef4..f119ca445 100644 --- a/powertools-idempotency/pom.xml +++ b/powertools-idempotency/pom.xml @@ -21,7 +21,7 @@ software.amazon.lambda powertools-parent - 2.6.0 + 2.7.0 powertools-idempotency diff --git a/powertools-idempotency/powertools-idempotency-core/pom.xml b/powertools-idempotency/powertools-idempotency-core/pom.xml index 0e784c0f5..5e57ee136 100644 --- a/powertools-idempotency/powertools-idempotency-core/pom.xml +++ b/powertools-idempotency/powertools-idempotency-core/pom.xml @@ -21,7 +21,7 @@ software.amazon.lambda powertools-idempotency - 2.6.0 + 2.7.0 powertools-idempotency-core diff --git a/powertools-idempotency/powertools-idempotency-dynamodb/pom.xml b/powertools-idempotency/powertools-idempotency-dynamodb/pom.xml index ea562ea89..25f6f77c7 100644 --- a/powertools-idempotency/powertools-idempotency-dynamodb/pom.xml +++ b/powertools-idempotency/powertools-idempotency-dynamodb/pom.xml @@ -21,7 +21,7 @@ software.amazon.lambda powertools-idempotency - 2.6.0 + 2.7.0 powertools-idempotency-dynamodb diff --git a/powertools-kafka/pom.xml b/powertools-kafka/pom.xml index ac8c95f05..a07d4e0d6 100644 --- a/powertools-kafka/pom.xml +++ b/powertools-kafka/pom.xml @@ -21,7 +21,7 @@ powertools-parent software.amazon.lambda - 2.6.0 + 2.7.0 powertools-kafka diff --git a/powertools-large-messages/pom.xml b/powertools-large-messages/pom.xml index e29327c7d..6353cb089 100644 --- a/powertools-large-messages/pom.xml +++ b/powertools-large-messages/pom.xml @@ -23,7 +23,7 @@ software.amazon.lambda powertools-parent - 2.6.0 + 2.7.0 powertools-large-messages diff --git a/powertools-logging/pom.xml b/powertools-logging/pom.xml index bcc28c6c2..9fd7b1e62 100644 --- a/powertools-logging/pom.xml +++ b/powertools-logging/pom.xml @@ -21,7 +21,7 @@ powertools-parent software.amazon.lambda - 2.6.0 + 2.7.0 Powertools for AWS Lambda (Java) - Logging diff --git a/powertools-logging/powertools-logging-log4j/pom.xml b/powertools-logging/powertools-logging-log4j/pom.xml index fc47ac84d..8006baa7d 100644 --- a/powertools-logging/powertools-logging-log4j/pom.xml +++ b/powertools-logging/powertools-logging-log4j/pom.xml @@ -7,7 +7,7 @@ powertools-parent software.amazon.lambda - 2.6.0 + 2.7.0 ../../pom.xml diff --git a/powertools-logging/powertools-logging-logback/pom.xml b/powertools-logging/powertools-logging-logback/pom.xml index 2269303f5..70bbbdfc4 100644 --- a/powertools-logging/powertools-logging-logback/pom.xml +++ b/powertools-logging/powertools-logging-logback/pom.xml @@ -6,7 +6,7 @@ powertools-parent software.amazon.lambda - 2.6.0 + 2.7.0 ../../pom.xml diff --git a/powertools-metrics/pom.xml b/powertools-metrics/pom.xml index ae2871b41..1ea59493c 100644 --- a/powertools-metrics/pom.xml +++ b/powertools-metrics/pom.xml @@ -24,7 +24,7 @@ powertools-parent software.amazon.lambda - 2.6.0 + 2.7.0 Powertools for AWS Lambda (Java) - Metrics diff --git a/powertools-parameters/pom.xml b/powertools-parameters/pom.xml index 72d3133d3..158fdc978 100644 --- a/powertools-parameters/pom.xml +++ b/powertools-parameters/pom.xml @@ -21,7 +21,7 @@ powertools-parent software.amazon.lambda - 2.6.0 + 2.7.0 powertools-parameters diff --git a/powertools-parameters/powertools-parameters-appconfig/pom.xml b/powertools-parameters/powertools-parameters-appconfig/pom.xml index 454102ede..9d9adc16b 100644 --- a/powertools-parameters/powertools-parameters-appconfig/pom.xml +++ b/powertools-parameters/powertools-parameters-appconfig/pom.xml @@ -7,7 +7,7 @@ software.amazon.lambda powertools-parent - 2.6.0 + 2.7.0 ../../pom.xml diff --git a/powertools-parameters/powertools-parameters-dynamodb/pom.xml b/powertools-parameters/powertools-parameters-dynamodb/pom.xml index 594761bee..d66153da6 100644 --- a/powertools-parameters/powertools-parameters-dynamodb/pom.xml +++ b/powertools-parameters/powertools-parameters-dynamodb/pom.xml @@ -7,7 +7,7 @@ software.amazon.lambda powertools-parent - 2.6.0 + 2.7.0 ../../pom.xml diff --git a/powertools-parameters/powertools-parameters-secrets/pom.xml b/powertools-parameters/powertools-parameters-secrets/pom.xml index 4b4616cb2..f126716d6 100644 --- a/powertools-parameters/powertools-parameters-secrets/pom.xml +++ b/powertools-parameters/powertools-parameters-secrets/pom.xml @@ -7,7 +7,7 @@ software.amazon.lambda powertools-parent - 2.6.0 + 2.7.0 ../../pom.xml diff --git a/powertools-parameters/powertools-parameters-ssm/pom.xml b/powertools-parameters/powertools-parameters-ssm/pom.xml index 0e31ed729..e6bf1ea27 100644 --- a/powertools-parameters/powertools-parameters-ssm/pom.xml +++ b/powertools-parameters/powertools-parameters-ssm/pom.xml @@ -7,7 +7,7 @@ software.amazon.lambda powertools-parent - 2.6.0 + 2.7.0 ../../pom.xml diff --git a/powertools-parameters/powertools-parameters-tests/pom.xml b/powertools-parameters/powertools-parameters-tests/pom.xml index b1b655fe8..b40046bde 100644 --- a/powertools-parameters/powertools-parameters-tests/pom.xml +++ b/powertools-parameters/powertools-parameters-tests/pom.xml @@ -6,7 +6,7 @@ software.amazon.lambda powertools-parent - 2.6.0 + 2.7.0 ../../pom.xml diff --git a/powertools-serialization/pom.xml b/powertools-serialization/pom.xml index 79b6653fa..d7f33df28 100644 --- a/powertools-serialization/pom.xml +++ b/powertools-serialization/pom.xml @@ -21,7 +21,7 @@ powertools-parent software.amazon.lambda - 2.6.0 + 2.7.0 powertools-serialization diff --git a/powertools-tracing/pom.xml b/powertools-tracing/pom.xml index 3b1e58ccd..68231dbe1 100644 --- a/powertools-tracing/pom.xml +++ b/powertools-tracing/pom.xml @@ -24,7 +24,7 @@ powertools-parent software.amazon.lambda - 2.6.0 + 2.7.0 Powertools for AWS Lambda (Java) - Tracing diff --git a/powertools-validation/pom.xml b/powertools-validation/pom.xml index 2c119972d..74051989e 100644 --- a/powertools-validation/pom.xml +++ b/powertools-validation/pom.xml @@ -24,7 +24,7 @@ powertools-parent software.amazon.lambda - 2.6.0 + 2.7.0 Powertools for AWS Lambda (Java) - Validation From 286a2d06d510e0799511b1c20340071b86979295 Mon Sep 17 00:00:00 2001 From: Philipp Page Date: Thu, 13 Nov 2025 17:22:33 +0100 Subject: [PATCH 034/202] =?UTF-8?q?improv(parameters):=20Make=20parameters?= =?UTF-8?q?=20top-level=20provider=20thread-safe=20fo=E2=80=A6=20(#2284)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * improv(parameters): Make parameters top-level provider thread-safe for cache and transformer management. * Use countdown latch instead of Thread.sleep for transformation manager tests. * Make SSMProvider and AppConfigProvider thread-safe. * Make all tests package-private. * Fix sonar finding AZp41z3q7Kei0U644EOS. * Fix sonar finding AZp41z3q7Kei0U644EOS for real now. * Fix PMD findings. * Fix PMD findings. * Fix PMD findings. --- .../appconfig/AppConfigProvider.java | 4 +- .../appconfig/AppConfigParamAspectTest.java | 4 +- .../dynamodb/DynamoDbParamAspectTest.java | 4 +- .../dynamodb/DynamoDbProviderE2ETest.java | 26 ++-- .../dynamodb/DynamoDbProviderTest.java | 44 +++--- .../secrets/SecretsParamAspectTest.java | 4 +- .../secrets/SecretsProviderTest.java | 14 +- .../parameters/ssm/SSMProvider.java | 30 ++-- .../parameters/ssm/SSMParamAspectTest.java | 4 +- .../parameters/ssm/SSMProviderTest.java | 132 ++++++++++++++--- .../parameters/BaseProviderTest.java | 62 ++++---- .../ParamProvidersIntegrationTest.java | 8 +- .../parameters/cache/CacheManagerTest.java | 110 ++++++++++++-- .../parameters/cache/DataStoreTest.java | 14 +- .../transform/Base64TransformerTest.java | 6 +- .../transform/JsonTransformerTest.java | 10 +- .../transform/TransformationManagerTest.java | 140 ++++++++++++++++-- .../powertools/parameters/BaseProvider.java | 31 ++-- .../parameters/cache/CacheManager.java | 23 ++- .../parameters/cache/DataStore.java | 13 +- .../transform/TransformationManager.java | 43 ++++-- 21 files changed, 535 insertions(+), 191 deletions(-) diff --git a/powertools-parameters/powertools-parameters-appconfig/src/main/java/software/amazon/lambda/powertools/parameters/appconfig/AppConfigProvider.java b/powertools-parameters/powertools-parameters-appconfig/src/main/java/software/amazon/lambda/powertools/parameters/appconfig/AppConfigProvider.java index 37f07ae7a..06d00ffbe 100644 --- a/powertools-parameters/powertools-parameters-appconfig/src/main/java/software/amazon/lambda/powertools/parameters/appconfig/AppConfigProvider.java +++ b/powertools-parameters/powertools-parameters-appconfig/src/main/java/software/amazon/lambda/powertools/parameters/appconfig/AppConfigProvider.java @@ -14,8 +14,8 @@ package software.amazon.lambda.powertools.parameters.appconfig; -import java.util.HashMap; import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; import software.amazon.awssdk.core.SdkBytes; import software.amazon.awssdk.services.appconfigdata.AppConfigDataClient; @@ -46,7 +46,7 @@ public class AppConfigProvider extends BaseProvider { private final AppConfigDataClient client; private final String application; private final String environment; - private final Map establishedSessions = new HashMap<>(); + private final Map establishedSessions = new ConcurrentHashMap<>(); AppConfigProvider(CacheManager cacheManager, TransformationManager transformationManager, AppConfigDataClient client, String environment, String application) { diff --git a/powertools-parameters/powertools-parameters-appconfig/src/test/java/software/amazon/lambda/powertools/parameters/appconfig/AppConfigParamAspectTest.java b/powertools-parameters/powertools-parameters-appconfig/src/test/java/software/amazon/lambda/powertools/parameters/appconfig/AppConfigParamAspectTest.java index df3191632..a32cc20a5 100644 --- a/powertools-parameters/powertools-parameters-appconfig/src/test/java/software/amazon/lambda/powertools/parameters/appconfig/AppConfigParamAspectTest.java +++ b/powertools-parameters/powertools-parameters-appconfig/src/test/java/software/amazon/lambda/powertools/parameters/appconfig/AppConfigParamAspectTest.java @@ -22,10 +22,10 @@ import org.junit.jupiter.api.Test; import org.mockito.Mockito; -public class AppConfigParamAspectTest { +class AppConfigParamAspectTest { @Test - public void parameterInjectedByProvider() throws Exception { + void parameterInjectedByProvider() throws Exception { // Setup our aspect to return a mocked AppConfigProvider String environment = "myEnvironment"; String appName = "myApp"; diff --git a/powertools-parameters/powertools-parameters-dynamodb/src/test/java/software/amazon/lambda/powertools/parameters/dynamodb/DynamoDbParamAspectTest.java b/powertools-parameters/powertools-parameters-dynamodb/src/test/java/software/amazon/lambda/powertools/parameters/dynamodb/DynamoDbParamAspectTest.java index 07e93a7c1..4294eca48 100644 --- a/powertools-parameters/powertools-parameters-dynamodb/src/test/java/software/amazon/lambda/powertools/parameters/dynamodb/DynamoDbParamAspectTest.java +++ b/powertools-parameters/powertools-parameters-dynamodb/src/test/java/software/amazon/lambda/powertools/parameters/dynamodb/DynamoDbParamAspectTest.java @@ -21,10 +21,10 @@ import org.junit.jupiter.api.Test; import org.mockito.Mockito; -public class DynamoDbParamAspectTest { +class DynamoDbParamAspectTest { @Test - public void parameterInjectedByProvider() throws Exception { + void parameterInjectedByProvider() throws Exception { // Setup our aspect to return a mocked DynamoDbProvider String tableName = "my-test-tablename"; String key = "myKey"; diff --git a/powertools-parameters/powertools-parameters-dynamodb/src/test/java/software/amazon/lambda/powertools/parameters/dynamodb/DynamoDbProviderE2ETest.java b/powertools-parameters/powertools-parameters-dynamodb/src/test/java/software/amazon/lambda/powertools/parameters/dynamodb/DynamoDbProviderE2ETest.java index 2695938d8..af2617edf 100644 --- a/powertools-parameters/powertools-parameters-dynamodb/src/test/java/software/amazon/lambda/powertools/parameters/dynamodb/DynamoDbProviderE2ETest.java +++ b/powertools-parameters/powertools-parameters-dynamodb/src/test/java/software/amazon/lambda/powertools/parameters/dynamodb/DynamoDbProviderE2ETest.java @@ -36,10 +36,10 @@ * will move this across. */ @Disabled -public class DynamoDbProviderE2ETest { +class DynamoDbProviderE2ETest { - final String ParamsTestTable = "ddb-params-test"; - final String MultiparamsTestTable = "ddb-multiparams-test"; + private static final String PARAMS_TEST_TABLE = "ddb-params-test"; + private static final String MULTI_PARAMS_TEST_TABLE = "ddb-multiparams-test"; private final DynamoDbClient ddbClient; public DynamoDbProviderE2ETest() { @@ -52,19 +52,19 @@ public DynamoDbProviderE2ETest() { } @Test - public void TestGetValue() { + void TestGetValue() { // Arrange - HashMap testItem = new HashMap(); + Map testItem = new HashMap<>(); testItem.put("id", AttributeValue.fromS("test_param")); testItem.put("value", AttributeValue.fromS("the_value_is_hello!")); ddbClient.putItem(PutItemRequest.builder() - .tableName(ParamsTestTable) + .tableName(PARAMS_TEST_TABLE) .item(testItem) .build()); // Act - DynamoDbProvider provider = makeProvider(ParamsTestTable); + DynamoDbProvider provider = makeProvider(PARAMS_TEST_TABLE); String value = provider.getValue("test_param"); // Assert @@ -72,29 +72,29 @@ public void TestGetValue() { } @Test - public void TestGetValues() { + void TestGetValues() { // Arrange - HashMap testItem = new HashMap(); + Map testItem = new HashMap<>(); testItem.put("id", AttributeValue.fromS("test_param")); testItem.put("sk", AttributeValue.fromS("test_param_part_1")); testItem.put("value", AttributeValue.fromS("the_value_is_hello!")); ddbClient.putItem(PutItemRequest.builder() - .tableName(MultiparamsTestTable) + .tableName(MULTI_PARAMS_TEST_TABLE) .item(testItem) .build()); - HashMap testItem2 = new HashMap(); + Map testItem2 = new HashMap<>(); testItem2.put("id", AttributeValue.fromS("test_param")); testItem2.put("sk", AttributeValue.fromS("test_param_part_2")); testItem2.put("value", AttributeValue.fromS("the_value_is_still_hello!")); ddbClient.putItem(PutItemRequest.builder() - .tableName(MultiparamsTestTable) + .tableName(MULTI_PARAMS_TEST_TABLE) .item(testItem2) .build()); // Act - DynamoDbProvider provider = makeProvider(MultiparamsTestTable); + DynamoDbProvider provider = makeProvider(MULTI_PARAMS_TEST_TABLE); Map values = provider.getMultipleValues("test_param"); // Assert diff --git a/powertools-parameters/powertools-parameters-dynamodb/src/test/java/software/amazon/lambda/powertools/parameters/dynamodb/DynamoDbProviderTest.java b/powertools-parameters/powertools-parameters-dynamodb/src/test/java/software/amazon/lambda/powertools/parameters/dynamodb/DynamoDbProviderTest.java index 68d48b01c..64f29db79 100644 --- a/powertools-parameters/powertools-parameters-dynamodb/src/test/java/software/amazon/lambda/powertools/parameters/dynamodb/DynamoDbProviderTest.java +++ b/powertools-parameters/powertools-parameters-dynamodb/src/test/java/software/amazon/lambda/powertools/parameters/dynamodb/DynamoDbProviderTest.java @@ -45,9 +45,9 @@ import software.amazon.lambda.powertools.parameters.transform.TransformationManager; @ExtendWith(MockitoExtension.class) -public class DynamoDbProviderTest { +class DynamoDbProviderTest { - private final String tableName = "ddb-test-table"; + private static final String TABLE_NAME = "ddb-test-table"; @Mock DynamoDbClient client; @@ -64,19 +64,19 @@ public class DynamoDbProviderTest { private DynamoDbProvider provider; @BeforeEach - public void init() { + void init() { openMocks(this); CacheManager cacheManager = new CacheManager(); - provider = new DynamoDbProvider(cacheManager, transformationManager, client, tableName); + provider = new DynamoDbProvider(cacheManager, transformationManager, client, TABLE_NAME); } @Test - public void getValue() { + void getValue() { // Arrange String key = "Key1"; String expectedValue = "Value1"; - HashMap responseData = new HashMap(); + Map responseData = new HashMap<>(); responseData.put("id", AttributeValue.fromS(key)); responseData.put("value", AttributeValue.fromS(expectedValue)); GetItemResponse response = GetItemResponse.builder() @@ -89,12 +89,12 @@ public void getValue() { // Assert assertThat(value).isEqualTo(expectedValue); - assertThat(getItemValueCaptor.getValue().tableName()).isEqualTo(tableName); + assertThat(getItemValueCaptor.getValue().tableName()).isEqualTo(TABLE_NAME); assertThat(getItemValueCaptor.getValue().key().get("id").s()).isEqualTo(key); } @Test - public void getValueWithNullResultsReturnsNull() { + void getValueWithNullResultsReturnsNull() { // Arrange Mockito.when(client.getItem(getItemValueCaptor.capture())).thenReturn(GetItemResponse.builder() .item(null) @@ -108,7 +108,7 @@ public void getValueWithNullResultsReturnsNull() { } @Test - public void getValueWithoutResultsReturnsNull() { + void getValueWithoutResultsReturnsNull() { // Arrange Mockito.when(client.getItem(getItemValueCaptor.capture())).thenReturn(GetItemResponse.builder() .item(new HashMap<>()) @@ -122,10 +122,10 @@ public void getValueWithoutResultsReturnsNull() { } @Test - public void getValueWithMalformedRowThrows() { + void getValueWithMalformedRowThrows() { // Arrange String key = "Key1"; - HashMap responseData = new HashMap(); + Map responseData = new HashMap<>(); responseData.put("id", AttributeValue.fromS(key)); responseData.put("not-value", AttributeValue.fromS("something")); Mockito.when(client.getItem(getItemValueCaptor.capture())).thenReturn(GetItemResponse.builder() @@ -138,7 +138,7 @@ public void getValueWithMalformedRowThrows() { } @Test - public void getValues() { + void getValues() { // Arrange String key = "Key1"; @@ -146,11 +146,11 @@ public void getValues() { String val1 = "Val1"; String subkey2 = "Subkey2"; String val2 = "Val2"; - HashMap item1 = new HashMap(); + Map item1 = new HashMap<>(); item1.put("id", AttributeValue.fromS(key)); item1.put("sk", AttributeValue.fromS(subkey1)); item1.put("value", AttributeValue.fromS(val1)); - HashMap item2 = new HashMap(); + Map item2 = new HashMap<>(); item2.put("id", AttributeValue.fromS(key)); item2.put("sk", AttributeValue.fromS(subkey2)); item2.put("value", AttributeValue.fromS(val2)); @@ -166,13 +166,13 @@ public void getValues() { assertThat(values.size()).isEqualTo(2); assertThat(values.get(subkey1)).isEqualTo(val1); assertThat(values.get(subkey2)).isEqualTo(val2); - assertThat(queryRequestCaptor.getValue().tableName()).isEqualTo(tableName); + assertThat(queryRequestCaptor.getValue().tableName()).isEqualTo(TABLE_NAME); assertThat(queryRequestCaptor.getValue().keyConditionExpression()).isEqualTo("id = :v_id"); assertThat(queryRequestCaptor.getValue().expressionAttributeValues().get(":v_id").s()).isEqualTo(key); } @Test - public void getValuesWithoutResultsReturnsNull() { + void getValuesWithoutResultsReturnsNull() { // Arrange Mockito.when(client.query(queryRequestCaptor.capture())).thenReturn( QueryResponse.builder().items().build()); @@ -185,10 +185,10 @@ public void getValuesWithoutResultsReturnsNull() { } @Test - public void getMultipleValuesMissingSortKey_throwsException() { + void getMultipleValuesMissingSortKey_throwsException() { // Arrange String key = "Key1"; - HashMap item = new HashMap(); + Map item = new HashMap<>(); item.put("id", AttributeValue.fromS(key)); item.put("value", AttributeValue.fromS("somevalue")); QueryResponse response = QueryResponse.builder() @@ -204,10 +204,10 @@ public void getMultipleValuesMissingSortKey_throwsException() { } @Test - public void getValuesWithMalformedRowThrows() { + void getValuesWithMalformedRowThrows() { // Arrange String key = "Key1"; - HashMap item1 = new HashMap(); + Map item1 = new HashMap<>(); item1.put("id", AttributeValue.fromS(key)); item1.put("sk", AttributeValue.fromS("some-subkey")); item1.put("not-value", AttributeValue.fromS("somevalue")); @@ -224,7 +224,7 @@ public void getValuesWithMalformedRowThrows() { } @Test - public void testDynamoDBBuilderMissingTable_throwsException() { + void testDynamoDBBuilderMissingTable_throwsException() { // Act & Assert assertThatIllegalStateException().isThrownBy(() -> DynamoDbProvider.builder() @@ -233,7 +233,7 @@ public void testDynamoDBBuilderMissingTable_throwsException() { } @Test - public void testDynamoDBBuilder_withoutParameter_shouldHaveDefaultTransformationManager() { + void testDynamoDBBuilder_withoutParameter_shouldHaveDefaultTransformationManager() { // Act DynamoDbProvider dynamoDbProvider = DynamoDbProvider.builder().withTable("test-table") diff --git a/powertools-parameters/powertools-parameters-secrets/src/test/java/software/amazon/lambda/powertools/parameters/secrets/SecretsParamAspectTest.java b/powertools-parameters/powertools-parameters-secrets/src/test/java/software/amazon/lambda/powertools/parameters/secrets/SecretsParamAspectTest.java index 7aa0f0872..5523cbb0e 100644 --- a/powertools-parameters/powertools-parameters-secrets/src/test/java/software/amazon/lambda/powertools/parameters/secrets/SecretsParamAspectTest.java +++ b/powertools-parameters/powertools-parameters-secrets/src/test/java/software/amazon/lambda/powertools/parameters/secrets/SecretsParamAspectTest.java @@ -21,10 +21,10 @@ import org.junit.jupiter.api.Test; import org.mockito.Mockito; -public class SecretsParamAspectTest { +class SecretsParamAspectTest { @Test - public void parameterInjectedByProvider() throws Exception { + void parameterInjectedByProvider() throws Exception { // Setup our aspect to return a mocked SecretsProvider String key = "myKey"; String value = "mySecretValue"; diff --git a/powertools-parameters/powertools-parameters-secrets/src/test/java/software/amazon/lambda/powertools/parameters/secrets/SecretsProviderTest.java b/powertools-parameters/powertools-parameters-secrets/src/test/java/software/amazon/lambda/powertools/parameters/secrets/SecretsProviderTest.java index d0b32874a..a6fbe1c8e 100644 --- a/powertools-parameters/powertools-parameters-secrets/src/test/java/software/amazon/lambda/powertools/parameters/secrets/SecretsProviderTest.java +++ b/powertools-parameters/powertools-parameters-secrets/src/test/java/software/amazon/lambda/powertools/parameters/secrets/SecretsProviderTest.java @@ -40,7 +40,7 @@ import software.amazon.lambda.powertools.parameters.transform.TransformationManager; @ExtendWith(MockitoExtension.class) -public class SecretsProviderTest { +class SecretsProviderTest { @Mock SecretsManagerClient client; @@ -56,13 +56,13 @@ public class SecretsProviderTest { SecretsProvider provider; @BeforeEach - public void init() { + void init() { cacheManager = new CacheManager(); provider = new SecretsProvider(cacheManager, transformationManager, client); } @Test - public void getValue() { + void getValue() { String key = "Key1"; String expectedValue = "Value1"; GetSecretValueResponse response = GetSecretValueResponse.builder().secretString(expectedValue).build(); @@ -76,7 +76,7 @@ public void getValue() { } @Test - public void getValueBase64() { + void getValueBase64() { String key = "Key2"; String expectedValue = "Value2"; byte[] valueb64 = Base64.getEncoder().encode(expectedValue.getBytes()); @@ -91,14 +91,14 @@ public void getValueBase64() { } @Test - public void getMultipleValuesThrowsException() { + void getMultipleValuesThrowsException() { // Act & Assert assertThatRuntimeException().isThrownBy(() -> provider.getMultipleValues("path")) .withMessage("Impossible to get multiple values from AWS Secrets Manager"); } @Test - public void testGetSecretsProvider_withoutParameter_shouldCreateDefaultClient() { + void testGetSecretsProvider_withoutParameter_shouldCreateDefaultClient() { // Act SecretsProvider secretsProvider = SecretsProvider.builder() .build(); @@ -109,7 +109,7 @@ public void testGetSecretsProvider_withoutParameter_shouldCreateDefaultClient() } @Test - public void testGetSecretsProvider_withoutParameter_shouldHaveDefaultTransformationManager() { + void testGetSecretsProvider_withoutParameter_shouldHaveDefaultTransformationManager() { // Act SecretsProvider secretsProvider = SecretsProvider.builder() .build(); diff --git a/powertools-parameters/powertools-parameters-ssm/src/main/java/software/amazon/lambda/powertools/parameters/ssm/SSMProvider.java b/powertools-parameters/powertools-parameters-ssm/src/main/java/software/amazon/lambda/powertools/parameters/ssm/SSMProvider.java index c24b08b84..3cf728219 100644 --- a/powertools-parameters/powertools-parameters-ssm/src/main/java/software/amazon/lambda/powertools/parameters/ssm/SSMProvider.java +++ b/powertools-parameters/powertools-parameters-ssm/src/main/java/software/amazon/lambda/powertools/parameters/ssm/SSMProvider.java @@ -66,8 +66,8 @@ public class SSMProvider extends BaseProvider { private final SsmClient client; - private boolean decrypt = false; - private boolean recursive = false; + private final ThreadLocal decrypt = ThreadLocal.withInitial(() -> false); + private final ThreadLocal recursive = ThreadLocal.withInitial(() -> false); /** * Constructor with custom {@link SsmClient}.
@@ -109,7 +109,7 @@ public static SSMProvider create() { public String getValue(String key) { GetParameterRequest request = GetParameterRequest.builder() .name(key) - .withDecryption(decrypt) + .withDecryption(decrypt.get()) .build(); return client.getParameter(request).parameter().value(); } @@ -122,7 +122,7 @@ public String getValue(String key) { * @return the provider itself in order to chain calls (eg.
provider.withDecryption().get("key")
). */ public SSMProvider withDecryption() { - this.decrypt = true; + this.decrypt.set(true); return this; } @@ -133,7 +133,7 @@ public SSMProvider withDecryption() { * @return the provider itself in order to chain calls (eg.
provider.recursive().getMultiple("key")
). */ public SSMProvider recursive() { - this.recursive = true; + this.recursive.set(true); return this; } @@ -160,8 +160,8 @@ protected Map getMultipleValues(String path) { private Map getMultipleBis(String path, String nextToken) { GetParametersByPathRequest request = GetParametersByPathRequest.builder() .path(path) - .withDecryption(decrypt) - .recursive(recursive) + .withDecryption(decrypt.get()) + .recursive(recursive.get()) .nextToken(nextToken) .build(); @@ -170,12 +170,12 @@ private Map getMultipleBis(String path, String nextToken) { // not using the client.getParametersByPathPaginator() as hardly testable GetParametersByPathResponse res = client.getParametersByPath(request); if (res.hasParameters()) { - res.parameters().forEach(parameter -> - { - /* Standardize the parameter name - The parameter name returned by SSM will contain the full path. - However, for readability, we should return only the part after - the path. + res.parameters().forEach(parameter -> { + /* + * Standardize the parameter name + * The parameter name returned by SSM will contain the full path. + * However, for readability, we should return only the part after + * the path. */ String name = parameter.name(); if (name.startsWith(path)) { @@ -196,8 +196,8 @@ private Map getMultipleBis(String path, String nextToken) { @Override protected void resetToDefaults() { super.resetToDefaults(); - recursive = false; - decrypt = false; + decrypt.remove(); + recursive.remove(); } // For tests purpose only diff --git a/powertools-parameters/powertools-parameters-ssm/src/test/java/software/amazon/lambda/powertools/parameters/ssm/SSMParamAspectTest.java b/powertools-parameters/powertools-parameters-ssm/src/test/java/software/amazon/lambda/powertools/parameters/ssm/SSMParamAspectTest.java index e56d20ffa..abfc1d7fa 100644 --- a/powertools-parameters/powertools-parameters-ssm/src/test/java/software/amazon/lambda/powertools/parameters/ssm/SSMParamAspectTest.java +++ b/powertools-parameters/powertools-parameters-ssm/src/test/java/software/amazon/lambda/powertools/parameters/ssm/SSMParamAspectTest.java @@ -21,13 +21,13 @@ import org.junit.jupiter.api.Test; import org.mockito.Mockito; -public class SSMParamAspectTest { +class SSMParamAspectTest { // This class tests the SSM Param aspect in the same fashion // as the tests for the aspects for the other providers. @Test - public void parameterInjectedByProvider() throws Exception { + void parameterInjectedByProvider() throws Exception { String key = "myKey"; String value = "mySecretValue"; diff --git a/powertools-parameters/powertools-parameters-ssm/src/test/java/software/amazon/lambda/powertools/parameters/ssm/SSMProviderTest.java b/powertools-parameters/powertools-parameters-ssm/src/test/java/software/amazon/lambda/powertools/parameters/ssm/SSMProviderTest.java index db45dc21c..fb475a737 100644 --- a/powertools-parameters/powertools-parameters-ssm/src/test/java/software/amazon/lambda/powertools/parameters/ssm/SSMProviderTest.java +++ b/powertools-parameters/powertools-parameters-ssm/src/test/java/software/amazon/lambda/powertools/parameters/ssm/SSMProviderTest.java @@ -23,6 +23,8 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.concurrent.CountDownLatch; + import org.assertj.core.data.MapEntry; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -32,6 +34,7 @@ import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.MockitoAnnotations; + import software.amazon.awssdk.services.ssm.SsmClient; import software.amazon.awssdk.services.ssm.model.GetParameterRequest; import software.amazon.awssdk.services.ssm.model.GetParameterResponse; @@ -41,7 +44,7 @@ import software.amazon.lambda.powertools.parameters.cache.CacheManager; import software.amazon.lambda.powertools.parameters.transform.TransformationManager; -public class SSMProviderTest { +class SSMProviderTest { @Mock SsmClient client; @@ -60,14 +63,14 @@ public class SSMProviderTest { SSMProvider provider; @BeforeEach - public void init() { + void init() { MockitoAnnotations.openMocks(this); cacheManager = new CacheManager(); provider = new SSMProvider(cacheManager, null, client); } @Test - public void getValue() { + void getValue() { String key = "Key1"; String expectedValue = "Value1"; initMock(expectedValue); @@ -80,7 +83,7 @@ public void getValue() { } @Test - public void getValueDecrypted() { + void getValueDecrypted() { String key = "Key2"; String expectedValue = "Value2"; initMock(expectedValue); @@ -93,7 +96,7 @@ public void getValueDecrypted() { } @Test - public void getMultiple() { + void getMultiple() { List parameters = new ArrayList<>(); parameters.add(Parameter.builder().name("/prod/app1/key1").value("foo1").build()); parameters.add(Parameter.builder().name("/prod/app1/key2").value("foo2").build()); @@ -116,7 +119,7 @@ public void getMultiple() { } @Test - public void getMultipleWithTrailingSlash() { + void getMultipleWithTrailingSlash() { List parameters = new ArrayList<>(); parameters.add(Parameter.builder().name("/prod/app1/key1").value("foo1").build()); parameters.add(Parameter.builder().name("/prod/app1/key2").value("foo2").build()); @@ -139,7 +142,7 @@ public void getMultipleWithTrailingSlash() { } @Test - public void getMultiple_cached_shouldNotCallSSM() { + void getMultiple_cached_shouldNotCallSSM() { List parameters = new ArrayList<>(); parameters.add(Parameter.builder().name("/prod/app1/key1").value("foo1").build()); parameters.add(Parameter.builder().name("/prod/app1/key2").value("foo2").build()); @@ -161,12 +164,12 @@ public void getMultiple_cached_shouldNotCallSSM() { } @Test - public void getMultipleWithNextToken() { + void getMultipleWithNextToken() { List parameters1 = new ArrayList<>(); parameters1.add(Parameter.builder().name("/prod/app1/key1").value("foo1").build()); parameters1.add(Parameter.builder().name("/prod/app1/key2").value("foo2").build()); - GetParametersByPathResponse response1 = - GetParametersByPathResponse.builder().parameters(parameters1).nextToken("123abc").build(); + GetParametersByPathResponse response1 = GetParametersByPathResponse.builder().parameters(parameters1) + .nextToken("123abc").build(); List parameters2 = new ArrayList<>(); parameters2.add(Parameter.builder().name("/prod/app1/key3").value("foo3").build()); @@ -185,25 +188,118 @@ public void getMultipleWithNextToken() { GetParametersByPathRequest request1 = requestParams.get(0); GetParametersByPathRequest request2 = requestParams.get(1); - assertThat(asList(request1, request2)).allSatisfy(req -> - { - assertThat(req.path()).isEqualTo("/prod/app1"); - assertThat(req.withDecryption()).isFalse(); - assertThat(req.recursive()).isFalse(); - }); + assertThat(asList(request1, request2)) + .isNotEmpty() + .allSatisfy(req -> { + assertThat(req.path()).isEqualTo("/prod/app1"); + assertThat(req.withDecryption()).isFalse(); + assertThat(req.recursive()).isFalse(); + }); assertThat(request1.nextToken()).isNull(); assertThat(request2.nextToken()).isEqualTo("123abc"); } @Test - public void testSSMProvider_withoutParameter_shouldHaveDefaultTransformationManager() { + void testSSMProvider_withoutParameter_shouldHaveDefaultTransformationManager() { // Act SSMProvider ssmProvider = SSMProvider.builder() .build(); // Assert - assertDoesNotThrow(()->ssmProvider.withTransformation(json)); + assertDoesNotThrow(() -> ssmProvider.withTransformation(json)); + } + + @Test + void withDecryption_concurrentCalls_shouldBeThreadSafe() throws InterruptedException { + // GIVEN + Parameter param1 = Parameter.builder().value("value1").build(); + Parameter param2 = Parameter.builder().value("value2").build(); + GetParameterResponse response1 = GetParameterResponse.builder().parameter(param1).build(); + GetParameterResponse response2 = GetParameterResponse.builder().parameter(param2).build(); + CountDownLatch latch = new CountDownLatch(2); + Mockito.when(client.getParameter(paramCaptor.capture())) + .thenReturn(response1, response2); + + // WHEN + Thread thread1 = new Thread(() -> { + try { + latch.countDown(); + latch.await(); + provider.withDecryption().getValue("key1"); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + } + }); + + Thread thread2 = new Thread(() -> { + try { + latch.countDown(); + latch.await(); + provider.getValue("key2"); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + } + }); + + thread1.start(); + thread2.start(); + thread1.join(); + thread2.join(); + + // THEN + List requests = paramCaptor.getAllValues(); + assertThat(requests) + .hasSize(2) + .anyMatch(GetParameterRequest::withDecryption) + .anyMatch(r -> !r.withDecryption()); + } + + @Test + void recursive_concurrentCalls_shouldBeThreadSafe() throws InterruptedException { + // GIVEN + List params1 = new ArrayList<>(); + params1.add(Parameter.builder().name("/path1/key1").value("value1").build()); + List params2 = new ArrayList<>(); + params2.add(Parameter.builder().name("/path2/key2").value("value2").build()); + GetParametersByPathResponse response1 = GetParametersByPathResponse.builder().parameters(params1).build(); + GetParametersByPathResponse response2 = GetParametersByPathResponse.builder().parameters(params2).build(); + CountDownLatch latch = new CountDownLatch(2); + Mockito.when(client.getParametersByPath(paramByPathCaptor.capture())) + .thenReturn(response1, response2); + + // WHEN + Thread thread1 = new Thread(() -> { + try { + latch.countDown(); + latch.await(); + provider.recursive().getMultiple("/path1"); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + } + }); + + Thread thread2 = new Thread(() -> { + try { + latch.countDown(); + latch.await(); + provider.getMultiple("/path2"); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + } + }); + + thread1.start(); + thread2.start(); + thread1.join(); + thread2.join(); + + // THEN + List requests = paramByPathCaptor.getAllValues(); + assertThat(requests) + .hasSize(2) + .anyMatch(GetParametersByPathRequest::recursive) + .anyMatch(r -> !r.recursive()); } private void initMock(String expectedValue) { diff --git a/powertools-parameters/powertools-parameters-tests/src/test/java/software/amazon/lambda/powertools/parameters/BaseProviderTest.java b/powertools-parameters/powertools-parameters-tests/src/test/java/software/amazon/lambda/powertools/parameters/BaseProviderTest.java index cbc8f5b30..dd31ce016 100644 --- a/powertools-parameters/powertools-parameters-tests/src/test/java/software/amazon/lambda/powertools/parameters/BaseProviderTest.java +++ b/powertools-parameters/powertools-parameters-tests/src/test/java/software/amazon/lambda/powertools/parameters/BaseProviderTest.java @@ -38,7 +38,7 @@ import software.amazon.lambda.powertools.parameters.transform.TransformationManager; import software.amazon.lambda.powertools.parameters.transform.Transformer; -public class BaseProviderTest { +class BaseProviderTest { Clock clock; CacheManager cacheManager; @@ -47,7 +47,7 @@ public class BaseProviderTest { boolean getFromStore = false; @BeforeEach - public void setup() { + void setup() { clock = Clock.systemDefaultZone(); cacheManager = new CacheManager(); transformationManager = new TransformationManager(); @@ -55,7 +55,7 @@ public void setup() { } @Test - public void get_notCached_shouldGetValue() { + void get_notCached_shouldGetValue() { String foo = provider.get("toto"); assertThat(foo).isEqualTo("valueFromStore"); @@ -63,7 +63,7 @@ public void get_notCached_shouldGetValue() { } @Test - public void get_cached_shouldGetFromCache() { + void get_cached_shouldGetFromCache() { provider.get("foo"); getFromStore = false; @@ -73,7 +73,7 @@ public void get_cached_shouldGetFromCache() { } @Test - public void get_expired_shouldGetValue() { + void get_expired_shouldGetValue() { provider.get("bar"); getFromStore = false; @@ -84,7 +84,7 @@ public void get_expired_shouldGetValue() { } @Test - public void getMultiple_notCached_shouldGetValue() { + void getMultiple_notCached_shouldGetValue() { Map foo = provider.getMultiple("toto"); assertThat(foo.get("toto")).isEqualTo("valueFromStore"); @@ -92,7 +92,7 @@ public void getMultiple_notCached_shouldGetValue() { } @Test - public void getMultiple_cached_shouldGetFromCache() { + void getMultiple_cached_shouldGetFromCache() { provider.getMultiple("foo"); getFromStore = false; @@ -102,7 +102,7 @@ public void getMultiple_cached_shouldGetFromCache() { } @Test - public void getMultiple_expired_shouldGetValue() { + void getMultiple_expired_shouldGetValue() { provider.getMultiple("bar"); getFromStore = false; @@ -113,7 +113,7 @@ public void getMultiple_expired_shouldGetValue() { } @Test - public void get_customTTL_cached_shouldGetFromCache() { + void get_customTTL_cached_shouldGetFromCache() { provider.withMaxAge(12, ChronoUnit.MINUTES).get("key"); getFromStore = false; @@ -124,7 +124,7 @@ public void get_customTTL_cached_shouldGetFromCache() { } @Test - public void get_customTTL_expired_shouldGetValue() { + void get_customTTL_expired_shouldGetValue() { provider.withMaxAge(2, ChronoUnit.MINUTES).get("mykey"); getFromStore = false; @@ -135,7 +135,7 @@ public void get_customTTL_expired_shouldGetValue() { } @Test - public void get_customDefaultTTL_cached_shouldGetFromCache() { + void get_customDefaultTTL_cached_shouldGetFromCache() { provider.cacheManager.setDefaultExpirationTime(Duration.of(12, MINUTES)); provider.get("foobar"); getFromStore = false; @@ -147,7 +147,7 @@ public void get_customDefaultTTL_cached_shouldGetFromCache() { } @Test - public void get_customDefaultTTL_expired_shouldGetValue() { + void get_customDefaultTTL_expired_shouldGetValue() { provider.cacheManager.setDefaultExpirationTime(Duration.of(2, MINUTES)); getFromStore = false; @@ -158,7 +158,7 @@ public void get_customDefaultTTL_expired_shouldGetValue() { } @Test - public void get_customDefaultTTLAndTTL_cached_shouldGetFromCache() { + void get_customDefaultTTLAndTTL_cached_shouldGetFromCache() { provider.get("foobaz"); getFromStore = false; @@ -169,7 +169,7 @@ public void get_customDefaultTTLAndTTL_cached_shouldGetFromCache() { } @Test - public void get_customDefaultTTLAndTTL_expired_shouldGetValue() { + void get_customDefaultTTLAndTTL_expired_shouldGetValue() { provider.cacheManager.setDefaultExpirationTime(Duration.ofMinutes(2)); @@ -183,7 +183,7 @@ public void get_customDefaultTTLAndTTL_expired_shouldGetValue() { } @Test - public void get_basicTransformation_shouldTransformInString() { + void get_basicTransformation_shouldTransformInString() { provider.setValue(Base64.getEncoder().encodeToString("bar".getBytes())); String value = provider.withTransformation(Transformer.base64).get("base64"); @@ -192,20 +192,20 @@ public void get_basicTransformation_shouldTransformInString() { } @Test - public void get_complexTransformation_shouldTransformInObject() { + void get_complexTransformation_shouldTransformInObject() { provider.setValue("{\"foo\":\"Foo\", \"bar\":42, \"baz\":123456789}"); ObjectToDeserialize objectToDeserialize = provider.withTransformation(json).get("foo", ObjectToDeserialize.class); assertThat(objectToDeserialize).matches( - o -> o.getFoo().equals("Foo") + o -> "Foo".equals(o.getFoo()) && o.getBar() == 42 && o.getBaz() == 123456789); } @Test - public void getObject_notCached_shouldGetValue() { + void getObject_notCached_shouldGetValue() { provider.setValue("{\"foo\":\"Foo\", \"bar\":42, \"baz\":123456789}"); ObjectToDeserialize foo = provider.withTransformation(json).get("foo", ObjectToDeserialize.class); @@ -215,7 +215,7 @@ public void getObject_notCached_shouldGetValue() { } @Test - public void getObject_cached_shouldGetFromCache() { + void getObject_cached_shouldGetFromCache() { provider.setValue("{\"foo\":\"Foo\", \"bar\":42, \"baz\":123456789}"); provider.withTransformation(json).get("foo", ObjectToDeserialize.class); @@ -227,7 +227,7 @@ public void getObject_cached_shouldGetFromCache() { } @Test - public void getObject_expired_shouldGetValue() { + void getObject_expired_shouldGetValue() { provider.setValue("{\"foo\":\"Foo\", \"bar\":42, \"baz\":123456789}"); provider.withTransformation(json).get("foo", ObjectToDeserialize.class); @@ -240,7 +240,7 @@ public void getObject_expired_shouldGetValue() { } @Test - public void getObject_customTTL_cached_shouldGetFromCache() { + void getObject_customTTL_cached_shouldGetFromCache() { provider.setValue("{\"foo\":\"Foo\", \"bar\":42, \"baz\":123456789}"); provider.withMaxAge(12, ChronoUnit.MINUTES) @@ -255,7 +255,7 @@ public void getObject_customTTL_cached_shouldGetFromCache() { } @Test - public void getObject_customTTL_expired_shouldGetValue() { + void getObject_customTTL_expired_shouldGetValue() { provider.setValue("{\"foo\":\"Foo\", \"bar\":42, \"baz\":123456789}"); provider.withMaxAge(2, ChronoUnit.MINUTES) @@ -270,7 +270,7 @@ public void getObject_customTTL_expired_shouldGetValue() { } @Test - public void getObject_customDefaultTTL_cached_shouldGetFromCache() { + void getObject_customDefaultTTL_cached_shouldGetFromCache() { provider.setValue("{\"foo\":\"Foo\", \"bar\":42, \"baz\":123456789}"); provider.cacheManager.setDefaultExpirationTime(Duration.of(12, MINUTES)); @@ -286,7 +286,7 @@ public void getObject_customDefaultTTL_cached_shouldGetFromCache() { } @Test - public void getObject_customDefaultTTL_expired_shouldGetValue() { + void getObject_customDefaultTTL_expired_shouldGetValue() { provider.setValue("{\"foo\":\"Foo\", \"bar\":42, \"baz\":123456789}"); provider.cacheManager.setDefaultExpirationTime(Duration.of(2, MINUTES)); @@ -302,7 +302,7 @@ public void getObject_customDefaultTTL_expired_shouldGetValue() { } @Test - public void getObject_customDefaultTTLAndTTL_cached_shouldGetFromCache() { + void getObject_customDefaultTTLAndTTL_cached_shouldGetFromCache() { provider.setValue("{\"foo\":\"Foo\", \"bar\":42, \"baz\":123456789}"); provider.cacheManager.setDefaultExpirationTime(Duration.ofSeconds(5)); @@ -319,7 +319,7 @@ public void getObject_customDefaultTTLAndTTL_cached_shouldGetFromCache() { } @Test - public void getObject_customDefaultTTLAndTTL_expired_shouldGetValue() { + void getObject_customDefaultTTLAndTTL_expired_shouldGetValue() { provider.setValue("{\"foo\":\"Foo\", \"bar\":42, \"baz\":123456789}"); provider.cacheManager.setDefaultExpirationTime(Duration.ofMinutes(2)); @@ -336,7 +336,7 @@ public void getObject_customDefaultTTLAndTTL_expired_shouldGetValue() { } @Test - public void get_noTransformationManager_shouldThrowException() { + void get_noTransformationManager_shouldThrowException() { provider = new BasicProvider(new CacheManager(), null); assertThatIllegalStateException() @@ -344,14 +344,14 @@ public void get_noTransformationManager_shouldThrowException() { } @Test - public void getObject_noTransformationManager_shouldThrowException() { + void getObject_noTransformationManager_shouldThrowException() { assertThatIllegalStateException() .isThrownBy(() -> provider.get("foo", ObjectToDeserialize.class)); } @Test - public void getTwoParams_shouldResetTTLOptionsInBetween() { + void getTwoParams_shouldResetTTLOptionsInBetween() { provider.withMaxAge(50, SECONDS).get("foo50"); provider.get("foo5"); @@ -365,7 +365,7 @@ public void getTwoParams_shouldResetTTLOptionsInBetween() { } @Test - public void getTwoParams_shouldResetTransformationOptionsInBetween() { + void getTwoParams_shouldResetTransformationOptionsInBetween() { provider.setValue(Base64.getEncoder().encodeToString("base64encoded".getBytes())); String foob64 = provider.withTransformation(base64).get("foob64"); @@ -384,7 +384,7 @@ public BasicProvider(CacheManager cacheManager, TransformationManager transforma super(cacheManager, transformationManager); } - public void setValue(String value) { + void setValue(String value) { this.value = value; } diff --git a/powertools-parameters/powertools-parameters-tests/src/test/java/software/amazon/lambda/powertools/parameters/ParamProvidersIntegrationTest.java b/powertools-parameters/powertools-parameters-tests/src/test/java/software/amazon/lambda/powertools/parameters/ParamProvidersIntegrationTest.java index 6b3cf7641..5bc609777 100644 --- a/powertools-parameters/powertools-parameters-tests/src/test/java/software/amazon/lambda/powertools/parameters/ParamProvidersIntegrationTest.java +++ b/powertools-parameters/powertools-parameters-tests/src/test/java/software/amazon/lambda/powertools/parameters/ParamProvidersIntegrationTest.java @@ -46,7 +46,7 @@ import software.amazon.lambda.powertools.parameters.ssm.SSMProvider; @ExtendWith(MockitoExtension.class) -public class ParamProvidersIntegrationTest { +class ParamProvidersIntegrationTest { @Mock SsmClient ssmClient; @@ -66,7 +66,7 @@ public class ParamProvidersIntegrationTest { ArgumentCaptor secretsCaptor; @Test - public void ssmProvider_get() { + void ssmProvider_get() { SSMProvider ssmProvider = SSMProvider.builder() .withClient(ssmClient) .build(); @@ -84,7 +84,7 @@ public void ssmProvider_get() { } @Test - public void ssmProvider_getMultiple() { + void ssmProvider_getMultiple() { SSMProvider ssmProvider = SSMProvider.builder() .withClient(ssmClient) .build(); @@ -111,7 +111,7 @@ public void ssmProvider_getMultiple() { } @Test - public void secretsProvider_get() { + void secretsProvider_get() { SecretsProvider secretsProvider = SecretsProvider.builder() .withClient(secretsManagerClient) .build(); diff --git a/powertools-parameters/powertools-parameters-tests/src/test/java/software/amazon/lambda/powertools/parameters/cache/CacheManagerTest.java b/powertools-parameters/powertools-parameters-tests/src/test/java/software/amazon/lambda/powertools/parameters/cache/CacheManagerTest.java index 2bcfcc566..d22572fad 100644 --- a/powertools-parameters/powertools-parameters-tests/src/test/java/software/amazon/lambda/powertools/parameters/cache/CacheManagerTest.java +++ b/powertools-parameters/powertools-parameters-tests/src/test/java/software/amazon/lambda/powertools/parameters/cache/CacheManagerTest.java @@ -21,23 +21,24 @@ import java.time.Clock; import java.util.Optional; + import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -public class CacheManagerTest { +class CacheManagerTest { CacheManager manager; Clock clock; @BeforeEach - public void setup() { + void setup() { clock = Clock.systemDefaultZone(); manager = new CacheManager(); } @Test - public void getIfNotExpired_notExpired_shouldReturnValue() { + void getIfNotExpired_notExpired_shouldReturnValue() { manager.putInCache("key", "value"); Optional value = manager.getIfNotExpired("key", clock.instant()); @@ -46,7 +47,7 @@ public void getIfNotExpired_notExpired_shouldReturnValue() { } @Test - public void getIfNotExpired_expired_shouldReturnNothing() { + void getIfNotExpired_expired_shouldReturnNothing() { manager.putInCache("key", "value"); Optional value = manager.getIfNotExpired("key", offset(clock, of(6, SECONDS)).instant()); @@ -55,7 +56,7 @@ public void getIfNotExpired_expired_shouldReturnNothing() { } @Test - public void getIfNotExpired_withCustomExpirationTime_notExpired_shouldReturnValue() { + void getIfNotExpired_withCustomExpirationTime_notExpired_shouldReturnValue() { manager.setExpirationTime(of(42, SECONDS)); manager.putInCache("key", "value"); @@ -65,18 +66,17 @@ public void getIfNotExpired_withCustomExpirationTime_notExpired_shouldReturnValu } @Test - public void getIfNotExpired_withCustomDefaultExpirationTime_notExpired_shouldReturnValue() { + void getIfNotExpired_withCustomDefaultExpirationTime_notExpired_shouldReturnValue() { manager.setDefaultExpirationTime(of(42, SECONDS)); manager.putInCache("key", "value"); - Optional value = manager.getIfNotExpired("key", offset(clock, of(40, SECONDS)).instant()); assertThat(value).isPresent().contains("value"); } @Test - public void getIfNotExpired_customDefaultExpirationTime_customExpirationTime_shouldUseExpirationTime() { + void getIfNotExpired_customDefaultExpirationTime_customExpirationTime_shouldUseExpirationTime() { manager.setDefaultExpirationTime(of(42, SECONDS)); manager.setExpirationTime(of(2, SECONDS)); manager.putInCache("key", "value"); @@ -87,7 +87,7 @@ public void getIfNotExpired_customDefaultExpirationTime_customExpirationTime_sho } @Test - public void getIfNotExpired_resetExpirationTime_shouldUseDefaultExpirationTime() { + void getIfNotExpired_resetExpirationTime_shouldUseDefaultExpirationTime() { manager.setDefaultExpirationTime(of(42, SECONDS)); manager.setExpirationTime(of(2, SECONDS)); manager.putInCache("key", "value"); @@ -101,4 +101,96 @@ public void getIfNotExpired_resetExpirationTime_shouldUseDefaultExpirationTime() assertThat(value2).isPresent().contains("value2"); } + @Test + void putInCache_sharedCache_shouldBeAccessibleAcrossThreads() throws InterruptedException { + // GIVEN + Thread thread1 = new Thread(() -> { + manager.setExpirationTime(of(60, SECONDS)); + manager.putInCache("sharedKey", "valueFromThread1"); + manager.resetExpirationTime(); + }); + + Thread thread2 = new Thread(() -> { + manager.setExpirationTime(of(10, SECONDS)); + // Thread 2 should be able to read the value cached by Thread 1 + Optional value = manager.getIfNotExpired("sharedKey", clock.instant()); + assertThat(value).isPresent().contains("valueFromThread1"); + manager.resetExpirationTime(); + }); + + // WHEN + thread1.start(); + thread1.join(); + thread2.start(); + thread2.join(); + + // THEN - Both threads should be able to access the same cached value + Optional value = manager.getIfNotExpired("sharedKey", clock.instant()); + assertThat(value).isPresent().contains("valueFromThread1"); + } + + @Test + void putInCache_concurrentCalls_shouldBeThreadSafe() throws InterruptedException { + // GIVEN + int threadCount = 10; + Thread[] threads = new Thread[threadCount]; + boolean[] success = new boolean[threadCount]; + Clock testClock = Clock.systemDefaultZone(); + + // WHEN - Multiple threads set different expiration times and cache values concurrently + for (int i = 0; i < threadCount; i++) { + final int threadIndex = i; + final int expirationSeconds = (i % 2 == 0) ? 60 : 10; // Alternate between 60s and 10s + + threads[i] = new Thread(() -> { + try { + manager.setExpirationTime(of(expirationSeconds, SECONDS)); + manager.putInCache("key" + threadIndex, "value" + threadIndex); + manager.resetExpirationTime(); + success[threadIndex] = true; + } catch (Exception e) { + success[threadIndex] = false; + } + }); + } + + // Start all threads + for (Thread thread : threads) { + thread.start(); + } + + // Wait for all threads to complete + for (Thread thread : threads) { + thread.join(); + } + + // THEN - All threads should complete successfully + for (boolean result : success) { + assertThat(result).isTrue(); + } + + // THEN - Each cached value should have the correct expiration time + // Values with 60s TTL should still be present after 9s, values with 10s should expire after 11s + for (int i = 0; i < threadCount; i++) { + final int expirationSeconds = (i % 2 == 0) ? 60 : 10; + + // Check that value is still present just before expiration + Optional valueBeforeExpiry = manager.getIfNotExpired("key" + i, + offset(testClock, of(expirationSeconds - 1, SECONDS)).instant()); + assertThat(valueBeforeExpiry) + .as("Thread %d with %ds expiration should still have value after %ds", i, expirationSeconds, + expirationSeconds - 1) + .isPresent() + .contains("value" + i); + + // Check that value expires after the TTL + Optional valueAfterExpiry = manager.getIfNotExpired("key" + i, + offset(testClock, of(expirationSeconds + 1, SECONDS)).instant()); + assertThat(valueAfterExpiry) + .as("Thread %d with %ds expiration should not have value after %ds", i, expirationSeconds, + expirationSeconds + 1) + .isNotPresent(); + } + } + } diff --git a/powertools-parameters/powertools-parameters-tests/src/test/java/software/amazon/lambda/powertools/parameters/cache/DataStoreTest.java b/powertools-parameters/powertools-parameters-tests/src/test/java/software/amazon/lambda/powertools/parameters/cache/DataStoreTest.java index e86ded9be..0de31e63d 100644 --- a/powertools-parameters/powertools-parameters-tests/src/test/java/software/amazon/lambda/powertools/parameters/cache/DataStoreTest.java +++ b/powertools-parameters/powertools-parameters-tests/src/test/java/software/amazon/lambda/powertools/parameters/cache/DataStoreTest.java @@ -24,35 +24,35 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -public class DataStoreTest { +class DataStoreTest { Clock clock; DataStore store; @BeforeEach - public void setup() { + void setup() { clock = Clock.systemDefaultZone(); store = new DataStore(); } @Test - public void put_shouldInsertInStore() { + void put_shouldInsertInStore() { store.put("key", "value", Instant.now()); assertThat(store.get("key")).isEqualTo("value"); } @Test - public void get_invalidKey_shouldReturnNull() { + void get_invalidKey_shouldReturnNull() { assertThat(store.get("key")).isNull(); } @Test - public void hasExpired_invalidKey_shouldReturnTrue() { + void hasExpired_invalidKey_shouldReturnTrue() { assertThat(store.hasExpired("key", clock.instant())).isTrue(); } @Test - public void hasExpired_notExpired_shouldReturnFalse() { + void hasExpired_notExpired_shouldReturnFalse() { Instant now = Instant.now(); store.put("key", "value", now.plus(10, SECONDS)); @@ -61,7 +61,7 @@ public void hasExpired_notExpired_shouldReturnFalse() { } @Test - public void hasExpired_expired_shouldReturnTrueAndRemoveElement() { + void hasExpired_expired_shouldReturnTrueAndRemoveElement() { Instant now = Instant.now(); store.put("key", "value", now.plus(10, SECONDS)); diff --git a/powertools-parameters/powertools-parameters-tests/src/test/java/software/amazon/lambda/powertools/parameters/transform/Base64TransformerTest.java b/powertools-parameters/powertools-parameters-tests/src/test/java/software/amazon/lambda/powertools/parameters/transform/Base64TransformerTest.java index ea713b552..8dbddacf6 100644 --- a/powertools-parameters/powertools-parameters-tests/src/test/java/software/amazon/lambda/powertools/parameters/transform/Base64TransformerTest.java +++ b/powertools-parameters/powertools-parameters-tests/src/test/java/software/amazon/lambda/powertools/parameters/transform/Base64TransformerTest.java @@ -21,10 +21,10 @@ import org.junit.jupiter.api.Test; import software.amazon.lambda.powertools.parameters.exception.TransformationException; -public class Base64TransformerTest { +class Base64TransformerTest { @Test - public void transform_base64_shouldTransformInString() { + void transform_base64_shouldTransformInString() { Base64Transformer transformer = new Base64Transformer(); String s = transformer.applyTransformation(Base64.getEncoder().encodeToString("foobar".getBytes())); @@ -33,7 +33,7 @@ public void transform_base64_shouldTransformInString() { } @Test - public void transform_base64WrongFormat_shouldThrowException() { + void transform_base64WrongFormat_shouldThrowException() { Base64Transformer transformer = new Base64Transformer(); assertThatExceptionOfType(TransformationException.class) diff --git a/powertools-parameters/powertools-parameters-tests/src/test/java/software/amazon/lambda/powertools/parameters/transform/JsonTransformerTest.java b/powertools-parameters/powertools-parameters-tests/src/test/java/software/amazon/lambda/powertools/parameters/transform/JsonTransformerTest.java index 5cb980cc7..48cebb6b0 100644 --- a/powertools-parameters/powertools-parameters-tests/src/test/java/software/amazon/lambda/powertools/parameters/transform/JsonTransformerTest.java +++ b/powertools-parameters/powertools-parameters-tests/src/test/java/software/amazon/lambda/powertools/parameters/transform/JsonTransformerTest.java @@ -22,23 +22,23 @@ import org.junit.jupiter.api.Test; import software.amazon.lambda.powertools.parameters.exception.TransformationException; -public class JsonTransformerTest { +class JsonTransformerTest { @Test - public void transform_json_shouldTransformInObject() throws TransformationException { + void transform_json_shouldTransformInObject() throws TransformationException { JsonTransformer transformation = new JsonTransformer<>(); ObjectToDeserialize objectToDeserialize = transformation.applyTransformation("{\"foo\":\"Foo\", \"bar\":42, \"baz\":123456789}", ObjectToDeserialize.class); assertThat(objectToDeserialize).matches( - o -> o.getFoo().equals("Foo") + o -> "Foo".equals(o.getFoo()) && o.getBar() == 42 && o.getBaz() == 123456789); } @Test - public void transform_json_shouldTransformInHashMap() throws TransformationException { + void transform_json_shouldTransformInHashMap() throws TransformationException { JsonTransformer transformation = new JsonTransformer<>(); Map map = @@ -50,7 +50,7 @@ public void transform_json_shouldTransformInHashMap() throws TransformationExcep } @Test - public void transform_badJson_shouldThrowException() { + void transform_badJson_shouldThrowException() { JsonTransformer transformation = new JsonTransformer<>(); assertThatExceptionOfType(TransformationException.class) diff --git a/powertools-parameters/powertools-parameters-tests/src/test/java/software/amazon/lambda/powertools/parameters/transform/TransformationManagerTest.java b/powertools-parameters/powertools-parameters-tests/src/test/java/software/amazon/lambda/powertools/parameters/transform/TransformationManagerTest.java index 39e69f9e0..fad6f5391 100644 --- a/powertools-parameters/powertools-parameters-tests/src/test/java/software/amazon/lambda/powertools/parameters/transform/TransformationManagerTest.java +++ b/powertools-parameters/powertools-parameters-tests/src/test/java/software/amazon/lambda/powertools/parameters/transform/TransformationManagerTest.java @@ -21,41 +21,44 @@ import static software.amazon.lambda.powertools.parameters.transform.Transformer.json; import java.util.Base64; +import java.util.concurrent.CountDownLatch; + import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; + import software.amazon.lambda.powertools.parameters.exception.TransformationException; -public class TransformationManagerTest { +class TransformationManagerTest { TransformationManager manager; Class basicTransformer = BasicTransformer.class; @BeforeEach - public void setup() { + void setup() { manager = new TransformationManager(); } @Test - public void setTransformer_shouldTransform() { + void setTransformer_shouldTransform() { manager.setTransformer(json); assertThat(manager.shouldTransform()).isTrue(); } @Test - public void notSetTransformer_shouldNotTransform() { + void notSetTransformer_shouldNotTransform() { assertThat(manager.shouldTransform()).isFalse(); } @Test - public void performBasicTransformation_noTransformer_shouldThrowException() { + void performBasicTransformation_noTransformer_shouldThrowException() { assertThatIllegalStateException() .isThrownBy(() -> manager.performBasicTransformation("value")); } @Test - public void performBasicTransformation_notBasicTransformer_shouldThrowException() { + void performBasicTransformation_notBasicTransformer_shouldThrowException() { manager.setTransformer(json); assertThatIllegalStateException() @@ -63,7 +66,7 @@ public void performBasicTransformation_notBasicTransformer_shouldThrowException( } @Test - public void performBasicTransformation_abstractTransformer_throwsTransformationException() { + void performBasicTransformation_abstractTransformer_throwsTransformationException() { manager.setTransformer(basicTransformer); assertThatExceptionOfType(TransformationException.class) @@ -71,7 +74,7 @@ public void performBasicTransformation_abstractTransformer_throwsTransformationE } @Test - public void performBasicTransformation_shouldPerformTransformation() { + void performBasicTransformation_shouldPerformTransformation() { manager.setTransformer(base64); String expectedValue = "bar"; @@ -81,27 +84,136 @@ public void performBasicTransformation_shouldPerformTransformation() { } @Test - public void performComplexTransformation_noTransformer_shouldThrowException() { + void performComplexTransformation_noTransformer_shouldThrowException() { assertThatIllegalStateException() .isThrownBy(() -> manager.performComplexTransformation("value", ObjectToDeserialize.class)); } @Test - public void performComplexTransformation_shouldPerformTransformation() { + void performComplexTransformation_shouldPerformTransformation() { manager.setTransformer(json); - ObjectToDeserialize object = - manager.performComplexTransformation("{\"foo\":\"Foo\", \"bar\":42, \"baz\":123456789}", - ObjectToDeserialize.class); + ObjectToDeserialize object = manager.performComplexTransformation( + "{\"foo\":\"Foo\", \"bar\":42, \"baz\":123456789}", + ObjectToDeserialize.class); assertThat(object).isNotNull(); } @Test - public void performComplexTransformation_throwsTransformationException() { + void performComplexTransformation_throwsTransformationException() { manager.setTransformer(basicTransformer); assertThatExceptionOfType(TransformationException.class) .isThrownBy(() -> manager.performComplexTransformation("value", ObjectToDeserialize.class)); } + + @Test + void unsetTransformer_shouldCleanUpThreadLocal() { + // GIVEN + manager.setTransformer(json); + assertThat(manager.shouldTransform()).isTrue(); + + // WHEN + manager.unsetTransformer(); + + // THEN + assertThat(manager.shouldTransform()).isFalse(); + } + + @Test + void setTransformer_concurrentCalls_shouldBeThreadSafe() throws InterruptedException { + // GIVEN + boolean[] success = new boolean[2]; + CountDownLatch latch = new CountDownLatch(2); + + Thread thread1 = new Thread(() -> { + try { + latch.countDown(); + latch.await(); + manager.setTransformer(json); + // Thread 1 expects json transformer + String result = manager.performComplexTransformation( + "{\"foo\":\"Foo\", \"bar\":42, \"baz\":123456789}", + ObjectToDeserialize.class).getFoo(); + success[0] = "Foo".equals(result); + } catch (Exception e) { + e.printStackTrace(); + success[0] = false; + } + }); + + Thread thread2 = new Thread(() -> { + try { + latch.countDown(); + latch.await(); + manager.setTransformer(base64); + // Thread 2 expects base64 transformer + String result = manager.performBasicTransformation( + Base64.getEncoder().encodeToString("bar".getBytes())); + success[1] = "bar".equals(result); + } catch (Exception e) { + e.printStackTrace(); + success[1] = false; + } + }); + + // WHEN - Start both threads concurrently + thread1.start(); + thread2.start(); + + // THEN - Both threads should complete without errors + thread1.join(); + thread2.join(); + + assertThat(success[0]).as("Thread 1 with JSON transformer should succeed").isTrue(); + assertThat(success[1]).as("Thread 2 with Base64 transformer should succeed").isTrue(); + } + + @Test + void unsetTransformer_concurrentCalls_shouldNotAffectOtherThreads() throws InterruptedException { + // GIVEN + boolean[] success = new boolean[2]; + CountDownLatch latch = new CountDownLatch(2); + + Thread thread1 = new Thread(() -> { + try { + latch.countDown(); + latch.await(); + manager.setTransformer(json); + // Thread 1 should still have json transformer even if thread 2 unsets + assertThat(manager.shouldTransform()).isTrue(); + success[0] = true; + } catch (Exception e) { + e.printStackTrace(); + success[0] = false; + } + }); + + Thread thread2 = new Thread(() -> { + try { + latch.countDown(); + latch.await(); + manager.setTransformer(base64); + manager.unsetTransformer(); + // Thread 2 should have no transformer after unset + assertThat(manager.shouldTransform()).isFalse(); + success[1] = true; + } catch (Exception e) { + e.printStackTrace(); + success[1] = false; + } + }); + + // WHEN + thread1.start(); + thread2.start(); + + // THEN + thread1.join(); + thread2.join(); + + assertThat(success[0]).as("Thread 1 should still have transformer").isTrue(); + assertThat(success[1]).as("Thread 2 should have unset transformer").isTrue(); + } } diff --git a/powertools-parameters/src/main/java/software/amazon/lambda/powertools/parameters/BaseProvider.java b/powertools-parameters/src/main/java/software/amazon/lambda/powertools/parameters/BaseProvider.java index bedace28c..d83ff0298 100644 --- a/powertools-parameters/src/main/java/software/amazon/lambda/powertools/parameters/BaseProvider.java +++ b/powertools-parameters/src/main/java/software/amazon/lambda/powertools/parameters/BaseProvider.java @@ -19,7 +19,8 @@ import java.time.Instant; import java.time.temporal.ChronoUnit; import java.util.Map; -import software.amazon.awssdk.annotations.NotThreadSafe; + +import software.amazon.awssdk.annotations.ThreadSafe; import software.amazon.lambda.powertools.parameters.cache.CacheManager; import software.amazon.lambda.powertools.parameters.exception.TransformationException; import software.amazon.lambda.powertools.parameters.transform.BasicTransformer; @@ -28,8 +29,20 @@ /** * Base class for all parameter providers. + *

+ * This class is thread-safe when used as a singleton in multi-threaded environments. + * Configuration methods ({@link #withMaxAge(int, ChronoUnit)}, {@link #withTransformation(Class)}) + * use thread-local storage to support concurrent requests with different requirements. + *

+ * The cache and transformation managers are thread-safe with zero synchronization overhead, + * using lock-free data structures (ThreadLocal, AtomicReference, ConcurrentHashMap) for optimal performance. + * The cache storage is shared across all threads, allowing cached values to be reused across requests. + *

+ * Implementation Requirements: Subclasses must ensure that implementations of + * {@link #getValue(String)} and {@link #getMultipleValues(String)} are thread-safe to + * guarantee overall thread-safety of the provider. */ -@NotThreadSafe +@ThreadSafe public abstract class BaseProvider implements ParamProvider { public static final String PARAMETERS = "parameters"; @@ -91,6 +104,7 @@ public BaseProvider withMaxAge(int maxAge, ChronoUnit unit) { * @param transformerClass Class of the transformer to apply. For convenience, you can use {@link Transformer#json} or {@link Transformer#base64} shortcuts. * @return the provider itself in order to chain calls (eg.

provider.withTransformation(json).get("key", MyObject.class)
). */ + @SuppressWarnings("rawtypes") // Transformer type parameter determined at runtime public BaseProvider withTransformation(Class transformerClass) { if (transformationManager == null) { throw new IllegalStateException( @@ -110,12 +124,12 @@ public BaseProvider withTransformation(Class transformerC * eg. getMultiple("/foo/bar") will retrieve [key="baz", value="valuebaz"] for parameter "/foo/bar/baz" */ @Override + @SuppressWarnings("unchecked") // Cache stores Object, safe cast as we control what's stored public Map getMultiple(String path) { // remove trailing whitespace String pathWithoutTrailingSlash = path.replaceAll("\\/+$", ""); try { - return (Map) cacheManager.getIfNotExpired(pathWithoutTrailingSlash, now()).orElseGet(() -> - { + return (Map) cacheManager.getIfNotExpired(pathWithoutTrailingSlash, now()).orElseGet(() -> { Map params = getMultipleValues(pathWithoutTrailingSlash); cacheManager.putInCache(pathWithoutTrailingSlash, params); @@ -143,8 +157,7 @@ public Map getMultiple(String path) { @Override public String get(final String key) { try { - return (String) cacheManager.getIfNotExpired(key, now()).orElseGet(() -> - { + return (String) cacheManager.getIfNotExpired(key, now()).orElseGet(() -> { String value = getValue(key); String transformedValue = value; @@ -175,10 +188,10 @@ public String get(final String key) { * @throws TransformationException if the transformation could not be done, because of a wrong format or an error during transformation. */ @Override + @SuppressWarnings("unchecked") // Cache stores Object, safe cast as we control what's stored public T get(final String key, final Class targetClass) { try { - return (T) cacheManager.getIfNotExpired(key, now()).orElseGet(() -> - { + return (T) cacheManager.getIfNotExpired(key, now()).orElseGet(() -> { String value = getValue(key); if (transformationManager == null) { @@ -207,7 +220,7 @@ protected Instant now() { protected void resetToDefaults() { cacheManager.resetExpirationTime(); if (transformationManager != null) { - transformationManager.setTransformer(null); + transformationManager.unsetTransformer(); } } diff --git a/powertools-parameters/src/main/java/software/amazon/lambda/powertools/parameters/cache/CacheManager.java b/powertools-parameters/src/main/java/software/amazon/lambda/powertools/parameters/cache/CacheManager.java index b868cb642..99c281b3d 100644 --- a/powertools-parameters/src/main/java/software/amazon/lambda/powertools/parameters/cache/CacheManager.java +++ b/powertools-parameters/src/main/java/software/amazon/lambda/powertools/parameters/cache/CacheManager.java @@ -20,18 +20,27 @@ import java.time.Duration; import java.time.Instant; import java.util.Optional; +import java.util.concurrent.atomic.AtomicReference; +/** + * Manages caching of parameter values with configurable expiration times. + *

+ * This class is thread-safe. The cache storage is shared across all threads, + * while expiration time configuration is thread-local to support concurrent + * requests with different cache TTL requirements. + */ public class CacheManager { static final Duration DEFAULT_MAX_AGE_SECS = Duration.of(5, SECONDS); private final DataStore store; - private Duration defaultMaxAge = DEFAULT_MAX_AGE_SECS; - private Duration maxAge = defaultMaxAge; + private final AtomicReference defaultMaxAge = new AtomicReference<>(DEFAULT_MAX_AGE_SECS); + private final ThreadLocal maxAge = ThreadLocal.withInitial(() -> null); public CacheManager() { store = new DataStore(); } + @SuppressWarnings("unchecked") // DataStore stores Object, safe cast as we control what's stored public Optional getIfNotExpired(String key, Instant now) { if (store.hasExpired(key, now)) { return Optional.empty(); @@ -40,19 +49,19 @@ public Optional getIfNotExpired(String key, Instant now) { } public void setExpirationTime(Duration duration) { - this.maxAge = duration; + this.maxAge.set(duration); } public void setDefaultExpirationTime(Duration duration) { - this.defaultMaxAge = duration; - this.maxAge = duration; + this.defaultMaxAge.set(duration); } public void putInCache(String key, T value) { - store.put(key, value, Clock.systemDefaultZone().instant().plus(maxAge)); + Duration effectiveMaxAge = maxAge.get() != null ? maxAge.get() : defaultMaxAge.get(); + store.put(key, value, Clock.systemDefaultZone().instant().plus(effectiveMaxAge)); } public void resetExpirationTime() { - maxAge = defaultMaxAge; + maxAge.remove(); } } diff --git a/powertools-parameters/src/main/java/software/amazon/lambda/powertools/parameters/cache/DataStore.java b/powertools-parameters/src/main/java/software/amazon/lambda/powertools/parameters/cache/DataStore.java index 737faa353..4b6350cb5 100644 --- a/powertools-parameters/src/main/java/software/amazon/lambda/powertools/parameters/cache/DataStore.java +++ b/powertools-parameters/src/main/java/software/amazon/lambda/powertools/parameters/cache/DataStore.java @@ -15,6 +15,7 @@ package software.amazon.lambda.powertools.parameters.cache; import java.time.Instant; +import java.util.Map; import java.util.concurrent.ConcurrentHashMap; /** @@ -22,7 +23,7 @@ */ public class DataStore { - private final ConcurrentHashMap store; + private final Map store; public DataStore() { this.store = new ConcurrentHashMap<>(); @@ -32,8 +33,8 @@ public void put(String key, Object value, Instant time) { store.put(key, new ValueNode(value, time)); } - public void remove(String Key) { - store.remove(Key); + public void remove(String key) { + store.remove(key); } public Object get(String key) { @@ -42,7 +43,11 @@ public Object get(String key) { } public boolean hasExpired(String key, Instant now) { - boolean hasExpired = !store.containsKey(key) || now.isAfter(store.get(key).time); + ValueNode node = store.get(key); + if (node == null) { + return true; + } + boolean hasExpired = now.isAfter(node.time); // Auto-clean if the parameter has expired if (hasExpired) { remove(key); diff --git a/powertools-parameters/src/main/java/software/amazon/lambda/powertools/parameters/transform/TransformationManager.java b/powertools-parameters/src/main/java/software/amazon/lambda/powertools/parameters/transform/TransformationManager.java index d3fbce14f..bddbf81d9 100644 --- a/powertools-parameters/src/main/java/software/amazon/lambda/powertools/parameters/transform/TransformationManager.java +++ b/powertools-parameters/src/main/java/software/amazon/lambda/powertools/parameters/transform/TransformationManager.java @@ -15,31 +15,44 @@ package software.amazon.lambda.powertools.parameters.transform; import java.lang.reflect.InvocationTargetException; + import software.amazon.lambda.powertools.parameters.exception.TransformationException; /** * Manager in charge of transforming parameter values in another format.
* Leverages a {@link Transformer} in order to perform the transformation.
* The transformer must be passed with {@link #setTransformer(Class)} before performing any transform operation. + *

+ * This class is thread-safe. Transformer configuration is thread-local to support concurrent + * requests with different transformation requirements. */ public class TransformationManager { - private Class transformer = null; + private final ThreadLocal> transformer = ThreadLocal.withInitial(() -> null); /** * Set the {@link Transformer} to use for transformation. Must be called before any transformation. * * @param transformerClass class of the {@link Transformer} */ + @SuppressWarnings("rawtypes") // Transformer type parameter determined at runtime public void setTransformer(Class transformerClass) { - this.transformer = transformerClass; + this.transformer.set(transformerClass); + } + + /** + * Unset the {@link Transformer} and clean up thread-local storage. + * Should be called after transformation is complete to prevent memory leaks. + */ + public void unsetTransformer() { + this.transformer.remove(); } /** * @return true if a {@link Transformer} has been passed to the Manager */ public boolean shouldTransform() { - return transformer != null; + return transformer.get() != null; } /** @@ -48,20 +61,22 @@ public boolean shouldTransform() { * @param value the value to transform * @return the value transformed */ + @SuppressWarnings("rawtypes") // Transformer type parameter determined at runtime public String performBasicTransformation(String value) { - if (transformer == null) { + Class transformerClass = transformer.get(); + if (transformerClass == null) { throw new IllegalStateException( "You cannot perform a transformation without Transformer, use the provider.withTransformation() method to specify it."); } - if (!BasicTransformer.class.isAssignableFrom(transformer)) { + if (!BasicTransformer.class.isAssignableFrom(transformerClass)) { throw new IllegalStateException("Wrong Transformer for a String, choose a BasicTransformer."); } try { - BasicTransformer basicTransformer = - (BasicTransformer) transformer.getDeclaredConstructor().newInstance(null); + BasicTransformer basicTransformer = (BasicTransformer) transformerClass.getDeclaredConstructor() + .newInstance(null); return basicTransformer.applyTransformation(value); - } catch (InstantiationException | IllegalAccessException | NoSuchMethodException | - InvocationTargetException e) { + } catch (InstantiationException | IllegalAccessException | NoSuchMethodException + | InvocationTargetException e) { throw new TransformationException(e); } } @@ -73,17 +88,19 @@ public String performBasicTransformation(String value) { * @param targetClass the type of the target object. * @return the value transformed in an object ot type T. */ + @SuppressWarnings("rawtypes") // Transformer type parameter determined at runtime public T performComplexTransformation(String value, Class targetClass) { - if (transformer == null) { + Class transformerClass = transformer.get(); + if (transformerClass == null) { throw new IllegalStateException( "You cannot perform a transformation without Transformer, use the provider.withTransformation() method to specify it."); } try { - Transformer complexTransformer = transformer.getDeclaredConstructor().newInstance(null); + Transformer complexTransformer = transformerClass.getDeclaredConstructor().newInstance(null); return complexTransformer.applyTransformation(value, targetClass); - } catch (InstantiationException | IllegalAccessException | NoSuchMethodException | - InvocationTargetException e) { + } catch (InstantiationException | IllegalAccessException | NoSuchMethodException + | InvocationTargetException e) { throw new TransformationException(e); } } From 03ca72b27463e5848f582c689b474cdb92643f61 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 14 Nov 2025 09:27:22 +0100 Subject: [PATCH 035/202] chore: bump aws.sdk.version from 2.38.3 to 2.38.5 (#2287) Bumps `aws.sdk.version` from 2.38.3 to 2.38.5. Updates `software.amazon.awssdk:bom` from 2.38.3 to 2.38.5 Updates `software.amazon.awssdk:http-client-spi` from 2.38.3 to 2.38.5 Updates `software.amazon.awssdk:url-connection-client` from 2.38.2 to 2.38.5 Updates `software.amazon.awssdk:s3` from 2.38.2 to 2.38.5 Updates `software.amazon.awssdk:dynamodb` from 2.38.3 to 2.38.5 Updates `software.amazon.awssdk:lambda` from 2.38.3 to 2.38.5 Updates `software.amazon.awssdk:kinesis` from 2.38.2 to 2.38.5 Updates `software.amazon.awssdk:cloudwatch` from 2.38.3 to 2.38.5 Updates `software.amazon.awssdk:xray` from 2.38.3 to 2.38.5 Updates `software.amazon.awssdk:sqs` from 2.38.2 to 2.38.5 Updates `software.amazon.awssdk:cloudformation` from 2.38.3 to 2.38.5 Updates `software.amazon.awssdk:sts` from 2.38.3 to 2.38.5 --- updated-dependencies: - dependency-name: software.amazon.awssdk:bom dependency-version: 2.38.5 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: software.amazon.awssdk:http-client-spi dependency-version: 2.38.5 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: software.amazon.awssdk:url-connection-client dependency-version: 2.38.5 dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: software.amazon.awssdk:s3 dependency-version: 2.38.5 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: software.amazon.awssdk:dynamodb dependency-version: 2.38.5 dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: software.amazon.awssdk:lambda dependency-version: 2.38.5 dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: software.amazon.awssdk:kinesis dependency-version: 2.38.5 dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: software.amazon.awssdk:cloudwatch dependency-version: 2.38.5 dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: software.amazon.awssdk:xray dependency-version: 2.38.5 dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: software.amazon.awssdk:sqs dependency-version: 2.38.5 dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: software.amazon.awssdk:cloudformation dependency-version: 2.38.5 dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: software.amazon.awssdk:sts dependency-version: 2.38.5 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- examples/powertools-examples-cloudformation/pom.xml | 2 +- pom.xml | 2 +- powertools-e2e-tests/handlers/pom.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/powertools-examples-cloudformation/pom.xml b/examples/powertools-examples-cloudformation/pom.xml index 74ced3a4f..824b98da9 100644 --- a/examples/powertools-examples-cloudformation/pom.xml +++ b/examples/powertools-examples-cloudformation/pom.xml @@ -14,7 +14,7 @@ 11 1.4.0 3.16.1 - 2.38.3 + 2.38.5 1.9.20.1 diff --git a/pom.xml b/pom.xml index 48be39d47..536ba6002 100644 --- a/pom.xml +++ b/pom.xml @@ -85,7 +85,7 @@ 2.25.2 2.0.17 2.20.1 - 2.38.3 + 2.38.5 2.20.0 2.2.0 UTF-8 diff --git a/powertools-e2e-tests/handlers/pom.xml b/powertools-e2e-tests/handlers/pom.xml index afc21131f..7838dfc03 100644 --- a/powertools-e2e-tests/handlers/pom.xml +++ b/powertools-e2e-tests/handlers/pom.xml @@ -19,7 +19,7 @@ 3.6.1 1.14.1 3.14.1 - 2.38.3 + 2.38.5 1.9.20.1 true From 4e83d8a3b5cfbdb26d6ae5db81393d9c47c78df5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 14 Nov 2025 09:27:30 +0100 Subject: [PATCH 036/202] chore: bump commons-io:commons-io from 2.20.0 to 2.21.0 (#2288) Bumps [commons-io:commons-io](https://github.com/apache/commons-io) from 2.20.0 to 2.21.0. - [Changelog](https://github.com/apache/commons-io/blob/master/RELEASE-NOTES.txt) - [Commits](https://github.com/apache/commons-io/compare/rel/commons-io-2.20.0...rel/commons-io-2.21.0) --- updated-dependencies: - dependency-name: commons-io:commons-io dependency-version: 2.21.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> --- powertools-e2e-tests/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/powertools-e2e-tests/pom.xml b/powertools-e2e-tests/pom.xml index 998c6a803..6dd94910a 100644 --- a/powertools-e2e-tests/pom.xml +++ b/powertools-e2e-tests/pom.xml @@ -95,7 +95,7 @@ commons-io commons-io - 2.20.0 + 2.21.0 org.junit.jupiter From 3ed0e0dea3f5c5988dbc8e34ccfb7ffb207f6133 Mon Sep 17 00:00:00 2001 From: Philipp Page Date: Mon, 17 Nov 2025 10:56:22 +0100 Subject: [PATCH 037/202] improv(metrics): Add thread-safety to Metrics utility through request-scoped Metrics instance management (#2294) * Add proxy to manage thread local metrics provider instances to achieve zero-lock thread-safety. * Refactor from inheritable thread local to tracking by trace id. Similar to log buffer. * Do not hard code JVM system property for trace id. * Fix PMD findings. --- .../powertools/metrics/MetricsFactory.java | 18 +- .../internal/RequestScopedMetricsProxy.java | 156 ++++++++++ .../metrics/ConfigurationPrecedenceTest.java | 13 +- .../metrics/MetricsBuilderTest.java | 18 +- .../metrics/MetricsFactoryTest.java | 70 ++++- .../metrics/RequestHandlerTest.java | 2 +- .../internal/EmfMetricsLoggerTest.java | 14 +- .../internal/LambdaMetricsAspectTest.java | 8 +- .../RequestScopedMetricsProxyTest.java | 277 ++++++++++++++++++ 9 files changed, 536 insertions(+), 40 deletions(-) create mode 100644 powertools-metrics/src/main/java/software/amazon/lambda/powertools/metrics/internal/RequestScopedMetricsProxy.java create mode 100644 powertools-metrics/src/test/java/software/amazon/lambda/powertools/metrics/internal/RequestScopedMetricsProxyTest.java diff --git a/powertools-metrics/src/main/java/software/amazon/lambda/powertools/metrics/MetricsFactory.java b/powertools-metrics/src/main/java/software/amazon/lambda/powertools/metrics/MetricsFactory.java index 67ab17b7b..0644329c9 100644 --- a/powertools-metrics/src/main/java/software/amazon/lambda/powertools/metrics/MetricsFactory.java +++ b/powertools-metrics/src/main/java/software/amazon/lambda/powertools/metrics/MetricsFactory.java @@ -16,9 +16,11 @@ import org.crac.Core; import org.crac.Resource; + import software.amazon.lambda.powertools.common.internal.ClassPreLoader; import software.amazon.lambda.powertools.common.internal.LambdaConstants; import software.amazon.lambda.powertools.common.internal.LambdaHandlerProcessor; +import software.amazon.lambda.powertools.metrics.internal.RequestScopedMetricsProxy; import software.amazon.lambda.powertools.metrics.model.DimensionSet; import software.amazon.lambda.powertools.metrics.provider.EmfMetricsProvider; import software.amazon.lambda.powertools.metrics.provider.MetricsProvider; @@ -28,7 +30,7 @@ */ public final class MetricsFactory implements Resource { private static MetricsProvider provider = new EmfMetricsProvider(); - private static Metrics metrics; + private static RequestScopedMetricsProxy metricsProxy; // Dummy instance to register MetricsFactory with CRaC private static final MetricsFactory INSTANCE = new MetricsFactory(); @@ -44,23 +46,23 @@ public final class MetricsFactory implements Resource { * @return the singleton Metrics instance */ public static synchronized Metrics getMetricsInstance() { - if (metrics == null) { - metrics = provider.getMetricsInstance(); + if (metricsProxy == null) { + metricsProxy = new RequestScopedMetricsProxy(provider); // Apply default configuration from environment variables String envNamespace = System.getenv("POWERTOOLS_METRICS_NAMESPACE"); if (envNamespace != null) { - metrics.setNamespace(envNamespace); + metricsProxy.setNamespace(envNamespace); } // Only set Service dimension if it's not the default undefined value String serviceName = LambdaHandlerProcessor.serviceName(); if (!LambdaConstants.SERVICE_UNDEFINED.equals(serviceName)) { - metrics.setDefaultDimensions(DimensionSet.of("Service", serviceName)); + metricsProxy.setDefaultDimensions(DimensionSet.of("Service", serviceName)); } } - return metrics; + return metricsProxy; } /** @@ -73,8 +75,8 @@ public static synchronized void setMetricsProvider(MetricsProvider metricsProvid throw new IllegalArgumentException("Metrics provider cannot be null"); } provider = metricsProvider; - // Reset the metrics instance so it will be recreated with the new provider - metrics = null; + // Reset the metrics proxy so it will be recreated with the new provider + metricsProxy = null; } @Override diff --git a/powertools-metrics/src/main/java/software/amazon/lambda/powertools/metrics/internal/RequestScopedMetricsProxy.java b/powertools-metrics/src/main/java/software/amazon/lambda/powertools/metrics/internal/RequestScopedMetricsProxy.java new file mode 100644 index 000000000..61c83be17 --- /dev/null +++ b/powertools-metrics/src/main/java/software/amazon/lambda/powertools/metrics/internal/RequestScopedMetricsProxy.java @@ -0,0 +1,156 @@ +/* + * Copyright 2023 Amazon.com, Inc. or its affiliates. + * Licensed under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * 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. + * + */ + +package software.amazon.lambda.powertools.metrics.internal; + +import java.time.Instant; +import java.util.HashMap; +import java.util.Optional; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicReference; +import java.util.function.Consumer; + +import com.amazonaws.services.lambda.runtime.Context; + +import software.amazon.lambda.powertools.common.internal.LambdaHandlerProcessor; +import software.amazon.lambda.powertools.metrics.Metrics; +import software.amazon.lambda.powertools.metrics.model.DimensionSet; +import software.amazon.lambda.powertools.metrics.model.MetricResolution; +import software.amazon.lambda.powertools.metrics.model.MetricUnit; +import software.amazon.lambda.powertools.metrics.provider.MetricsProvider; + +public class RequestScopedMetricsProxy implements Metrics { + private static final String DEFAULT_TRACE_ID = "DEFAULT"; + private final ConcurrentMap metricsMap = new ConcurrentHashMap<>(); + private final MetricsProvider provider; + private final AtomicReference initialNamespace = new AtomicReference<>(); + private final AtomicReference initialDefaultDimensions = new AtomicReference<>(); + private final AtomicBoolean initialRaiseOnEmptyMetrics = new AtomicBoolean(false); + + public RequestScopedMetricsProxy(MetricsProvider provider) { + this.provider = provider; + } + + private String getTraceId() { + return LambdaHandlerProcessor.getXrayTraceId().orElse(DEFAULT_TRACE_ID); + } + + private Metrics getOrCreateMetrics() { + String traceId = getTraceId(); + return metricsMap.computeIfAbsent(traceId, key -> { + Metrics metrics = provider.getMetricsInstance(); + String namespace = initialNamespace.get(); + if (namespace != null) { + metrics.setNamespace(namespace); + } + DimensionSet dimensions = initialDefaultDimensions.get(); + if (dimensions != null) { + metrics.setDefaultDimensions(dimensions); + } + metrics.setRaiseOnEmptyMetrics(initialRaiseOnEmptyMetrics.get()); + return metrics; + }); + } + + // Configuration methods - called by MetricsFactory and MetricsBuilder + // These methods DO NOT eagerly create instances because they are typically called + // outside the Lambda handler (e.g., during class initialization) potentially on a different thread. + // We delay instance creation until the first operation that needs the metrics backend (e.g., addMetric). + // See {@link software.amazon.lambda.powertools.metrics.MetricsFactory#getMetricsInstance()} + // and {@link software.amazon.lambda.powertools.metrics.MetricsBuilder#build()} + + @Override + public void setNamespace(String namespace) { + this.initialNamespace.set(namespace); + Optional.ofNullable(metricsMap.get(getTraceId())).ifPresent(m -> m.setNamespace(namespace)); + } + + @Override + public void setDefaultDimensions(DimensionSet dimensionSet) { + if (dimensionSet == null) { + throw new IllegalArgumentException("DimensionSet cannot be null"); + } + this.initialDefaultDimensions.set(dimensionSet); + Optional.ofNullable(metricsMap.get(getTraceId())).ifPresent(m -> m.setDefaultDimensions(dimensionSet)); + } + + @Override + public void setRaiseOnEmptyMetrics(boolean raiseOnEmptyMetrics) { + this.initialRaiseOnEmptyMetrics.set(raiseOnEmptyMetrics); + Optional.ofNullable(metricsMap.get(getTraceId())).ifPresent(m -> m.setRaiseOnEmptyMetrics(raiseOnEmptyMetrics)); + } + + @Override + public DimensionSet getDefaultDimensions() { + Metrics metrics = metricsMap.get(getTraceId()); + if (metrics != null) { + return metrics.getDefaultDimensions(); + } + DimensionSet dimensions = initialDefaultDimensions.get(); + return dimensions != null ? dimensions : DimensionSet.of(new HashMap<>()); + } + + // Metrics operations - these eagerly create instances + + @Override + public void addMetric(String key, double value, MetricUnit unit, MetricResolution resolution) { + getOrCreateMetrics().addMetric(key, value, unit, resolution); + } + + @Override + public void addDimension(DimensionSet dimensionSet) { + getOrCreateMetrics().addDimension(dimensionSet); + } + + @Override + public void setTimestamp(Instant timestamp) { + getOrCreateMetrics().setTimestamp(timestamp); + } + + @Override + public void addMetadata(String key, Object value) { + getOrCreateMetrics().addMetadata(key, value); + } + + @Override + public void clearDefaultDimensions() { + getOrCreateMetrics().clearDefaultDimensions(); + } + + @Override + public void flush() { + // Always create instance to ensure validation and warnings are triggered. E.g. when raiseOnEmptyMetrics + // is enabled. + Metrics metrics = getOrCreateMetrics(); + metrics.flush(); + metricsMap.remove(getTraceId()); + } + + @Override + public void captureColdStartMetric(Context context, DimensionSet dimensions) { + getOrCreateMetrics().captureColdStartMetric(context, dimensions); + } + + @Override + public void captureColdStartMetric(DimensionSet dimensions) { + getOrCreateMetrics().captureColdStartMetric(dimensions); + } + + @Override + public void flushMetrics(Consumer metricsConsumer) { + getOrCreateMetrics().flushMetrics(metricsConsumer); + } +} diff --git a/powertools-metrics/src/test/java/software/amazon/lambda/powertools/metrics/ConfigurationPrecedenceTest.java b/powertools-metrics/src/test/java/software/amazon/lambda/powertools/metrics/ConfigurationPrecedenceTest.java index c9c772313..492ecfc1e 100644 --- a/powertools-metrics/src/test/java/software/amazon/lambda/powertools/metrics/ConfigurationPrecedenceTest.java +++ b/powertools-metrics/src/test/java/software/amazon/lambda/powertools/metrics/ConfigurationPrecedenceTest.java @@ -33,8 +33,8 @@ import com.fasterxml.jackson.databind.ObjectMapper; import software.amazon.lambda.powertools.common.internal.LambdaHandlerProcessor; -import software.amazon.lambda.powertools.metrics.model.MetricUnit; import software.amazon.lambda.powertools.common.stubs.TestLambdaContext; +import software.amazon.lambda.powertools.metrics.model.MetricUnit; /** * Tests to verify the hierarchy of precedence for configuration: @@ -44,7 +44,7 @@ */ class ConfigurationPrecedenceTest { - private final PrintStream standardOut = System.out; + private static final PrintStream STANDARD_OUT = System.out; private final ByteArrayOutputStream outputStreamCaptor = new ByteArrayOutputStream(); private final ObjectMapper objectMapper = new ObjectMapper(); @@ -65,10 +65,10 @@ void setUp() throws Exception { @AfterEach void tearDown() throws Exception { - System.setOut(standardOut); + System.setOut(STANDARD_OUT); // Reset the singleton state between tests - java.lang.reflect.Field field = MetricsFactory.class.getDeclaredField("metrics"); + java.lang.reflect.Field field = MetricsFactory.class.getDeclaredField("metricsProxy"); field.setAccessible(true); field.set(null, null); @@ -183,7 +183,7 @@ void shouldUseDefaultsWhenNoConfiguration() throws Exception { assertThat(rootNode.has("Service")).isFalse(); } - private static class HandlerWithMetricsAnnotation implements RequestHandler, String> { + private static final class HandlerWithMetricsAnnotation implements RequestHandler, String> { @Override @FlushMetrics(namespace = "AnnotationNamespace", service = "AnnotationService") public String handleRequest(Map input, Context context) { @@ -193,7 +193,8 @@ public String handleRequest(Map input, Context context) { } } - private static class HandlerWithDefaultMetricsAnnotation implements RequestHandler, String> { + private static final class HandlerWithDefaultMetricsAnnotation + implements RequestHandler, String> { @Override @FlushMetrics public String handleRequest(Map input, Context context) { diff --git a/powertools-metrics/src/test/java/software/amazon/lambda/powertools/metrics/MetricsBuilderTest.java b/powertools-metrics/src/test/java/software/amazon/lambda/powertools/metrics/MetricsBuilderTest.java index bd300fb6b..12ac46e43 100644 --- a/powertools-metrics/src/test/java/software/amazon/lambda/powertools/metrics/MetricsBuilderTest.java +++ b/powertools-metrics/src/test/java/software/amazon/lambda/powertools/metrics/MetricsBuilderTest.java @@ -27,15 +27,15 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; +import software.amazon.lambda.powertools.metrics.internal.RequestScopedMetricsProxy; import software.amazon.lambda.powertools.metrics.model.DimensionSet; import software.amazon.lambda.powertools.metrics.model.MetricUnit; import software.amazon.lambda.powertools.metrics.provider.MetricsProvider; -import software.amazon.lambda.powertools.metrics.testutils.TestMetrics; import software.amazon.lambda.powertools.metrics.testutils.TestMetricsProvider; class MetricsBuilderTest { - private final PrintStream standardOut = System.out; + private static final PrintStream STANDARD_OUT = System.out; private final ByteArrayOutputStream outputStreamCaptor = new ByteArrayOutputStream(); private final ObjectMapper objectMapper = new ObjectMapper(); @@ -46,10 +46,10 @@ void setUp() { @AfterEach void tearDown() throws Exception { - System.setOut(standardOut); + System.setOut(STANDARD_OUT); // Reset the singleton state between tests - java.lang.reflect.Field field = MetricsFactory.class.getDeclaredField("metrics"); + java.lang.reflect.Field field = MetricsFactory.class.getDeclaredField("metricsProxy"); field.setAccessible(true); field.set(null, null); @@ -151,7 +151,7 @@ void shouldBuildWithMultipleDefaultDimensions() throws Exception { } @Test - void shouldBuildWithCustomMetricsProvider() { + void shouldBuildWithCustomMetricsProvider() throws Exception { // Given MetricsProvider testProvider = new TestMetricsProvider(); @@ -161,7 +161,13 @@ void shouldBuildWithCustomMetricsProvider() { .build(); // Then - assertThat(metrics).isInstanceOf(TestMetrics.class); + assertThat(metrics) + .isInstanceOf(RequestScopedMetricsProxy.class); + + java.lang.reflect.Field providerField = metrics.getClass().getDeclaredField("provider"); + providerField.setAccessible(true); + MetricsProvider actualProvider = (MetricsProvider) providerField.get(metrics); + assertThat(actualProvider).isSameAs(testProvider); } @Test diff --git a/powertools-metrics/src/test/java/software/amazon/lambda/powertools/metrics/MetricsFactoryTest.java b/powertools-metrics/src/test/java/software/amazon/lambda/powertools/metrics/MetricsFactoryTest.java index 4fc98d2a5..c9b183a1a 100644 --- a/powertools-metrics/src/test/java/software/amazon/lambda/powertools/metrics/MetricsFactoryTest.java +++ b/powertools-metrics/src/test/java/software/amazon/lambda/powertools/metrics/MetricsFactoryTest.java @@ -29,10 +29,11 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; +import software.amazon.lambda.powertools.common.internal.LambdaConstants; import software.amazon.lambda.powertools.common.internal.LambdaHandlerProcessor; +import software.amazon.lambda.powertools.metrics.internal.RequestScopedMetricsProxy; import software.amazon.lambda.powertools.metrics.model.MetricUnit; import software.amazon.lambda.powertools.metrics.provider.MetricsProvider; -import software.amazon.lambda.powertools.metrics.testutils.TestMetrics; import software.amazon.lambda.powertools.metrics.testutils.TestMetricsProvider; class MetricsFactoryTest { @@ -40,7 +41,7 @@ class MetricsFactoryTest { private static final String TEST_NAMESPACE = "TestNamespace"; private static final String TEST_SERVICE = "TestService"; - private final PrintStream standardOut = System.out; + private static final PrintStream STANDARD_OUT = System.out; private final ByteArrayOutputStream outputStreamCaptor = new ByteArrayOutputStream(); private final ObjectMapper objectMapper = new ObjectMapper(); @@ -61,10 +62,11 @@ void setUp() throws Exception { @AfterEach void tearDown() throws Exception { - System.setOut(standardOut); + System.setOut(STANDARD_OUT); + System.clearProperty(LambdaConstants.XRAY_TRACE_HEADER); // Reset the singleton state between tests - java.lang.reflect.Field field = MetricsFactory.class.getDeclaredField("metrics"); + java.lang.reflect.Field field = MetricsFactory.class.getDeclaredField("metricsProxy"); field.setAccessible(true); field.set(null, null); @@ -126,7 +128,7 @@ void shouldUseServiceNameFromEnvironmentVariable() throws Exception { } @Test - void shouldSetCustomMetricsProvider() { + void shouldSetCustomMetricsProvider() throws Exception { // Given MetricsProvider testProvider = new TestMetricsProvider(); @@ -135,7 +137,13 @@ void shouldSetCustomMetricsProvider() { Metrics metrics = MetricsFactory.getMetricsInstance(); // Then - assertThat(metrics).isInstanceOf(TestMetrics.class); + assertThat(metrics) + .isInstanceOf(RequestScopedMetricsProxy.class); + + java.lang.reflect.Field providerField = metrics.getClass().getDeclaredField("provider"); + providerField.setAccessible(true); + MetricsProvider actualProvider = (MetricsProvider) providerField.get(metrics); + assertThat(actualProvider).isSameAs(testProvider); } @Test @@ -163,4 +171,54 @@ void shouldNotSetServiceDimensionWhenServiceUndefined() throws Exception { // Service dimension should not be present assertThat(rootNode.has("Service")).isFalse(); } + + @Test + void shouldIsolateMetricsByTraceId() throws Exception { + // GIVEN + Metrics metrics = MetricsFactory.getMetricsInstance(); + + // WHEN - Simulate Lambda invocation 1 with trace ID 1 + System.setProperty(LambdaConstants.XRAY_TRACE_HEADER, "Root=1-trace-id-1"); + metrics.setNamespace("TestNamespace"); + metrics.addDimension("userId", "user123"); + metrics.addMetric("ProcessedOrder", 1, MetricUnit.COUNT); + metrics.flush(); + + // WHEN - Simulate Lambda invocation 2 with trace ID 2 + System.setProperty(LambdaConstants.XRAY_TRACE_HEADER, "Root=1-trace-id-2"); + metrics.setNamespace("TestNamespace"); + metrics.addDimension("userId", "user456"); + metrics.addMetric("ProcessedOrder", 1, MetricUnit.COUNT); + metrics.flush(); + + // THEN - Verify each invocation has isolated metrics + String emfOutput = outputStreamCaptor.toString().trim(); + String[] jsonLines = emfOutput.split("\n"); + assertThat(jsonLines).hasSize(2); + + JsonNode output1 = objectMapper.readTree(jsonLines[0]); + JsonNode output2 = objectMapper.readTree(jsonLines[1]); + + assertThat(output1.get("userId").asText()).isEqualTo("user123"); + assertThat(output2.get("userId").asText()).isEqualTo("user456"); + } + + @Test + void shouldUseDefaultKeyWhenNoTraceId() throws Exception { + // GIVEN - No trace ID set + System.clearProperty(LambdaConstants.XRAY_TRACE_HEADER); + + // WHEN + Metrics metrics = MetricsFactory.getMetricsInstance(); + metrics.setNamespace("TestNamespace"); + metrics.addMetric("TestMetric", 1, MetricUnit.COUNT); + metrics.flush(); + + // THEN - Should work without X-Ray trace ID + String emfOutput = outputStreamCaptor.toString().trim(); + assertThat(emfOutput).isNotEmpty(); + + JsonNode rootNode = objectMapper.readTree(emfOutput); + assertThat(rootNode.get("TestMetric").asDouble()).isEqualTo(1.0); + } } diff --git a/powertools-metrics/src/test/java/software/amazon/lambda/powertools/metrics/RequestHandlerTest.java b/powertools-metrics/src/test/java/software/amazon/lambda/powertools/metrics/RequestHandlerTest.java index d3ed64fe3..fcd677c02 100644 --- a/powertools-metrics/src/test/java/software/amazon/lambda/powertools/metrics/RequestHandlerTest.java +++ b/powertools-metrics/src/test/java/software/amazon/lambda/powertools/metrics/RequestHandlerTest.java @@ -56,7 +56,7 @@ void tearDown() throws Exception { System.setOut(STDOUT); // Reset the singleton state between tests - java.lang.reflect.Field field = MetricsFactory.class.getDeclaredField("metrics"); + java.lang.reflect.Field field = MetricsFactory.class.getDeclaredField("metricsProxy"); field.setAccessible(true); field.set(null, null); diff --git a/powertools-metrics/src/test/java/software/amazon/lambda/powertools/metrics/internal/EmfMetricsLoggerTest.java b/powertools-metrics/src/test/java/software/amazon/lambda/powertools/metrics/internal/EmfMetricsLoggerTest.java index bab039640..c2238711a 100644 --- a/powertools-metrics/src/test/java/software/amazon/lambda/powertools/metrics/internal/EmfMetricsLoggerTest.java +++ b/powertools-metrics/src/test/java/software/amazon/lambda/powertools/metrics/internal/EmfMetricsLoggerTest.java @@ -38,14 +38,15 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; +import software.amazon.cloudwatchlogs.emf.environment.EnvironmentProvider; +import software.amazon.cloudwatchlogs.emf.model.MetricsContext; import software.amazon.cloudwatchlogs.emf.model.Unit; import software.amazon.lambda.powertools.common.internal.LambdaHandlerProcessor; +import software.amazon.lambda.powertools.common.stubs.TestLambdaContext; import software.amazon.lambda.powertools.metrics.Metrics; -import software.amazon.lambda.powertools.metrics.MetricsFactory; import software.amazon.lambda.powertools.metrics.model.DimensionSet; import software.amazon.lambda.powertools.metrics.model.MetricResolution; import software.amazon.lambda.powertools.metrics.model.MetricUnit; -import software.amazon.lambda.powertools.common.stubs.TestLambdaContext; class EmfMetricsLoggerTest { @@ -66,19 +67,14 @@ void setUp() throws Exception { coldStartField.setAccessible(true); coldStartField.set(null, null); - metrics = MetricsFactory.getMetricsInstance(); + metrics = new EmfMetricsLogger(new EnvironmentProvider(), new MetricsContext()); metrics.setNamespace("TestNamespace"); System.setOut(new PrintStream(outputStreamCaptor)); } @AfterEach - void tearDown() throws Exception { + void tearDown() { System.setOut(standardOut); - - // Reset the singleton state between tests - java.lang.reflect.Field field = MetricsFactory.class.getDeclaredField("metrics"); - field.setAccessible(true); - field.set(null, null); } @ParameterizedTest diff --git a/powertools-metrics/src/test/java/software/amazon/lambda/powertools/metrics/internal/LambdaMetricsAspectTest.java b/powertools-metrics/src/test/java/software/amazon/lambda/powertools/metrics/internal/LambdaMetricsAspectTest.java index 031fe4553..119e094a9 100644 --- a/powertools-metrics/src/test/java/software/amazon/lambda/powertools/metrics/internal/LambdaMetricsAspectTest.java +++ b/powertools-metrics/src/test/java/software/amazon/lambda/powertools/metrics/internal/LambdaMetricsAspectTest.java @@ -41,7 +41,7 @@ class LambdaMetricsAspectTest { - private final PrintStream standardOut = System.out; + private static final PrintStream STANDARD_OUT = System.out; private final ByteArrayOutputStream outputStreamCaptor = new ByteArrayOutputStream(); private final ObjectMapper objectMapper = new ObjectMapper(); @@ -62,10 +62,10 @@ void setUp() throws Exception { @AfterEach void tearDown() throws Exception { - System.setOut(standardOut); + System.setOut(STANDARD_OUT); // Reset the singleton state between tests - java.lang.reflect.Field field = MetricsFactory.class.getDeclaredField("metrics"); + java.lang.reflect.Field field = MetricsFactory.class.getDeclaredField("metricsProxy"); field.setAccessible(true); field.set(null, null); } @@ -216,7 +216,7 @@ void shouldUseCustomFunctionNameWhenProvidedForColdStartMetric() throws Exceptio JsonNode dimensions = coldStartNode.get("_aws").get("CloudWatchMetrics").get(0).get("Dimensions").get(0); boolean hasFunctionName = false; for (JsonNode dimension : dimensions) { - if (dimension.asText().equals("FunctionName")) { + if ("FunctionName".equals(dimension.asText())) { hasFunctionName = true; break; } diff --git a/powertools-metrics/src/test/java/software/amazon/lambda/powertools/metrics/internal/RequestScopedMetricsProxyTest.java b/powertools-metrics/src/test/java/software/amazon/lambda/powertools/metrics/internal/RequestScopedMetricsProxyTest.java new file mode 100644 index 000000000..848222bae --- /dev/null +++ b/powertools-metrics/src/test/java/software/amazon/lambda/powertools/metrics/internal/RequestScopedMetricsProxyTest.java @@ -0,0 +1,277 @@ +package software.amazon.lambda.powertools.metrics.internal; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import java.time.Instant; + +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.mockito.Mock.Strictness; +import org.mockito.junit.jupiter.MockitoExtension; + +import software.amazon.lambda.powertools.common.internal.LambdaConstants; +import software.amazon.lambda.powertools.metrics.Metrics; +import software.amazon.lambda.powertools.metrics.model.DimensionSet; +import software.amazon.lambda.powertools.metrics.model.MetricResolution; +import software.amazon.lambda.powertools.metrics.model.MetricUnit; +import software.amazon.lambda.powertools.metrics.provider.MetricsProvider; + +/** + * Tests for RequestScopedMetricsProxy focusing on lazy vs eager initialization behavior. + * + * CRITICAL: These tests ensure configuration methods (setNamespace, setDefaultDimensions, + * setRaiseOnEmptyMetrics) do NOT eagerly create instances, while metrics operations + * (addMetric, addDimension, flush) DO eagerly create instances. + */ +@ExtendWith(MockitoExtension.class) +class RequestScopedMetricsProxyTest { + + @Mock(strictness = Strictness.LENIENT) + private MetricsProvider mockProvider; + + @Mock(strictness = Strictness.LENIENT) + private Metrics mockMetrics; + + private RequestScopedMetricsProxy proxy; + + @BeforeEach + void setUp() { + when(mockProvider.getMetricsInstance()).thenReturn(mockMetrics); + proxy = new RequestScopedMetricsProxy(mockProvider); + } + + @AfterEach + void tearDown() { + System.clearProperty(LambdaConstants.XRAY_TRACE_HEADER); + } + + // ========== LAZY INITIALIZATION TESTS (Configuration Methods) ========== + + @Test + void setNamespace_shouldNotEagerlyCreateInstance() { + // WHEN + proxy.setNamespace("TestNamespace"); + + // THEN - Provider should NOT be called (lazy initialization) + verify(mockProvider, never()).getMetricsInstance(); + } + + @Test + void setDefaultDimensions_shouldNotEagerlyCreateInstance() { + // WHEN + proxy.setDefaultDimensions(DimensionSet.of("key", "value")); + + // THEN - Provider should NOT be called (lazy initialization) + verify(mockProvider, never()).getMetricsInstance(); + } + + @Test + void setDefaultDimensions_shouldThrowExceptionWhenNull() { + // When/Then + assertThatThrownBy(() -> proxy.setDefaultDimensions(null)) + .isInstanceOf(IllegalArgumentException.class) + .hasMessage("DimensionSet cannot be null"); + } + + @Test + void setRaiseOnEmptyMetrics_shouldNotEagerlyCreateInstance() { + // WHEN + proxy.setRaiseOnEmptyMetrics(true); + + // THEN - Provider should NOT be called (lazy initialization) + verify(mockProvider, never()).getMetricsInstance(); + } + + // ========== EAGER INITIALIZATION TESTS (Metrics Operations) ========== + + @Test + void addMetric_shouldEagerlyCreateInstance() { + // WHEN + proxy.addMetric("test", 1, MetricUnit.COUNT, MetricResolution.HIGH); + + // THEN - Provider SHOULD be called (eager initialization) + verify(mockProvider, times(1)).getMetricsInstance(); + verify(mockMetrics).addMetric("test", 1, MetricUnit.COUNT, MetricResolution.HIGH); + } + + @Test + void addDimension_shouldEagerlyCreateInstance() { + // WHEN + proxy.addDimension(DimensionSet.of("key", "value")); + + // THEN - Provider SHOULD be called (eager initialization) + verify(mockProvider, times(1)).getMetricsInstance(); + verify(mockMetrics).addDimension(any(DimensionSet.class)); + } + + @Test + void addMetadata_shouldEagerlyCreateInstance() { + // WHEN + proxy.addMetadata("key", "value"); + + // THEN - Provider SHOULD be called (eager initialization) + verify(mockProvider, times(1)).getMetricsInstance(); + verify(mockMetrics).addMetadata("key", "value"); + } + + @Test + void flush_shouldAlwaysCreateInstance() { + // WHEN + proxy.flush(); + + // THEN - Provider SHOULD be called even if no metrics added + verify(mockProvider, times(1)).getMetricsInstance(); + verify(mockMetrics).flush(); + } + + // ========== CONFIGURATION APPLIED ON FIRST METRICS OPERATION ========== + + @Test + void firstMetricsOperation_shouldApplyStoredConfiguration() { + // GIVEN - Set configuration without creating instance + proxy.setNamespace("TestNamespace"); + proxy.setDefaultDimensions(DimensionSet.of("Service", "TestService")); + proxy.setRaiseOnEmptyMetrics(true); + verify(mockProvider, never()).getMetricsInstance(); + + // WHEN - First metrics operation + proxy.addMetric("test", 1, MetricUnit.COUNT); + + // THEN - Instance created and configuration applied + verify(mockProvider, times(1)).getMetricsInstance(); + verify(mockMetrics).setNamespace("TestNamespace"); + verify(mockMetrics).setDefaultDimensions(any(DimensionSet.class)); + verify(mockMetrics).setRaiseOnEmptyMetrics(true); + verify(mockMetrics).addMetric("test", 1, MetricUnit.COUNT, MetricResolution.STANDARD); + } + + // ========== THREAD ISOLATION TESTS ========== + + @Test + void shouldShareInstanceAcrossThreadsWithSameTraceId() throws Exception { + // GIVEN - Set trace ID + System.setProperty(LambdaConstants.XRAY_TRACE_HEADER, "Root=1-test-trace-id"); + + // WHEN - Parent thread adds metric + proxy.addMetric("metric1", 1, MetricUnit.COUNT); + verify(mockProvider, times(1)).getMetricsInstance(); + + // WHEN - Child thread adds metric (same trace ID) + Thread thread2 = new Thread(() -> { + proxy.addMetric("metric2", 2, MetricUnit.COUNT); + }); + thread2.start(); + thread2.join(); + + // THEN - Only one instance created (same trace ID = shared instance) + verify(mockProvider, times(1)).getMetricsInstance(); + } + + @Test + void flush_shouldRemoveThreadLocalInstance() { + // GIVEN - Create instance + proxy.addMetric("test", 1, MetricUnit.COUNT); + verify(mockProvider, times(1)).getMetricsInstance(); + + // WHEN - Flush + proxy.flush(); + + // WHEN - Add another metric (should create new instance) + proxy.addMetric("test2", 2, MetricUnit.COUNT); + + // THEN - Provider called twice (instance was removed after flush) + verify(mockProvider, times(2)).getMetricsInstance(); + } + + // ========== EDGE CASES ========== + + @Test + void multipleConfigurationCalls_shouldUpdateAtomicReferences() { + // WHEN + proxy.setNamespace("Namespace1"); + proxy.setNamespace("Namespace2"); + proxy.setNamespace("Namespace3"); + + // THEN - No instance created + verify(mockProvider, never()).getMetricsInstance(); + + // WHEN - First metrics operation + proxy.addMetric("test", 1, MetricUnit.COUNT); + + // THEN - Only last namespace applied + verify(mockMetrics).setNamespace("Namespace3"); + verify(mockMetrics, never()).setNamespace("Namespace1"); + verify(mockMetrics, never()).setNamespace("Namespace2"); + } + + @Test + void configurationAfterInstanceCreation_shouldApplyImmediately() { + // GIVEN - Instance already created + proxy.addMetric("test", 1, MetricUnit.COUNT); + + // WHEN - Set configuration + proxy.setNamespace("NewNamespace"); + + // THEN - Applied immediately to existing instance + verify(mockMetrics).setNamespace("NewNamespace"); + } + + @Test + void setTimestamp_shouldEagerlyCreateInstance() { + // When + proxy.setTimestamp(Instant.now()); + + // Then + verify(mockProvider, times(1)).getMetricsInstance(); + verify(mockMetrics).setTimestamp(any()); + } + + @Test + void getDefaultDimensions_shouldNotEagerlyCreateInstance() { + // WHEN + DimensionSet result = proxy.getDefaultDimensions(); + + // THEN - Provider should NOT be called (returns stored config or empty) + verify(mockProvider, never()).getMetricsInstance(); + assertThat(result).isNotNull(); + } + + @Test + void captureColdStartMetric_shouldEagerlyCreateInstance() { + // WHEN + proxy.captureColdStartMetric(DimensionSet.of("key", "value")); + + // THEN - Provider SHOULD be called (eager initialization) + verify(mockProvider, times(1)).getMetricsInstance(); + verify(mockMetrics).captureColdStartMetric(any(DimensionSet.class)); + } + + @Test + void flushMetrics_shouldEagerlyCreateInstance() { + // WHEN + proxy.flushMetrics(m -> m.addMetric("test", 1, MetricUnit.COUNT)); + + // THEN - Provider SHOULD be called (eager initialization) + verify(mockProvider, times(1)).getMetricsInstance(); + verify(mockMetrics).flushMetrics(any()); + } + + @Test + void clearDefaultDimensions_shouldEagerlyCreateInstance() { + // WHEN + proxy.clearDefaultDimensions(); + + // THEN - Provider SHOULD be called (eager initialization) + verify(mockProvider, times(1)).getMetricsInstance(); + verify(mockMetrics).clearDefaultDimensions(); + } +} From 0af0ba445821cdd810da4eef2fb3de8ef0770c77 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Nov 2025 10:58:59 +0100 Subject: [PATCH 038/202] chore: bump aws.sdk.version from 2.38.5 to 2.38.6 (#2290) Bumps `aws.sdk.version` from 2.38.5 to 2.38.6. Updates `software.amazon.awssdk:bom` from 2.38.5 to 2.38.6 Updates `software.amazon.awssdk:http-client-spi` from 2.38.5 to 2.38.6 Updates `software.amazon.awssdk:url-connection-client` from 2.38.2 to 2.38.6 Updates `software.amazon.awssdk:s3` from 2.38.2 to 2.38.6 Updates `software.amazon.awssdk:dynamodb` from 2.38.5 to 2.38.6 Updates `software.amazon.awssdk:lambda` from 2.38.5 to 2.38.6 Updates `software.amazon.awssdk:kinesis` from 2.38.2 to 2.38.6 Updates `software.amazon.awssdk:cloudwatch` from 2.38.5 to 2.38.6 Updates `software.amazon.awssdk:xray` from 2.38.5 to 2.38.6 Updates `software.amazon.awssdk:sqs` from 2.38.2 to 2.38.6 Updates `software.amazon.awssdk:cloudformation` from 2.38.5 to 2.38.6 Updates `software.amazon.awssdk:sts` from 2.38.5 to 2.38.6 --- updated-dependencies: - dependency-name: software.amazon.awssdk:bom dependency-version: 2.38.6 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: software.amazon.awssdk:http-client-spi dependency-version: 2.38.6 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: software.amazon.awssdk:url-connection-client dependency-version: 2.38.6 dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: software.amazon.awssdk:s3 dependency-version: 2.38.6 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: software.amazon.awssdk:dynamodb dependency-version: 2.38.6 dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: software.amazon.awssdk:lambda dependency-version: 2.38.6 dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: software.amazon.awssdk:kinesis dependency-version: 2.38.6 dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: software.amazon.awssdk:cloudwatch dependency-version: 2.38.6 dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: software.amazon.awssdk:xray dependency-version: 2.38.6 dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: software.amazon.awssdk:sqs dependency-version: 2.38.6 dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: software.amazon.awssdk:cloudformation dependency-version: 2.38.6 dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: software.amazon.awssdk:sts dependency-version: 2.38.6 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- examples/powertools-examples-cloudformation/pom.xml | 2 +- pom.xml | 2 +- powertools-e2e-tests/handlers/pom.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/powertools-examples-cloudformation/pom.xml b/examples/powertools-examples-cloudformation/pom.xml index 824b98da9..9ca4e8dc2 100644 --- a/examples/powertools-examples-cloudformation/pom.xml +++ b/examples/powertools-examples-cloudformation/pom.xml @@ -14,7 +14,7 @@ 11 1.4.0 3.16.1 - 2.38.5 + 2.38.6 1.9.20.1 diff --git a/pom.xml b/pom.xml index 536ba6002..ba206feae 100644 --- a/pom.xml +++ b/pom.xml @@ -85,7 +85,7 @@ 2.25.2 2.0.17 2.20.1 - 2.38.5 + 2.38.6 2.20.0 2.2.0 UTF-8 diff --git a/powertools-e2e-tests/handlers/pom.xml b/powertools-e2e-tests/handlers/pom.xml index 7838dfc03..11eedca85 100644 --- a/powertools-e2e-tests/handlers/pom.xml +++ b/powertools-e2e-tests/handlers/pom.xml @@ -19,7 +19,7 @@ 3.6.1 1.14.1 3.14.1 - 2.38.5 + 2.38.6 1.9.20.1 true From f7e3b1bddf79e9031cb8e258a05d4272255638e5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Nov 2025 10:59:16 +0100 Subject: [PATCH 039/202] chore: bump org.apache.kafka:kafka-clients from 4.1.0 to 4.1.1 (#2291) Bumps org.apache.kafka:kafka-clients from 4.1.0 to 4.1.1. --- updated-dependencies: - dependency-name: org.apache.kafka:kafka-clients dependency-version: 4.1.1 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- examples/powertools-examples-kafka/pom.xml | 2 +- powertools-kafka/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/powertools-examples-kafka/pom.xml b/examples/powertools-examples-kafka/pom.xml index 184025be8..24856f80d 100644 --- a/examples/powertools-examples-kafka/pom.xml +++ b/examples/powertools-examples-kafka/pom.xml @@ -24,7 +24,7 @@ org.apache.kafka kafka-clients - 4.1.0 + 4.1.1 org.apache.avro diff --git a/powertools-kafka/pom.xml b/powertools-kafka/pom.xml index a07d4e0d6..0a76f0d2e 100644 --- a/powertools-kafka/pom.xml +++ b/powertools-kafka/pom.xml @@ -34,7 +34,7 @@ - 4.1.0 + 4.1.1 1.12.1 4.33.0 1.1.6 From 4966668537b189e7eb2f10bace1c63516807ffab Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Nov 2025 10:59:39 +0100 Subject: [PATCH 040/202] chore: bump sam/build-java21 (#2292) Bumps sam/build-java21 from `51709ae` to `ced5388`. --- updated-dependencies: - dependency-name: sam/build-java21 dependency-version: ced538830c78a0f45f91abe5f7963cb73005ad933aee7dd1160bd77d9fd3c4f3 dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- powertools-e2e-tests/src/test/resources/docker/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/powertools-e2e-tests/src/test/resources/docker/Dockerfile b/powertools-e2e-tests/src/test/resources/docker/Dockerfile index 1abb53643..7d47b5331 100644 --- a/powertools-e2e-tests/src/test/resources/docker/Dockerfile +++ b/powertools-e2e-tests/src/test/resources/docker/Dockerfile @@ -1,5 +1,5 @@ # Use the official AWS SAM base image for Java 21 -FROM public.ecr.aws/sam/build-java21@sha256:51709ae612478654f833998a3455519d0524157230757cf6327e402213811e38 +FROM public.ecr.aws/sam/build-java21@sha256:ced538830c78a0f45f91abe5f7963cb73005ad933aee7dd1160bd77d9fd3c4f3 # Install GraalVM dependencies RUN curl -4 -L https://download.oracle.com/graalvm/21/latest/graalvm-jdk-21_linux-x64_bin.tar.gz | tar -xvz From 14572398c67e2b7e4405aa51ea4bf547cc54b42d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Nov 2025 10:59:57 +0100 Subject: [PATCH 041/202] chore: bump github/codeql-action from 4.31.2 to 4.31.3 (#2293) Bumps [github/codeql-action](https://github.com/github/codeql-action) from 4.31.2 to 4.31.3. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/0499de31b99561a6d14a36a5f662c2a54f91beee...014f16e7ab1402f30e7c3329d33797e7948572db) --- updated-dependencies: - dependency-name: github/codeql-action dependency-version: 4.31.3 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/security-scorecard.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/security-scorecard.yml b/.github/workflows/security-scorecard.yml index 996135fa9..bbf9490c4 100644 --- a/.github/workflows/security-scorecard.yml +++ b/.github/workflows/security-scorecard.yml @@ -52,6 +52,6 @@ jobs: path: results.sarif retention-days: 5 - name: Upload to Code-Scanning - uses: github/codeql-action/upload-sarif@0499de31b99561a6d14a36a5f662c2a54f91beee # v3.29.5 + uses: github/codeql-action/upload-sarif@014f16e7ab1402f30e7c3329d33797e7948572db # v3.29.5 with: sarif_file: results.sarif From f449a570236ed51ddb7f35f7a35835c5a66b26bf Mon Sep 17 00:00:00 2001 From: Philipp Page Date: Tue, 18 Nov 2025 18:00:51 +0100 Subject: [PATCH 042/202] chore(ci): Enable Java 25 E2E tests on Java 25 Lambda runtime and upgrade to GraalVM 25. (#2298) * chore(ci): Enable Java 25 E2E tests on Java 25 Lambda runtime. * Only run for GraalVM 25. * Retain log groups according to retention policy of E2E tests to allow for easier debugging. * Add unsafeAllocated: true to allow native calls from Lambda runtime. --- .github/workflows/check-e2e.yml | 9 ++++----- .../reflect-config.json | 18 ++++++++++++++---- .../reflect-config.json | 18 ++++++++++++++---- .../reflect-config.json | 18 ++++++++++++++---- .../reflect-config.json | 18 ++++++++++++++---- .../reflect-config.json | 16 +++++++++++++--- .../reflect-config.json | 3 ++- .../reflect-config.json | 3 ++- .../reflect-config.json | 3 ++- .../reflect-config.json | 3 ++- .../reflect-config.json | 3 ++- .../reflect-config.json | 3 ++- .../reflect-config.json | 3 ++- .../reflect-config.json | 3 ++- powertools-e2e-tests/handlers/pom.xml | 9 +++++++++ .../reflect-config.json | 3 ++- .../powertools/testutils/Infrastructure.java | 4 +++- .../powertools/testutils/JavaRuntime.java | 3 ++- .../src/test/resources/docker/Dockerfile | 8 ++++---- 19 files changed, 109 insertions(+), 39 deletions(-) diff --git a/.github/workflows/check-e2e.yml b/.github/workflows/check-e2e.yml index a3c4a7542..54e7cd023 100644 --- a/.github/workflows/check-e2e.yml +++ b/.github/workflows/check-e2e.yml @@ -48,12 +48,13 @@ jobs: environment: E2E strategy: fail-fast: false - max-parallel: 3 + max-parallel: 4 matrix: java: - 11 - 17 - 21 + - 25 steps: - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 @@ -81,12 +82,10 @@ jobs: environment: E2E strategy: fail-fast: false - max-parallel: 3 + max-parallel: 1 matrix: java: - - 11 - - 17 - - 21 + - 25 steps: - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 diff --git a/examples/powertools-examples-cloudformation/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/reflect-config.json b/examples/powertools-examples-cloudformation/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/reflect-config.json index 10152cc64..e97baa294 100644 --- a/examples/powertools-examples-cloudformation/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/reflect-config.json +++ b/examples/powertools-examples-cloudformation/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/reflect-config.json @@ -27,8 +27,18 @@ "fields":[{"name":"theUnsafe"}] }, { - "name":"com.amazonaws.services.lambda.runtime.api.client.runtimeapi.dto.InvocationRequest", - "fields":[{"name":"id"}, {"name":"invokedFunctionArn"}, {"name":"deadlineTimeInMs"}, {"name":"xrayTraceId"}, {"name":"clientContext"}, {"name":"cognitoIdentity"}, {"name": "tenantId"}, {"name":"content"}], - "allPublicMethods":true + "name": "com.amazonaws.services.lambda.runtime.api.client.runtimeapi.dto.InvocationRequest", + "fields": [ + { "name": "id" }, + { "name": "invokedFunctionArn" }, + { "name": "deadlineTimeInMs" }, + { "name": "xrayTraceId" }, + { "name": "clientContext" }, + { "name": "cognitoIdentity" }, + { "name": "tenantId" }, + { "name": "content" } + ], + "allPublicMethods": true, + "unsafeAllocated": true } -] \ No newline at end of file +] diff --git a/examples/powertools-examples-core-utilities/sam-graalvm/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/reflect-config.json b/examples/powertools-examples-core-utilities/sam-graalvm/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/reflect-config.json index 10152cc64..e97baa294 100644 --- a/examples/powertools-examples-core-utilities/sam-graalvm/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/reflect-config.json +++ b/examples/powertools-examples-core-utilities/sam-graalvm/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/reflect-config.json @@ -27,8 +27,18 @@ "fields":[{"name":"theUnsafe"}] }, { - "name":"com.amazonaws.services.lambda.runtime.api.client.runtimeapi.dto.InvocationRequest", - "fields":[{"name":"id"}, {"name":"invokedFunctionArn"}, {"name":"deadlineTimeInMs"}, {"name":"xrayTraceId"}, {"name":"clientContext"}, {"name":"cognitoIdentity"}, {"name": "tenantId"}, {"name":"content"}], - "allPublicMethods":true + "name": "com.amazonaws.services.lambda.runtime.api.client.runtimeapi.dto.InvocationRequest", + "fields": [ + { "name": "id" }, + { "name": "invokedFunctionArn" }, + { "name": "deadlineTimeInMs" }, + { "name": "xrayTraceId" }, + { "name": "clientContext" }, + { "name": "cognitoIdentity" }, + { "name": "tenantId" }, + { "name": "content" } + ], + "allPublicMethods": true, + "unsafeAllocated": true } -] \ No newline at end of file +] diff --git a/examples/powertools-examples-idempotency/sam-graalvm/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/reflect-config.json b/examples/powertools-examples-idempotency/sam-graalvm/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/reflect-config.json index 10152cc64..e97baa294 100644 --- a/examples/powertools-examples-idempotency/sam-graalvm/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/reflect-config.json +++ b/examples/powertools-examples-idempotency/sam-graalvm/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/reflect-config.json @@ -27,8 +27,18 @@ "fields":[{"name":"theUnsafe"}] }, { - "name":"com.amazonaws.services.lambda.runtime.api.client.runtimeapi.dto.InvocationRequest", - "fields":[{"name":"id"}, {"name":"invokedFunctionArn"}, {"name":"deadlineTimeInMs"}, {"name":"xrayTraceId"}, {"name":"clientContext"}, {"name":"cognitoIdentity"}, {"name": "tenantId"}, {"name":"content"}], - "allPublicMethods":true + "name": "com.amazonaws.services.lambda.runtime.api.client.runtimeapi.dto.InvocationRequest", + "fields": [ + { "name": "id" }, + { "name": "invokedFunctionArn" }, + { "name": "deadlineTimeInMs" }, + { "name": "xrayTraceId" }, + { "name": "clientContext" }, + { "name": "cognitoIdentity" }, + { "name": "tenantId" }, + { "name": "content" } + ], + "allPublicMethods": true, + "unsafeAllocated": true } -] \ No newline at end of file +] diff --git a/examples/powertools-examples-parameters/sam-graalvm/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/reflect-config.json b/examples/powertools-examples-parameters/sam-graalvm/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/reflect-config.json index 10152cc64..e97baa294 100644 --- a/examples/powertools-examples-parameters/sam-graalvm/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/reflect-config.json +++ b/examples/powertools-examples-parameters/sam-graalvm/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/reflect-config.json @@ -27,8 +27,18 @@ "fields":[{"name":"theUnsafe"}] }, { - "name":"com.amazonaws.services.lambda.runtime.api.client.runtimeapi.dto.InvocationRequest", - "fields":[{"name":"id"}, {"name":"invokedFunctionArn"}, {"name":"deadlineTimeInMs"}, {"name":"xrayTraceId"}, {"name":"clientContext"}, {"name":"cognitoIdentity"}, {"name": "tenantId"}, {"name":"content"}], - "allPublicMethods":true + "name": "com.amazonaws.services.lambda.runtime.api.client.runtimeapi.dto.InvocationRequest", + "fields": [ + { "name": "id" }, + { "name": "invokedFunctionArn" }, + { "name": "deadlineTimeInMs" }, + { "name": "xrayTraceId" }, + { "name": "clientContext" }, + { "name": "cognitoIdentity" }, + { "name": "tenantId" }, + { "name": "content" } + ], + "allPublicMethods": true, + "unsafeAllocated": true } -] \ No newline at end of file +] diff --git a/examples/powertools-examples-serialization/sam-graalvm/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/reflect-config.json b/examples/powertools-examples-serialization/sam-graalvm/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/reflect-config.json index 8d3f375f2..7d38fc57d 100644 --- a/examples/powertools-examples-serialization/sam-graalvm/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/reflect-config.json +++ b/examples/powertools-examples-serialization/sam-graalvm/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/reflect-config.json @@ -27,9 +27,19 @@ "fields":[{"name":"theUnsafe"}] }, { - "name":"com.amazonaws.services.lambda.runtime.api.client.runtimeapi.dto.InvocationRequest", - "fields":[{"name":"id"}, {"name":"invokedFunctionArn"}, {"name":"deadlineTimeInMs"}, {"name":"xrayTraceId"}, {"name":"clientContext"}, {"name":"cognitoIdentity"}, {"name": "tenantId"}, {"name":"content"}], - "allPublicMethods":true + "name": "com.amazonaws.services.lambda.runtime.api.client.runtimeapi.dto.InvocationRequest", + "fields": [ + { "name": "id" }, + { "name": "invokedFunctionArn" }, + { "name": "deadlineTimeInMs" }, + { "name": "xrayTraceId" }, + { "name": "clientContext" }, + { "name": "cognitoIdentity" }, + { "name": "tenantId" }, + { "name": "content" } + ], + "allPublicMethods": true, + "unsafeAllocated": true }, { "name":"software.amazon.lambda.powertools.common.internal.LambdaHandlerProcessor", diff --git a/powertools-e2e-tests/handlers/idempotency-functional/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/reflect-config.json b/powertools-e2e-tests/handlers/idempotency-functional/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/reflect-config.json index e69fa735c..467af67a0 100644 --- a/powertools-e2e-tests/handlers/idempotency-functional/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/reflect-config.json +++ b/powertools-e2e-tests/handlers/idempotency-functional/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/reflect-config.json @@ -56,6 +56,7 @@ { "name": "tenantId" }, { "name": "content" } ], - "allPublicMethods": true + "allPublicMethods": true, + "unsafeAllocated": true } ] diff --git a/powertools-e2e-tests/handlers/idempotency-generics/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/reflect-config.json b/powertools-e2e-tests/handlers/idempotency-generics/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/reflect-config.json index e69fa735c..467af67a0 100644 --- a/powertools-e2e-tests/handlers/idempotency-generics/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/reflect-config.json +++ b/powertools-e2e-tests/handlers/idempotency-generics/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/reflect-config.json @@ -56,6 +56,7 @@ { "name": "tenantId" }, { "name": "content" } ], - "allPublicMethods": true + "allPublicMethods": true, + "unsafeAllocated": true } ] diff --git a/powertools-e2e-tests/handlers/idempotency/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/reflect-config.json b/powertools-e2e-tests/handlers/idempotency/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/reflect-config.json index e69fa735c..467af67a0 100644 --- a/powertools-e2e-tests/handlers/idempotency/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/reflect-config.json +++ b/powertools-e2e-tests/handlers/idempotency/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/reflect-config.json @@ -56,6 +56,7 @@ { "name": "tenantId" }, { "name": "content" } ], - "allPublicMethods": true + "allPublicMethods": true, + "unsafeAllocated": true } ] diff --git a/powertools-e2e-tests/handlers/logging-functional/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/reflect-config.json b/powertools-e2e-tests/handlers/logging-functional/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/reflect-config.json index e69fa735c..467af67a0 100644 --- a/powertools-e2e-tests/handlers/logging-functional/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/reflect-config.json +++ b/powertools-e2e-tests/handlers/logging-functional/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/reflect-config.json @@ -56,6 +56,7 @@ { "name": "tenantId" }, { "name": "content" } ], - "allPublicMethods": true + "allPublicMethods": true, + "unsafeAllocated": true } ] diff --git a/powertools-e2e-tests/handlers/logging-log4j/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/reflect-config.json b/powertools-e2e-tests/handlers/logging-log4j/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/reflect-config.json index e69fa735c..467af67a0 100644 --- a/powertools-e2e-tests/handlers/logging-log4j/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/reflect-config.json +++ b/powertools-e2e-tests/handlers/logging-log4j/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/reflect-config.json @@ -56,6 +56,7 @@ { "name": "tenantId" }, { "name": "content" } ], - "allPublicMethods": true + "allPublicMethods": true, + "unsafeAllocated": true } ] diff --git a/powertools-e2e-tests/handlers/logging-logback/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/reflect-config.json b/powertools-e2e-tests/handlers/logging-logback/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/reflect-config.json index e69fa735c..467af67a0 100644 --- a/powertools-e2e-tests/handlers/logging-logback/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/reflect-config.json +++ b/powertools-e2e-tests/handlers/logging-logback/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/reflect-config.json @@ -56,6 +56,7 @@ { "name": "tenantId" }, { "name": "content" } ], - "allPublicMethods": true + "allPublicMethods": true, + "unsafeAllocated": true } ] diff --git a/powertools-e2e-tests/handlers/metrics/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/reflect-config.json b/powertools-e2e-tests/handlers/metrics/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/reflect-config.json index e69fa735c..467af67a0 100644 --- a/powertools-e2e-tests/handlers/metrics/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/reflect-config.json +++ b/powertools-e2e-tests/handlers/metrics/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/reflect-config.json @@ -56,6 +56,7 @@ { "name": "tenantId" }, { "name": "content" } ], - "allPublicMethods": true + "allPublicMethods": true, + "unsafeAllocated": true } ] diff --git a/powertools-e2e-tests/handlers/parameters/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/reflect-config.json b/powertools-e2e-tests/handlers/parameters/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/reflect-config.json index e69fa735c..467af67a0 100644 --- a/powertools-e2e-tests/handlers/parameters/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/reflect-config.json +++ b/powertools-e2e-tests/handlers/parameters/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/reflect-config.json @@ -56,6 +56,7 @@ { "name": "tenantId" }, { "name": "content" } ], - "allPublicMethods": true + "allPublicMethods": true, + "unsafeAllocated": true } ] diff --git a/powertools-e2e-tests/handlers/pom.xml b/powertools-e2e-tests/handlers/pom.xml index 11eedca85..ef1d3e65f 100644 --- a/powertools-e2e-tests/handlers/pom.xml +++ b/powertools-e2e-tests/handlers/pom.xml @@ -261,6 +261,15 @@ 1.9.21 + + jdk25 + + [25,) + + + 1.9.25 + + diff --git a/powertools-e2e-tests/handlers/tracing/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/reflect-config.json b/powertools-e2e-tests/handlers/tracing/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/reflect-config.json index e69fa735c..467af67a0 100644 --- a/powertools-e2e-tests/handlers/tracing/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/reflect-config.json +++ b/powertools-e2e-tests/handlers/tracing/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/reflect-config.json @@ -56,6 +56,7 @@ { "name": "tenantId" }, { "name": "content" } ], - "allPublicMethods": true + "allPublicMethods": true, + "unsafeAllocated": true } ] diff --git a/powertools-e2e-tests/src/test/java/software/amazon/lambda/powertools/testutils/Infrastructure.java b/powertools-e2e-tests/src/test/java/software/amazon/lambda/powertools/testutils/Infrastructure.java index ea5ac3342..ae96943c2 100644 --- a/powertools-e2e-tests/src/test/java/software/amazon/lambda/powertools/testutils/Infrastructure.java +++ b/powertools-e2e-tests/src/test/java/software/amazon/lambda/powertools/testutils/Infrastructure.java @@ -247,7 +247,7 @@ private Stack createStackWithLambda() { .create(e2eStack, functionName + "-logs") .logGroupName("/aws/lambda/" + functionName) .retention(RetentionDays.ONE_DAY) - .removalPolicy(RemovalPolicy.DESTROY) + .removalPolicy(RemovalPolicy.RETAIN) .build(); if (!StringUtils.isEmpty(idempotencyTable)) { @@ -522,6 +522,8 @@ private JavaRuntime mapRuntimeVersion(String environmentVariableName) { ret = JavaRuntime.JAVA17; } else if (javaVersion.startsWith("21")) { ret = JavaRuntime.JAVA21; + } else if (javaVersion.startsWith("25")) { + ret = JavaRuntime.JAVA25; } else { throw new IllegalArgumentException("Unsupported Java version " + javaVersion); } diff --git a/powertools-e2e-tests/src/test/java/software/amazon/lambda/powertools/testutils/JavaRuntime.java b/powertools-e2e-tests/src/test/java/software/amazon/lambda/powertools/testutils/JavaRuntime.java index 53d35e86d..625a222aa 100644 --- a/powertools-e2e-tests/src/test/java/software/amazon/lambda/powertools/testutils/JavaRuntime.java +++ b/powertools-e2e-tests/src/test/java/software/amazon/lambda/powertools/testutils/JavaRuntime.java @@ -19,7 +19,8 @@ public enum JavaRuntime { JAVA11("java11", Runtime.JAVA_11, "11"), JAVA17("java17", Runtime.JAVA_17, "17"), - JAVA21("java21", Runtime.JAVA_21, "21"); + JAVA21("java21", Runtime.JAVA_21, "21"), + JAVA25("java25", Runtime.JAVA_25, "25"); private final String runtime; private final Runtime cdkRuntime; diff --git a/powertools-e2e-tests/src/test/resources/docker/Dockerfile b/powertools-e2e-tests/src/test/resources/docker/Dockerfile index 7d47b5331..5d374eaa8 100644 --- a/powertools-e2e-tests/src/test/resources/docker/Dockerfile +++ b/powertools-e2e-tests/src/test/resources/docker/Dockerfile @@ -1,9 +1,9 @@ -# Use the official AWS SAM base image for Java 21 -FROM public.ecr.aws/sam/build-java21@sha256:ced538830c78a0f45f91abe5f7963cb73005ad933aee7dd1160bd77d9fd3c4f3 +# Use the official AWS SAM base image for Java 25 +FROM public.ecr.aws/sam/build-java25@sha256:2ef9e5b950cc79489691be16c7edff904bf196955633dc7fbbc282a1ea421ba8 # Install GraalVM dependencies -RUN curl -4 -L https://download.oracle.com/graalvm/21/latest/graalvm-jdk-21_linux-x64_bin.tar.gz | tar -xvz -RUN mv graalvm-jdk-21.* /usr/lib/graalvm +RUN curl -4 -L https://download.oracle.com/graalvm/25/latest/graalvm-jdk-25_linux-x64_bin.tar.gz | tar -xvz +RUN mv graalvm-jdk-25.* /usr/lib/graalvm # Make native image and mvn available on CLI RUN ln -s /usr/lib/graalvm/bin/native-image /usr/bin/native-image From 044b96d149816f52a247be42d929241380bfd7ba Mon Sep 17 00:00:00 2001 From: Philipp Page Date: Fri, 21 Nov 2025 10:37:45 +0100 Subject: [PATCH 043/202] improv(batch): Propagate trace entity to worker threads during parallel batch processing. (#2300) --- docs/utilities/batch.md | 82 +++++++++++++++++- .../handler/DynamoDbBatchMessageHandler.java | 54 ++++++++---- .../KinesisStreamsBatchMessageHandler.java | 60 +++++++++----- .../batch/handler/SqsBatchMessageHandler.java | 70 ++++++++++------ .../internal/XRayTraceEntityPropagator.java | 83 +++++++++++++++++++ 5 files changed, 288 insertions(+), 61 deletions(-) create mode 100644 powertools-batch/src/main/java/software/amazon/lambda/powertools/batch/internal/XRayTraceEntityPropagator.java diff --git a/docs/utilities/batch.md b/docs/utilities/batch.md index 3f9b6e53d..b535a90f6 100644 --- a/docs/utilities/batch.md +++ b/docs/utilities/batch.md @@ -484,7 +484,9 @@ used with SQS FIFO. In that case, an `UnsupportedOperationException` is thrown. in most cases the defaults work well, and changing them is more likely to decrease performance (see [here](https://www.baeldung.com/java-when-to-use-parallel-stream#fork-join-framework) and [here](https://dzone.com/articles/be-aware-of-forkjoinpoolcommonpool)). - In situations where this may be useful - such as performing IO-bound work in parallel - make sure to measure before and after! + In situations where this may be useful, such as performing IO-bound work in parallel, make sure to measure before and after! + +When using parallel processing with X-Ray tracing enabled, the Tracing utility automatically handles trace context propagation to worker threads. This ensures that subsegments created during parallel message processing appear under the correct parent segment in your X-Ray trace, maintaining proper trace hierarchy and visibility into your batch processing performance. === "Example with SQS" @@ -536,6 +538,84 @@ used with SQS FIFO. In that case, an `UnsupportedOperationException` is thrown. } ``` +=== "Example with X-Ray Tracing" + + ```java hl_lines="12 17" + public class SqsBatchHandler implements RequestHandler { + + private final BatchMessageHandler handler; + + public SqsBatchHandler() { + handler = new BatchMessageHandlerBuilder() + .withSqsBatchHandler() + .buildWithMessageHandler(this::processMessage, Product.class); + } + + @Override + @Tracing + public SQSBatchResponse handleRequest(SQSEvent sqsEvent, Context context) { + return handler.processBatchInParallel(sqsEvent, context); + } + + @Tracing // This will appear correctly under the handleRequest subsegment + private void processMessage(Product p, Context c) { + // Process the product - subsegments will appear under handleRequest + } + } + ``` + +### Choosing the right concurrency model + +The `processBatchInParallel` method has two overloads with different concurrency characteristics: + +#### Without custom executor (parallelStream) + +When you call `processBatchInParallel(event, context)` without providing an executor, the implementation uses Java's `parallelStream()` which leverages the common `ForkJoinPool`. + +**Best for: CPU-bound workloads** + +- Thread pool size matches available CPU cores +- Optimized for computational tasks (data transformation, calculations, parsing) +- Main thread participates in work-stealing +- Simple to use with no configuration needed + +```java +// Good for CPU-intensive processing +return handler.processBatchInParallel(sqsEvent, context); +``` + +#### With custom executor (CompletableFuture) + +When you call `processBatchInParallel(event, context, executor)` with a custom executor, the implementation uses `CompletableFuture` which gives you full control over the thread pool. + +**Best for: I/O-bound workloads** + +- You control thread pool size and characteristics +- Ideal for I/O operations (HTTP calls, database queries, S3 operations) +- Can use larger thread pools since threads spend time waiting, not computing +- Main thread only waits; worker threads do all processing + +```java +// Good for I/O-intensive processing (API calls, DB queries, etc.) +ExecutorService executor = Executors.newFixedThreadPool(50); +return handler.processBatchInParallel(sqsEvent, context, executor); +``` + +**For Java 21+: Virtual Threads** + +If you're using Java 21 or later, virtual threads are ideal for I/O-bound workloads: + +```java +ExecutorService executor = Executors.newVirtualThreadPerTaskExecutor(); +return handler.processBatchInParallel(sqsEvent, context, executor); +``` + +Virtual threads are lightweight and can handle thousands of concurrent I/O operations efficiently without the overhead of platform threads. + +**Recommendation for typical Lambda SQS processing:** + +Most Lambda functions processing SQS messages perform I/O operations (calling APIs, querying databases, writing to S3). For these workloads, use the custom executor approach with a thread pool sized appropriately for your I/O operations or virtual threads for Java 21+. + ## Handling Messages diff --git a/powertools-batch/src/main/java/software/amazon/lambda/powertools/batch/handler/DynamoDbBatchMessageHandler.java b/powertools-batch/src/main/java/software/amazon/lambda/powertools/batch/handler/DynamoDbBatchMessageHandler.java index df7179a88..dbfdf63cd 100644 --- a/powertools-batch/src/main/java/software/amazon/lambda/powertools/batch/handler/DynamoDbBatchMessageHandler.java +++ b/powertools-batch/src/main/java/software/amazon/lambda/powertools/batch/handler/DynamoDbBatchMessageHandler.java @@ -14,21 +14,25 @@ package software.amazon.lambda.powertools.batch.handler; -import com.amazonaws.services.lambda.runtime.Context; -import com.amazonaws.services.lambda.runtime.events.DynamodbEvent; -import com.amazonaws.services.lambda.runtime.events.StreamsEventResponse; - import java.util.ArrayList; import java.util.List; import java.util.Optional; import java.util.concurrent.CompletableFuture; import java.util.concurrent.Executor; +import java.util.concurrent.atomic.AtomicReference; import java.util.function.BiConsumer; import java.util.function.Consumer; import java.util.stream.Collectors; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; + +import com.amazonaws.services.lambda.runtime.Context; +import com.amazonaws.services.lambda.runtime.events.DynamodbEvent; +import com.amazonaws.services.lambda.runtime.events.StreamsEventResponse; + import software.amazon.lambda.powertools.batch.internal.MultiThreadMDC; +import software.amazon.lambda.powertools.batch.internal.XRayTraceEntityPropagator; /** * A batch message processor for DynamoDB Streams batches. @@ -43,8 +47,8 @@ public class DynamoDbBatchMessageHandler implements BatchMessageHandler rawMessageHandler; public DynamoDbBatchMessageHandler(Consumer successHandler, - BiConsumer failureHandler, - BiConsumer rawMessageHandler) { + BiConsumer failureHandler, + BiConsumer rawMessageHandler) { this.successHandler = successHandler; this.failureHandler = failureHandler; this.rawMessageHandler = rawMessageHandler; @@ -65,14 +69,23 @@ public StreamsEventResponse processBatch(DynamodbEvent event, Context context) { @Override public StreamsEventResponse processBatchInParallel(DynamodbEvent event, Context context) { MultiThreadMDC multiThreadMDC = new MultiThreadMDC(); + Object capturedSubsegment = XRayTraceEntityPropagator.captureTraceEntity(); List batchItemFailures = event.getRecords() .parallelStream() // Parallel processing .map(eventRecord -> { - multiThreadMDC.copyMDCToThread(Thread.currentThread().getName()); - Optional failureOpt = processBatchItem(eventRecord, context); - multiThreadMDC.removeThread(Thread.currentThread().getName()); - return failureOpt; + AtomicReference> result = new AtomicReference<>(); + + XRayTraceEntityPropagator.runWithEntity(capturedSubsegment, () -> { + multiThreadMDC.copyMDCToThread(Thread.currentThread().getName()); + try { + result.set(processBatchItem(eventRecord, context)); + } finally { + multiThreadMDC.removeThread(Thread.currentThread().getName()); + } + }); + + return result.get(); }) .filter(Optional::isPresent) .map(Optional::get) @@ -84,21 +97,29 @@ public StreamsEventResponse processBatchInParallel(DynamodbEvent event, Context @Override public StreamsEventResponse processBatchInParallel(DynamodbEvent event, Context context, Executor executor) { MultiThreadMDC multiThreadMDC = new MultiThreadMDC(); + Object capturedSubsegment = XRayTraceEntityPropagator.captureTraceEntity(); List batchItemFailures = new ArrayList<>(); List> futures = event.getRecords().stream() .map(eventRecord -> CompletableFuture.runAsync(() -> { - multiThreadMDC.copyMDCToThread(Thread.currentThread().getName()); - Optional failureOpt = processBatchItem(eventRecord, context); - failureOpt.ifPresent(batchItemFailures::add); - multiThreadMDC.removeThread(Thread.currentThread().getName()); + XRayTraceEntityPropagator.runWithEntity(capturedSubsegment, () -> { + multiThreadMDC.copyMDCToThread(Thread.currentThread().getName()); + try { + Optional failureOpt = processBatchItem(eventRecord, + context); + failureOpt.ifPresent(batchItemFailures::add); + } finally { + multiThreadMDC.removeThread(Thread.currentThread().getName()); + } + }); }, executor)) .collect(Collectors.toList()); futures.forEach(CompletableFuture::join); return StreamsEventResponse.builder().withBatchItemFailures(batchItemFailures).build(); } - private Optional processBatchItem(DynamodbEvent.DynamodbStreamRecord streamRecord, Context context) { + private Optional processBatchItem( + DynamodbEvent.DynamodbStreamRecord streamRecord, Context context) { try { LOGGER.debug("Processing item {}", streamRecord.getEventID()); @@ -124,7 +145,8 @@ private Optional processBatchItem(Dynamod LOGGER.warn("failureHandler threw handling failure", e2); } } - return Optional.of(StreamsEventResponse.BatchItemFailure.builder().withItemIdentifier(sequenceNumber).build()); + return Optional + .of(StreamsEventResponse.BatchItemFailure.builder().withItemIdentifier(sequenceNumber).build()); } } } diff --git a/powertools-batch/src/main/java/software/amazon/lambda/powertools/batch/handler/KinesisStreamsBatchMessageHandler.java b/powertools-batch/src/main/java/software/amazon/lambda/powertools/batch/handler/KinesisStreamsBatchMessageHandler.java index 233830462..f147578d4 100644 --- a/powertools-batch/src/main/java/software/amazon/lambda/powertools/batch/handler/KinesisStreamsBatchMessageHandler.java +++ b/powertools-batch/src/main/java/software/amazon/lambda/powertools/batch/handler/KinesisStreamsBatchMessageHandler.java @@ -14,22 +14,25 @@ package software.amazon.lambda.powertools.batch.handler; - -import com.amazonaws.services.lambda.runtime.Context; -import com.amazonaws.services.lambda.runtime.events.KinesisEvent; -import com.amazonaws.services.lambda.runtime.events.StreamsEventResponse; - import java.util.ArrayList; import java.util.List; import java.util.Optional; import java.util.concurrent.CompletableFuture; import java.util.concurrent.Executor; +import java.util.concurrent.atomic.AtomicReference; import java.util.function.BiConsumer; import java.util.function.Consumer; import java.util.stream.Collectors; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; + +import com.amazonaws.services.lambda.runtime.Context; +import com.amazonaws.services.lambda.runtime.events.KinesisEvent; +import com.amazonaws.services.lambda.runtime.events.StreamsEventResponse; + import software.amazon.lambda.powertools.batch.internal.MultiThreadMDC; +import software.amazon.lambda.powertools.batch.internal.XRayTraceEntityPropagator; import software.amazon.lambda.powertools.utilities.EventDeserializer; /** @@ -49,10 +52,10 @@ public class KinesisStreamsBatchMessageHandler implements BatchMessageHandler private final BiConsumer failureHandler; public KinesisStreamsBatchMessageHandler(BiConsumer rawMessageHandler, - BiConsumer messageHandler, - Class messageClass, - Consumer successHandler, - BiConsumer failureHandler) { + BiConsumer messageHandler, + Class messageClass, + Consumer successHandler, + BiConsumer failureHandler) { this.rawMessageHandler = rawMessageHandler; this.messageHandler = messageHandler; @@ -76,14 +79,23 @@ public StreamsEventResponse processBatch(KinesisEvent event, Context context) { @Override public StreamsEventResponse processBatchInParallel(KinesisEvent event, Context context) { MultiThreadMDC multiThreadMDC = new MultiThreadMDC(); + Object capturedSubsegment = XRayTraceEntityPropagator.captureTraceEntity(); List batchItemFailures = event.getRecords() .parallelStream() // Parallel processing .map(eventRecord -> { - multiThreadMDC.copyMDCToThread(Thread.currentThread().getName()); - Optional failureOpt = processBatchItem(eventRecord, context); - multiThreadMDC.removeThread(Thread.currentThread().getName()); - return failureOpt; + AtomicReference> result = new AtomicReference<>(); + + XRayTraceEntityPropagator.runWithEntity(capturedSubsegment, () -> { + multiThreadMDC.copyMDCToThread(Thread.currentThread().getName()); + try { + result.set(processBatchItem(eventRecord, context)); + } finally { + multiThreadMDC.removeThread(Thread.currentThread().getName()); + } + }); + + return result.get(); }) .filter(Optional::isPresent) .map(Optional::get) @@ -95,21 +107,29 @@ public StreamsEventResponse processBatchInParallel(KinesisEvent event, Context c @Override public StreamsEventResponse processBatchInParallel(KinesisEvent event, Context context, Executor executor) { MultiThreadMDC multiThreadMDC = new MultiThreadMDC(); + Object capturedSubsegment = XRayTraceEntityPropagator.captureTraceEntity(); List batchItemFailures = new ArrayList<>(); List> futures = event.getRecords().stream() .map(eventRecord -> CompletableFuture.runAsync(() -> { - multiThreadMDC.copyMDCToThread(Thread.currentThread().getName()); - Optional failureOpt = processBatchItem(eventRecord, context); - failureOpt.ifPresent(batchItemFailures::add); - multiThreadMDC.removeThread(Thread.currentThread().getName()); + XRayTraceEntityPropagator.runWithEntity(capturedSubsegment, () -> { + multiThreadMDC.copyMDCToThread(Thread.currentThread().getName()); + try { + Optional failureOpt = processBatchItem(eventRecord, + context); + failureOpt.ifPresent(batchItemFailures::add); + } finally { + multiThreadMDC.removeThread(Thread.currentThread().getName()); + } + }); }, executor)) .collect(Collectors.toList()); futures.forEach(CompletableFuture::join); return StreamsEventResponse.builder().withBatchItemFailures(batchItemFailures).build(); } - private Optional processBatchItem(KinesisEvent.KinesisEventRecord eventRecord, Context context) { + private Optional processBatchItem( + KinesisEvent.KinesisEventRecord eventRecord, Context context) { try { LOGGER.debug("Processing item {}", eventRecord.getEventID()); @@ -141,8 +161,8 @@ private Optional processBatchItem(Kinesis } } - return Optional.of(StreamsEventResponse.BatchItemFailure.builder().withItemIdentifier(eventRecord.getKinesis().getSequenceNumber()).build()); + return Optional.of(StreamsEventResponse.BatchItemFailure.builder() + .withItemIdentifier(eventRecord.getKinesis().getSequenceNumber()).build()); } } } - diff --git a/powertools-batch/src/main/java/software/amazon/lambda/powertools/batch/handler/SqsBatchMessageHandler.java b/powertools-batch/src/main/java/software/amazon/lambda/powertools/batch/handler/SqsBatchMessageHandler.java index ccb6a6dd7..737c7cceb 100644 --- a/powertools-batch/src/main/java/software/amazon/lambda/powertools/batch/handler/SqsBatchMessageHandler.java +++ b/powertools-batch/src/main/java/software/amazon/lambda/powertools/batch/handler/SqsBatchMessageHandler.java @@ -14,24 +14,26 @@ package software.amazon.lambda.powertools.batch.handler; -import com.amazonaws.services.lambda.runtime.Context; -import com.amazonaws.services.lambda.runtime.events.KinesisEvent; -import com.amazonaws.services.lambda.runtime.events.SQSBatchResponse; -import com.amazonaws.services.lambda.runtime.events.SQSEvent; import java.util.ArrayList; import java.util.List; import java.util.Optional; import java.util.concurrent.CompletableFuture; import java.util.concurrent.Executor; import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicReference; import java.util.function.BiConsumer; import java.util.function.Consumer; import java.util.stream.Collectors; -import com.amazonaws.services.lambda.runtime.events.StreamsEventResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; + +import com.amazonaws.services.lambda.runtime.Context; +import com.amazonaws.services.lambda.runtime.events.SQSBatchResponse; +import com.amazonaws.services.lambda.runtime.events.SQSEvent; + import software.amazon.lambda.powertools.batch.internal.MultiThreadMDC; +import software.amazon.lambda.powertools.batch.internal.XRayTraceEntityPropagator; import software.amazon.lambda.powertools.utilities.EventDeserializer; /** @@ -54,9 +56,9 @@ public class SqsBatchMessageHandler implements BatchMessageHandler failureHandler; public SqsBatchMessageHandler(BiConsumer messageHandler, Class messageClass, - BiConsumer rawMessageHandler, - Consumer successHandler, - BiConsumer failureHandler) { + BiConsumer rawMessageHandler, + Consumer successHandler, + BiConsumer failureHandler) { this.messageHandler = messageHandler; this.messageClass = messageClass; this.rawMessageHandler = rawMessageHandler; @@ -77,16 +79,16 @@ public SQSBatchResponse processBatch(SQSEvent event, Context context) { for (; messageCursor < event.getRecords().size() && !failWholeBatch.get(); messageCursor++) { SQSEvent.SQSMessage message = event.getRecords().get(messageCursor); - String messageGroupId = message.getAttributes() != null ? - message.getAttributes().get(MESSAGE_GROUP_ID_KEY) : null; + String messageGroupId = message.getAttributes() != null ? message.getAttributes().get(MESSAGE_GROUP_ID_KEY) + : null; processBatchItem(message, context).ifPresent(batchItemFailure -> { response.getBatchItemFailures().add(batchItemFailure); if (messageGroupId != null) { failWholeBatch.set(true); LOGGER.info( - "A message in a batch with messageGroupId {} and messageId {} failed; failing the rest of the batch too" - , messageGroupId, message.getMessageId()); + "A message in a batch with messageGroupId {} and messageId {} failed; failing the rest of the batch too", + messageGroupId, message.getMessageId()); } }); } @@ -105,18 +107,28 @@ public SQSBatchResponse processBatch(SQSEvent event, Context context) { @Override public SQSBatchResponse processBatchInParallel(SQSEvent event, Context context) { if (isFIFOEnabled(event)) { - throw new UnsupportedOperationException("FIFO queues are not supported in parallel mode, use the processBatch method instead"); + throw new UnsupportedOperationException( + "FIFO queues are not supported in parallel mode, use the processBatch method instead"); } MultiThreadMDC multiThreadMDC = new MultiThreadMDC(); + Object capturedSubsegment = XRayTraceEntityPropagator.captureTraceEntity(); + List batchItemFailures = event.getRecords() .parallelStream() // Parallel processing .map(sqsMessage -> { - - multiThreadMDC.copyMDCToThread(Thread.currentThread().getName()); - Optional failureOpt = processBatchItem(sqsMessage, context); - multiThreadMDC.removeThread(Thread.currentThread().getName()); - return failureOpt; + AtomicReference> result = new AtomicReference<>(); + + XRayTraceEntityPropagator.runWithEntity(capturedSubsegment, () -> { + multiThreadMDC.copyMDCToThread(Thread.currentThread().getName()); + try { + result.set(processBatchItem(sqsMessage, context)); + } finally { + multiThreadMDC.removeThread(Thread.currentThread().getName()); + } + }); + + return result.get(); }) .filter(Optional::isPresent) .map(Optional::get) @@ -128,17 +140,26 @@ public SQSBatchResponse processBatchInParallel(SQSEvent event, Context context) @Override public SQSBatchResponse processBatchInParallel(SQSEvent event, Context context, Executor executor) { if (isFIFOEnabled(event)) { - throw new UnsupportedOperationException("FIFO queues are not supported in parallel mode, use the processBatch method instead"); + throw new UnsupportedOperationException( + "FIFO queues are not supported in parallel mode, use the processBatch method instead"); } MultiThreadMDC multiThreadMDC = new MultiThreadMDC(); + Object capturedSubsegment = XRayTraceEntityPropagator.captureTraceEntity(); + List batchItemFailures = new ArrayList<>(); List> futures = event.getRecords().stream() .map(eventRecord -> CompletableFuture.runAsync(() -> { - multiThreadMDC.copyMDCToThread(Thread.currentThread().getName()); - Optional failureOpt = processBatchItem(eventRecord, context); - failureOpt.ifPresent(batchItemFailures::add); - multiThreadMDC.removeThread(Thread.currentThread().getName()); + XRayTraceEntityPropagator.runWithEntity(capturedSubsegment, () -> { + multiThreadMDC.copyMDCToThread(Thread.currentThread().getName()); + try { + Optional failureOpt = processBatchItem(eventRecord, + context); + failureOpt.ifPresent(batchItemFailures::add); + } finally { + multiThreadMDC.removeThread(Thread.currentThread().getName()); + } + }); }, executor)) .collect(Collectors.toList()); futures.forEach(CompletableFuture::join); @@ -182,6 +203,7 @@ private Optional processBatchItem(SQSEvent.SQ } private boolean isFIFOEnabled(SQSEvent sqsEvent) { - return !sqsEvent.getRecords().isEmpty() && sqsEvent.getRecords().get(0).getAttributes().get(MESSAGE_GROUP_ID_KEY) != null; + return !sqsEvent.getRecords().isEmpty() + && sqsEvent.getRecords().get(0).getAttributes().get(MESSAGE_GROUP_ID_KEY) != null; } } diff --git a/powertools-batch/src/main/java/software/amazon/lambda/powertools/batch/internal/XRayTraceEntityPropagator.java b/powertools-batch/src/main/java/software/amazon/lambda/powertools/batch/internal/XRayTraceEntityPropagator.java new file mode 100644 index 000000000..2858f4756 --- /dev/null +++ b/powertools-batch/src/main/java/software/amazon/lambda/powertools/batch/internal/XRayTraceEntityPropagator.java @@ -0,0 +1,83 @@ +/* + * Copyright 2023 Amazon.com, Inc. or its affiliates. + * Licensed under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * 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. + * + */ + +package software.amazon.lambda.powertools.batch.internal; + +import java.lang.reflect.Method; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * Utility class to propagate X-Ray trace entity context to worker threads using reflection. + * Reflection is used to avoid taking a dependency on X-RAY SDK. + */ +public final class XRayTraceEntityPropagator { + private static final Logger LOGGER = LoggerFactory.getLogger(XRayTraceEntityPropagator.class); + private static final boolean XRAY_AVAILABLE; + private static final Method GET_TRACE_ENTITY_METHOD; + + // We do the more "expensive" Class.forName in this static block to detect exactly once at import time if X-RAY + // is available or not. Subsequent .invoke() are very fast on modern JDKs. + static { + Method method = null; + boolean available = false; + + try { + Class awsXRayClass = Class.forName("com.amazonaws.xray.AWSXRay"); + method = awsXRayClass.getMethod("getTraceEntity"); + available = true; + LOGGER.debug("X-Ray SDK detected. Trace context will be propagated to worker threads."); + } catch (ClassNotFoundException | NoSuchMethodException e) { + LOGGER.debug("X-Ray SDK not detected. Trace context propagation disabled"); + } + + GET_TRACE_ENTITY_METHOD = method; + XRAY_AVAILABLE = available; + } + + private XRayTraceEntityPropagator() { + // Utility class + } + + public static Object captureTraceEntity() { + if (!XRAY_AVAILABLE) { + return null; + } + + try { + return GET_TRACE_ENTITY_METHOD.invoke(null); + } catch (Exception e) { + // We don't want to break batch processing if this fails. + LOGGER.warn("Failed to capture trace entity.", e); + return null; + } + } + + // See https://docs.aws.amazon.com/xray/latest/devguide/scorekeep-workerthreads.html + public static void runWithEntity(Object traceEntity, Runnable runnable) { + if (!XRAY_AVAILABLE || traceEntity == null) { + runnable.run(); + return; + } + + try { + traceEntity.getClass().getMethod("run", Runnable.class).invoke(traceEntity, runnable); + } catch (Exception e) { + // We don't want to break batch processing if this fails. + LOGGER.warn("Failed to run with trace entity, falling back to direct execution.", e); + runnable.run(); + } + } +} From 39c26fe3db8bc7c8869e7e1c0900fdb16d03915b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 21 Nov 2025 10:38:12 +0100 Subject: [PATCH 044/202] chore: bump io.github.ascopes:protobuf-maven-plugin (#2296) Bumps [io.github.ascopes:protobuf-maven-plugin](https://github.com/ascopes/protobuf-maven-plugin) from 3.10.2 to 3.10.3. - [Release notes](https://github.com/ascopes/protobuf-maven-plugin/releases) - [Commits](https://github.com/ascopes/protobuf-maven-plugin/compare/v3.10.2...v3.10.3) --- updated-dependencies: - dependency-name: io.github.ascopes:protobuf-maven-plugin dependency-version: 3.10.3 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- examples/powertools-examples-kafka/pom.xml | 2 +- powertools-kafka/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/powertools-examples-kafka/pom.xml b/examples/powertools-examples-kafka/pom.xml index 24856f80d..1e7450679 100644 --- a/examples/powertools-examples-kafka/pom.xml +++ b/examples/powertools-examples-kafka/pom.xml @@ -141,7 +141,7 @@ io.github.ascopes protobuf-maven-plugin - 3.10.2 + 3.10.3 diff --git a/powertools-kafka/pom.xml b/powertools-kafka/pom.xml index 0a76f0d2e..0d7a4c13b 100644 --- a/powertools-kafka/pom.xml +++ b/powertools-kafka/pom.xml @@ -200,7 +200,7 @@ io.github.ascopes protobuf-maven-plugin - 3.10.2 + 3.10.3 generate-test-sources From 3575cbfa1377480ea212cefd84d7f75755c8565c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 21 Nov 2025 10:39:11 +0100 Subject: [PATCH 045/202] chore: bump software.amazon.awscdk:aws-cdk-lib from 2.223.0 to 2.224.0 (#2297) Bumps [software.amazon.awscdk:aws-cdk-lib](https://github.com/aws/aws-cdk) from 2.223.0 to 2.224.0. - [Release notes](https://github.com/aws/aws-cdk/releases) - [Changelog](https://github.com/aws/aws-cdk/blob/main/CHANGELOG.v2.alpha.md) - [Commits](https://github.com/aws/aws-cdk/compare/v2.223.0...v2.224.0) --- updated-dependencies: - dependency-name: software.amazon.awscdk:aws-cdk-lib dependency-version: 2.224.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> --- examples/powertools-examples-core-utilities/cdk/infra/pom.xml | 2 +- powertools-e2e-tests/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/powertools-examples-core-utilities/cdk/infra/pom.xml b/examples/powertools-examples-core-utilities/cdk/infra/pom.xml index 87dc26169..35e07bc62 100644 --- a/examples/powertools-examples-core-utilities/cdk/infra/pom.xml +++ b/examples/powertools-examples-core-utilities/cdk/infra/pom.xml @@ -7,7 +7,7 @@ 2.7.0 UTF-8 - 2.223.0 + 2.224.0 [10.0.0,11.0.0) 5.14.1 diff --git a/powertools-e2e-tests/pom.xml b/powertools-e2e-tests/pom.xml index 6dd94910a..0fd169845 100644 --- a/powertools-e2e-tests/pom.xml +++ b/powertools-e2e-tests/pom.xml @@ -31,7 +31,7 @@ 11 11 10.4.3 - 2.223.0 + 2.224.0 From 0c0401f6ca9ca15e5bf75a46c151081ab009a459 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 21 Nov 2025 10:39:33 +0100 Subject: [PATCH 046/202] chore: bump github/codeql-action from 4.31.3 to 4.31.4 (#2301) Bumps [github/codeql-action](https://github.com/github/codeql-action) from 4.31.3 to 4.31.4. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/014f16e7ab1402f30e7c3329d33797e7948572db...e12f0178983d466f2f6028f5cc7a6d786fd97f4b) --- updated-dependencies: - dependency-name: github/codeql-action dependency-version: 4.31.4 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/security-scorecard.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/security-scorecard.yml b/.github/workflows/security-scorecard.yml index bbf9490c4..205cb0ddc 100644 --- a/.github/workflows/security-scorecard.yml +++ b/.github/workflows/security-scorecard.yml @@ -52,6 +52,6 @@ jobs: path: results.sarif retention-days: 5 - name: Upload to Code-Scanning - uses: github/codeql-action/upload-sarif@014f16e7ab1402f30e7c3329d33797e7948572db # v3.29.5 + uses: github/codeql-action/upload-sarif@e12f0178983d466f2f6028f5cc7a6d786fd97f4b # v3.29.5 with: sarif_file: results.sarif From 5b3f0f583f46033edf5512d1b4472993f01fee6b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 21 Nov 2025 10:39:52 +0100 Subject: [PATCH 047/202] chore: bump aws.sdk.version from 2.38.2 to 2.38.7 (#2295) Bumps `aws.sdk.version` from 2.38.2 to 2.38.7. Updates `software.amazon.awssdk:url-connection-client` from 2.38.2 to 2.38.7 Updates `software.amazon.awssdk:sdk-core` from 2.38.2 to 2.38.7 Updates `software.amazon.awssdk:s3` from 2.38.2 to 2.38.7 Updates `software.amazon.awssdk:kinesis` from 2.38.2 to 2.38.7 Updates `software.amazon.awssdk:sqs` from 2.38.2 to 2.38.7 Updates `software.amazon.awssdk:dynamodb-enhanced` from 2.38.2 to 2.38.7 --- updated-dependencies: - dependency-name: software.amazon.awssdk:url-connection-client dependency-version: 2.38.7 dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: software.amazon.awssdk:sdk-core dependency-version: 2.38.7 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: software.amazon.awssdk:s3 dependency-version: 2.38.7 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: software.amazon.awssdk:kinesis dependency-version: 2.38.7 dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: software.amazon.awssdk:sqs dependency-version: 2.38.7 dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: software.amazon.awssdk:dynamodb-enhanced dependency-version: 2.38.7 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- examples/powertools-examples-batch/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/powertools-examples-batch/pom.xml b/examples/powertools-examples-batch/pom.xml index 5226166fb..ec075cf87 100644 --- a/examples/powertools-examples-batch/pom.xml +++ b/examples/powertools-examples-batch/pom.xml @@ -14,7 +14,7 @@ 11 11 1.9.20.1 - 2.38.2 + 2.38.7 From e523a7eb42ddc7c7353f777a47a9167f7f46f803 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 21 Nov 2025 12:27:48 +0100 Subject: [PATCH 048/202] chore(ci): bump version to 2.8.0 (#2303) * chore(ci): bump version to 2.8.0 * Restore CHANGELOG.md from main. --------- Co-authored-by: Powertools for AWS Lambda (Java) Bot <151832416+aws-powertools-bot@users.noreply.github.com> Co-authored-by: Philipp Page --- README.md | 6 +++--- examples/pom.xml | 2 +- examples/powertools-examples-batch/pom.xml | 2 +- examples/powertools-examples-cloudformation/README.md | 4 ++-- .../infra/sam-graalvm/README.md | 2 +- examples/powertools-examples-cloudformation/pom.xml | 2 +- examples/powertools-examples-core-utilities/cdk/app/pom.xml | 2 +- .../powertools-examples-core-utilities/cdk/infra/pom.xml | 2 +- .../powertools-examples-core-utilities/gradle/build.gradle | 6 +++--- .../kotlin/build.gradle.kts | 6 +++--- .../powertools-examples-core-utilities/sam-graalvm/pom.xml | 2 +- examples/powertools-examples-core-utilities/sam/pom.xml | 2 +- .../powertools-examples-core-utilities/serverless/pom.xml | 2 +- .../powertools-examples-core-utilities/terraform/pom.xml | 2 +- .../powertools-examples-idempotency/sam-graalvm/pom.xml | 2 +- examples/powertools-examples-idempotency/sam/pom.xml | 2 +- examples/powertools-examples-kafka/pom.xml | 2 +- examples/powertools-examples-parameters/sam-graalvm/pom.xml | 2 +- examples/powertools-examples-parameters/sam/pom.xml | 2 +- .../powertools-examples-serialization/sam-graalvm/pom.xml | 2 +- examples/powertools-examples-serialization/sam/pom.xml | 2 +- examples/powertools-examples-validation/pom.xml | 2 +- mkdocs.yml | 2 +- pom.xml | 2 +- powertools-batch/pom.xml | 2 +- powertools-cloudformation/pom.xml | 2 +- powertools-common/pom.xml | 2 +- powertools-e2e-tests/handlers/batch/pom.xml | 2 +- .../handlers/idempotency-functional/pom.xml | 2 +- powertools-e2e-tests/handlers/idempotency-generics/pom.xml | 2 +- powertools-e2e-tests/handlers/idempotency/pom.xml | 2 +- .../handlers/largemessage-functional/pom.xml | 2 +- powertools-e2e-tests/handlers/largemessage/pom.xml | 2 +- .../handlers/largemessage_idempotent/pom.xml | 2 +- powertools-e2e-tests/handlers/logging-functional/pom.xml | 2 +- powertools-e2e-tests/handlers/logging-log4j/pom.xml | 2 +- powertools-e2e-tests/handlers/logging-logback/pom.xml | 2 +- powertools-e2e-tests/handlers/metrics/pom.xml | 2 +- powertools-e2e-tests/handlers/parameters/pom.xml | 2 +- powertools-e2e-tests/handlers/pom.xml | 2 +- powertools-e2e-tests/handlers/tracing/pom.xml | 2 +- powertools-e2e-tests/handlers/validation-alb-event/pom.xml | 2 +- .../handlers/validation-apigw-event/pom.xml | 2 +- powertools-e2e-tests/pom.xml | 2 +- powertools-idempotency/pom.xml | 2 +- powertools-idempotency/powertools-idempotency-core/pom.xml | 2 +- .../powertools-idempotency-dynamodb/pom.xml | 2 +- powertools-kafka/pom.xml | 2 +- powertools-large-messages/pom.xml | 2 +- powertools-logging/pom.xml | 2 +- powertools-logging/powertools-logging-log4j/pom.xml | 2 +- powertools-logging/powertools-logging-logback/pom.xml | 2 +- powertools-metrics/pom.xml | 2 +- powertools-parameters/pom.xml | 2 +- .../powertools-parameters-appconfig/pom.xml | 2 +- .../powertools-parameters-dynamodb/pom.xml | 2 +- powertools-parameters/powertools-parameters-secrets/pom.xml | 2 +- powertools-parameters/powertools-parameters-ssm/pom.xml | 2 +- powertools-parameters/powertools-parameters-tests/pom.xml | 2 +- powertools-serialization/pom.xml | 2 +- powertools-tracing/pom.xml | 2 +- powertools-validation/pom.xml | 2 +- 62 files changed, 69 insertions(+), 69 deletions(-) diff --git a/README.md b/README.md index 6d3689092..2644c47ab 100644 --- a/README.md +++ b/README.md @@ -22,17 +22,17 @@ Powertools for AWS Lambda (Java) is available in Maven Central. You can use your software.amazon.lambda powertools-tracing - 2.7.0 + 2.8.0 software.amazon.lambda powertools-logging-log4j - 2.7.0 + 2.8.0 software.amazon.lambda powertools-metrics - 2.7.0 + 2.8.0 ... diff --git a/examples/pom.xml b/examples/pom.xml index c02d318cc..511cdd5a9 100644 --- a/examples/pom.xml +++ b/examples/pom.xml @@ -20,7 +20,7 @@ software.amazon.lambda powertools-examples - 2.7.0 + 2.8.0 pom Powertools for AWS Lambda (Java) - Examples diff --git a/examples/powertools-examples-batch/pom.xml b/examples/powertools-examples-batch/pom.xml index ec075cf87..6d941a31f 100644 --- a/examples/powertools-examples-batch/pom.xml +++ b/examples/powertools-examples-batch/pom.xml @@ -5,7 +5,7 @@ 4.0.0 software.amazon.lambda.examples - 2.7.0 + 2.8.0 powertools-examples-batch jar Powertools for AWS Lambda (Java) - Examples - Batch diff --git a/examples/powertools-examples-cloudformation/README.md b/examples/powertools-examples-cloudformation/README.md index 84d9d7fac..b9e58eb82 100644 --- a/examples/powertools-examples-cloudformation/README.md +++ b/examples/powertools-examples-cloudformation/README.md @@ -15,7 +15,7 @@ Run the following in your shell: ```bash cd infra/sam sam build -sam deploy --guided --parameter-overrides BucketNameParam=my-unique-bucket-2.7.0718 +sam deploy --guided --parameter-overrides BucketNameParam=my-unique-bucket-2.8.0718 ``` ### Deploy with CDK @@ -32,5 +32,5 @@ To build and deploy this application for the first time, run the following in yo cd infra/cdk mvn package cdk synth -cdk deploy -c BucketNameParam=my-unique-bucket-2.7.0718 +cdk deploy -c BucketNameParam=my-unique-bucket-2.8.0718 ``` \ No newline at end of file diff --git a/examples/powertools-examples-cloudformation/infra/sam-graalvm/README.md b/examples/powertools-examples-cloudformation/infra/sam-graalvm/README.md index 85c8b386f..c2a9e2ffd 100644 --- a/examples/powertools-examples-cloudformation/infra/sam-graalvm/README.md +++ b/examples/powertools-examples-cloudformation/infra/sam-graalvm/README.md @@ -40,7 +40,7 @@ sam build ## Deploy the sample application ```shell -sam deploy --guided --parameter-overrides BucketNameParam=my-unique-bucket-2.7.0718 +sam deploy --guided --parameter-overrides BucketNameParam=my-unique-bucket-2.8.0718 ``` This sample is based on Serverless Application Model (SAM). To deploy it, check out the instructions for getting started with SAM in [the examples directory](../../../README.md) diff --git a/examples/powertools-examples-cloudformation/pom.xml b/examples/powertools-examples-cloudformation/pom.xml index 9ca4e8dc2..8dde0a034 100644 --- a/examples/powertools-examples-cloudformation/pom.xml +++ b/examples/powertools-examples-cloudformation/pom.xml @@ -3,7 +3,7 @@ 4.0.0 software.amazon.lambda.examples - 2.7.0 + 2.8.0 powertools-examples-cloudformation jar diff --git a/examples/powertools-examples-core-utilities/cdk/app/pom.xml b/examples/powertools-examples-core-utilities/cdk/app/pom.xml index dbd6743a8..29acef5e2 100644 --- a/examples/powertools-examples-core-utilities/cdk/app/pom.xml +++ b/examples/powertools-examples-core-utilities/cdk/app/pom.xml @@ -6,7 +6,7 @@ software.amazon.lambda.examples - 2.7.0 + 2.8.0 powertools-examples-core-utilities-cdk jar diff --git a/examples/powertools-examples-core-utilities/cdk/infra/pom.xml b/examples/powertools-examples-core-utilities/cdk/infra/pom.xml index 35e07bc62..7daf3153f 100644 --- a/examples/powertools-examples-core-utilities/cdk/infra/pom.xml +++ b/examples/powertools-examples-core-utilities/cdk/infra/pom.xml @@ -4,7 +4,7 @@ 4.0.0 software.amazon.lambda.examples cdk - 2.7.0 + 2.8.0 UTF-8 2.224.0 diff --git a/examples/powertools-examples-core-utilities/gradle/build.gradle b/examples/powertools-examples-core-utilities/gradle/build.gradle index 0b7951f11..6841d20ab 100644 --- a/examples/powertools-examples-core-utilities/gradle/build.gradle +++ b/examples/powertools-examples-core-utilities/gradle/build.gradle @@ -29,8 +29,8 @@ dependencies { implementation 'com.amazonaws:aws-lambda-java-events:3.16.0' implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.13.2' implementation 'org.aspectj:aspectjrt:1.9.20.1' - aspect 'software.amazon.lambda:powertools-tracing:2.7.0' - aspect 'software.amazon.lambda:powertools-logging-log4j:2.7.0' - aspect 'software.amazon.lambda:powertools-metrics:2.7.0' + aspect 'software.amazon.lambda:powertools-tracing:2.8.0' + aspect 'software.amazon.lambda:powertools-logging-log4j:2.8.0' + aspect 'software.amazon.lambda:powertools-metrics:2.8.0' } diff --git a/examples/powertools-examples-core-utilities/kotlin/build.gradle.kts b/examples/powertools-examples-core-utilities/kotlin/build.gradle.kts index 47e82c5b8..bc11eb32e 100644 --- a/examples/powertools-examples-core-utilities/kotlin/build.gradle.kts +++ b/examples/powertools-examples-core-utilities/kotlin/build.gradle.kts @@ -15,9 +15,9 @@ dependencies { implementation("com.amazonaws:aws-lambda-java-events:3.16.0") implementation("com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.15.2") implementation("org.aspectj:aspectjrt:1.9.20.1") - aspect("software.amazon.lambda:powertools-tracing:2.7.0") - aspect("software.amazon.lambda:powertools-logging-log4j:2.7.0") - aspect("software.amazon.lambda:powertools-metrics:2.7.0") + aspect("software.amazon.lambda:powertools-tracing:2.8.0") + aspect("software.amazon.lambda:powertools-logging-log4j:2.8.0") + aspect("software.amazon.lambda:powertools-metrics:2.8.0") implementation("org.jetbrains.kotlin:kotlin-stdlib:1.9.24") } diff --git a/examples/powertools-examples-core-utilities/sam-graalvm/pom.xml b/examples/powertools-examples-core-utilities/sam-graalvm/pom.xml index 682e1a10b..fceb4a322 100644 --- a/examples/powertools-examples-core-utilities/sam-graalvm/pom.xml +++ b/examples/powertools-examples-core-utilities/sam-graalvm/pom.xml @@ -4,7 +4,7 @@ Powertools for AWS Lambda (Java) - Examples - Core Utilities (logging, tracing, metrics) with SAM GraalVM software.amazon.lambda.examples - 2.7.0 + 2.8.0 powertools-examples-core-utilities-sam-graalvm jar diff --git a/examples/powertools-examples-core-utilities/sam/pom.xml b/examples/powertools-examples-core-utilities/sam/pom.xml index d03cafcfb..b8606a227 100644 --- a/examples/powertools-examples-core-utilities/sam/pom.xml +++ b/examples/powertools-examples-core-utilities/sam/pom.xml @@ -4,7 +4,7 @@ Powertools for AWS Lambda (Java) - Examples - Core Utilities (logging, tracing, metrics) with SAM software.amazon.lambda.examples - 2.7.0 + 2.8.0 powertools-examples-core-utilities-sam jar diff --git a/examples/powertools-examples-core-utilities/serverless/pom.xml b/examples/powertools-examples-core-utilities/serverless/pom.xml index 996f77d4b..d77b0ccd6 100644 --- a/examples/powertools-examples-core-utilities/serverless/pom.xml +++ b/examples/powertools-examples-core-utilities/serverless/pom.xml @@ -4,7 +4,7 @@ Powertools for AWS Lambda (Java) - Examples - Core Utilities (logging, tracing, metrics) with Serverless software.amazon.lambda.examples - 2.7.0 + 2.8.0 powertools-examples-core-utilities-serverless jar diff --git a/examples/powertools-examples-core-utilities/terraform/pom.xml b/examples/powertools-examples-core-utilities/terraform/pom.xml index d28835a8a..14c0e223e 100644 --- a/examples/powertools-examples-core-utilities/terraform/pom.xml +++ b/examples/powertools-examples-core-utilities/terraform/pom.xml @@ -4,7 +4,7 @@ Powertools for AWS Lambda (Java) - Examples - Core Utilities (logging, tracing, metrics) with Terraform software.amazon.lambda.examples - 2.7.0 + 2.8.0 powertools-examples-core-utilities-terraform jar diff --git a/examples/powertools-examples-idempotency/sam-graalvm/pom.xml b/examples/powertools-examples-idempotency/sam-graalvm/pom.xml index 205958c9a..d1c0205ff 100644 --- a/examples/powertools-examples-idempotency/sam-graalvm/pom.xml +++ b/examples/powertools-examples-idempotency/sam-graalvm/pom.xml @@ -2,7 +2,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 4.0.0 software.amazon.lambda.examples - 2.7.0 + 2.8.0 powertools-examples-idempotency-sam-graalvm jar Powertools for AWS Lambda (Java) - Examples - Idempotency GraalVM diff --git a/examples/powertools-examples-idempotency/sam/pom.xml b/examples/powertools-examples-idempotency/sam/pom.xml index 694b79342..b90705c67 100644 --- a/examples/powertools-examples-idempotency/sam/pom.xml +++ b/examples/powertools-examples-idempotency/sam/pom.xml @@ -17,7 +17,7 @@ 4.0.0 software.amazon.lambda.examples - 2.7.0 + 2.8.0 powertools-examples-idempotency jar Powertools for AWS Lambda (Java) - Examples - Idempotency diff --git a/examples/powertools-examples-kafka/pom.xml b/examples/powertools-examples-kafka/pom.xml index 1e7450679..f4b75722c 100644 --- a/examples/powertools-examples-kafka/pom.xml +++ b/examples/powertools-examples-kafka/pom.xml @@ -2,7 +2,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 4.0.0 software.amazon.lambda.examples - 2.7.0 + 2.8.0 powertools-examples-kafka jar Powertools for AWS Lambda (Java) - Examples - Kafka diff --git a/examples/powertools-examples-parameters/sam-graalvm/pom.xml b/examples/powertools-examples-parameters/sam-graalvm/pom.xml index a83ddddb8..6d0c3f4a2 100644 --- a/examples/powertools-examples-parameters/sam-graalvm/pom.xml +++ b/examples/powertools-examples-parameters/sam-graalvm/pom.xml @@ -2,7 +2,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 4.0.0 software.amazon.lambda.examples - 2.7.0 + 2.8.0 powertools-examples-parameters-sam-graalvm jar Powertools for AWS Lambda (Java) - Examples - Parameters GraalVM diff --git a/examples/powertools-examples-parameters/sam/pom.xml b/examples/powertools-examples-parameters/sam/pom.xml index 83efef4d2..15d68ffcd 100644 --- a/examples/powertools-examples-parameters/sam/pom.xml +++ b/examples/powertools-examples-parameters/sam/pom.xml @@ -2,7 +2,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 4.0.0 software.amazon.lambda.examples - 2.7.0 + 2.8.0 powertools-examples-parameters-sam jar Powertools for AWS Lambda (Java) - Examples - Parameters diff --git a/examples/powertools-examples-serialization/sam-graalvm/pom.xml b/examples/powertools-examples-serialization/sam-graalvm/pom.xml index b77ce975e..44661fb71 100644 --- a/examples/powertools-examples-serialization/sam-graalvm/pom.xml +++ b/examples/powertools-examples-serialization/sam-graalvm/pom.xml @@ -2,7 +2,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 4.0.0 software.amazon.lambda.examples - 2.7.0 + 2.8.0 powertools-examples-serialization-sam-graalvm jar Powertools for AWS Lambda (Java) - Examples - Serialization GraalVM diff --git a/examples/powertools-examples-serialization/sam/pom.xml b/examples/powertools-examples-serialization/sam/pom.xml index 789d9969f..93c60a2cb 100644 --- a/examples/powertools-examples-serialization/sam/pom.xml +++ b/examples/powertools-examples-serialization/sam/pom.xml @@ -2,7 +2,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 4.0.0 software.amazon.lambda.examples - 2.7.0 + 2.8.0 powertools-examples-serialization-sam jar Powertools for AWS Lambda (Java) - Examples - Serialization diff --git a/examples/powertools-examples-validation/pom.xml b/examples/powertools-examples-validation/pom.xml index abcdd4e3a..1337bc2ee 100644 --- a/examples/powertools-examples-validation/pom.xml +++ b/examples/powertools-examples-validation/pom.xml @@ -16,7 +16,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 4.0.0 software.amazon.lambda.examples - 2.7.0 + 2.8.0 powertools-examples-validation jar Powertools for AWS Lambda (Java) - Examples - Validation diff --git a/mkdocs.yml b/mkdocs.yml index 98f6945d7..5f35b96c0 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -129,7 +129,7 @@ extra_javascript: extra: powertools: - version: 2.7.0 + version: 2.8.0 version: provider: mike default: latest diff --git a/pom.xml b/pom.xml index ba206feae..ed1d2aff9 100644 --- a/pom.xml +++ b/pom.xml @@ -20,7 +20,7 @@ software.amazon.lambda powertools-parent - 2.7.0 + 2.8.0 pom Powertools for AWS Lambda (Java) - Parent diff --git a/powertools-batch/pom.xml b/powertools-batch/pom.xml index bce58ab58..07d11d41c 100644 --- a/powertools-batch/pom.xml +++ b/powertools-batch/pom.xml @@ -6,7 +6,7 @@ software.amazon.lambda powertools-parent - 2.7.0 + 2.8.0 A suite of utilities that makes batch message processing using AWS Lambda easier. diff --git a/powertools-cloudformation/pom.xml b/powertools-cloudformation/pom.xml index a3270563a..09e3299fd 100644 --- a/powertools-cloudformation/pom.xml +++ b/powertools-cloudformation/pom.xml @@ -24,7 +24,7 @@ powertools-parent software.amazon.lambda - 2.7.0 + 2.8.0 Powertools for AWS Lambda (Java) - Cloudformation diff --git a/powertools-common/pom.xml b/powertools-common/pom.xml index d4e9f6213..f14783b5b 100644 --- a/powertools-common/pom.xml +++ b/powertools-common/pom.xml @@ -24,7 +24,7 @@ powertools-parent software.amazon.lambda - 2.7.0 + 2.8.0 Powertools for AWS Lambda (Java) - Common Internal Utilities diff --git a/powertools-e2e-tests/handlers/batch/pom.xml b/powertools-e2e-tests/handlers/batch/pom.xml index 2c726340a..f8e0a037f 100644 --- a/powertools-e2e-tests/handlers/batch/pom.xml +++ b/powertools-e2e-tests/handlers/batch/pom.xml @@ -5,7 +5,7 @@ software.amazon.lambda e2e-test-handlers-parent - 2.7.0 + 2.8.0 e2e-test-handler-batch diff --git a/powertools-e2e-tests/handlers/idempotency-functional/pom.xml b/powertools-e2e-tests/handlers/idempotency-functional/pom.xml index 133a0ccff..2b53dc275 100644 --- a/powertools-e2e-tests/handlers/idempotency-functional/pom.xml +++ b/powertools-e2e-tests/handlers/idempotency-functional/pom.xml @@ -5,7 +5,7 @@ software.amazon.lambda e2e-test-handlers-parent - 2.7.0 + 2.8.0 e2e-test-handler-idempotency-functional diff --git a/powertools-e2e-tests/handlers/idempotency-generics/pom.xml b/powertools-e2e-tests/handlers/idempotency-generics/pom.xml index a69babd0d..76e65edb1 100644 --- a/powertools-e2e-tests/handlers/idempotency-generics/pom.xml +++ b/powertools-e2e-tests/handlers/idempotency-generics/pom.xml @@ -5,7 +5,7 @@ software.amazon.lambda e2e-test-handlers-parent - 2.7.0 + 2.8.0 e2e-test-handler-idempotency-generics diff --git a/powertools-e2e-tests/handlers/idempotency/pom.xml b/powertools-e2e-tests/handlers/idempotency/pom.xml index cbe7e0cac..36181ea01 100644 --- a/powertools-e2e-tests/handlers/idempotency/pom.xml +++ b/powertools-e2e-tests/handlers/idempotency/pom.xml @@ -5,7 +5,7 @@ software.amazon.lambda e2e-test-handlers-parent - 2.7.0 + 2.8.0 e2e-test-handler-idempotency diff --git a/powertools-e2e-tests/handlers/largemessage-functional/pom.xml b/powertools-e2e-tests/handlers/largemessage-functional/pom.xml index e2e67b2da..d29017074 100644 --- a/powertools-e2e-tests/handlers/largemessage-functional/pom.xml +++ b/powertools-e2e-tests/handlers/largemessage-functional/pom.xml @@ -5,7 +5,7 @@ software.amazon.lambda e2e-test-handlers-parent - 2.7.0 + 2.8.0 e2e-test-handler-largemessage-functional diff --git a/powertools-e2e-tests/handlers/largemessage/pom.xml b/powertools-e2e-tests/handlers/largemessage/pom.xml index 56d179c3b..53b1e7c10 100644 --- a/powertools-e2e-tests/handlers/largemessage/pom.xml +++ b/powertools-e2e-tests/handlers/largemessage/pom.xml @@ -5,7 +5,7 @@ software.amazon.lambda e2e-test-handlers-parent - 2.7.0 + 2.8.0 e2e-test-handler-largemessage diff --git a/powertools-e2e-tests/handlers/largemessage_idempotent/pom.xml b/powertools-e2e-tests/handlers/largemessage_idempotent/pom.xml index 9896db217..9f6f23389 100644 --- a/powertools-e2e-tests/handlers/largemessage_idempotent/pom.xml +++ b/powertools-e2e-tests/handlers/largemessage_idempotent/pom.xml @@ -5,7 +5,7 @@ software.amazon.lambda e2e-test-handlers-parent - 2.7.0 + 2.8.0 e2e-test-handler-large-msg-idempotent diff --git a/powertools-e2e-tests/handlers/logging-functional/pom.xml b/powertools-e2e-tests/handlers/logging-functional/pom.xml index ba532c3db..4616af233 100644 --- a/powertools-e2e-tests/handlers/logging-functional/pom.xml +++ b/powertools-e2e-tests/handlers/logging-functional/pom.xml @@ -5,7 +5,7 @@ software.amazon.lambda e2e-test-handlers-parent - 2.7.0 + 2.8.0 e2e-test-handler-logging-functional diff --git a/powertools-e2e-tests/handlers/logging-log4j/pom.xml b/powertools-e2e-tests/handlers/logging-log4j/pom.xml index 445da94e2..bba711163 100644 --- a/powertools-e2e-tests/handlers/logging-log4j/pom.xml +++ b/powertools-e2e-tests/handlers/logging-log4j/pom.xml @@ -5,7 +5,7 @@ software.amazon.lambda e2e-test-handlers-parent - 2.7.0 + 2.8.0 e2e-test-handler-logging-log4j diff --git a/powertools-e2e-tests/handlers/logging-logback/pom.xml b/powertools-e2e-tests/handlers/logging-logback/pom.xml index 9f5035722..bd442fe88 100644 --- a/powertools-e2e-tests/handlers/logging-logback/pom.xml +++ b/powertools-e2e-tests/handlers/logging-logback/pom.xml @@ -5,7 +5,7 @@ software.amazon.lambda e2e-test-handlers-parent - 2.7.0 + 2.8.0 e2e-test-handler-logging-logback diff --git a/powertools-e2e-tests/handlers/metrics/pom.xml b/powertools-e2e-tests/handlers/metrics/pom.xml index 5bf3bd5ef..90704c6d9 100644 --- a/powertools-e2e-tests/handlers/metrics/pom.xml +++ b/powertools-e2e-tests/handlers/metrics/pom.xml @@ -5,7 +5,7 @@ software.amazon.lambda e2e-test-handlers-parent - 2.7.0 + 2.8.0 e2e-test-handler-metrics diff --git a/powertools-e2e-tests/handlers/parameters/pom.xml b/powertools-e2e-tests/handlers/parameters/pom.xml index e30a51150..670eeb9c0 100644 --- a/powertools-e2e-tests/handlers/parameters/pom.xml +++ b/powertools-e2e-tests/handlers/parameters/pom.xml @@ -5,7 +5,7 @@ software.amazon.lambda e2e-test-handlers-parent - 2.7.0 + 2.8.0 e2e-test-handler-parameters diff --git a/powertools-e2e-tests/handlers/pom.xml b/powertools-e2e-tests/handlers/pom.xml index ef1d3e65f..f06db02f0 100644 --- a/powertools-e2e-tests/handlers/pom.xml +++ b/powertools-e2e-tests/handlers/pom.xml @@ -4,7 +4,7 @@ software.amazon.lambda e2e-test-handlers-parent - 2.7.0 + 2.8.0 pom Handlers for End-to-End tests Fake handlers that use Powertools for AWS Lambda (Java). diff --git a/powertools-e2e-tests/handlers/tracing/pom.xml b/powertools-e2e-tests/handlers/tracing/pom.xml index 1a3b56a77..89891df8c 100644 --- a/powertools-e2e-tests/handlers/tracing/pom.xml +++ b/powertools-e2e-tests/handlers/tracing/pom.xml @@ -5,7 +5,7 @@ software.amazon.lambda e2e-test-handlers-parent - 2.7.0 + 2.8.0 e2e-test-handler-tracing diff --git a/powertools-e2e-tests/handlers/validation-alb-event/pom.xml b/powertools-e2e-tests/handlers/validation-alb-event/pom.xml index d2e1266fc..8e5e4dadb 100644 --- a/powertools-e2e-tests/handlers/validation-alb-event/pom.xml +++ b/powertools-e2e-tests/handlers/validation-alb-event/pom.xml @@ -5,7 +5,7 @@ software.amazon.lambda e2e-test-handlers-parent - 2.7.0 + 2.8.0 e2e-test-handler-validation-alb-event diff --git a/powertools-e2e-tests/handlers/validation-apigw-event/pom.xml b/powertools-e2e-tests/handlers/validation-apigw-event/pom.xml index 6832280a6..97e967c3b 100644 --- a/powertools-e2e-tests/handlers/validation-apigw-event/pom.xml +++ b/powertools-e2e-tests/handlers/validation-apigw-event/pom.xml @@ -5,7 +5,7 @@ software.amazon.lambda e2e-test-handlers-parent - 2.7.0 + 2.8.0 e2e-test-handler-validation-apigw-event diff --git a/powertools-e2e-tests/pom.xml b/powertools-e2e-tests/pom.xml index 0fd169845..484e3b4c2 100644 --- a/powertools-e2e-tests/pom.xml +++ b/powertools-e2e-tests/pom.xml @@ -20,7 +20,7 @@ powertools-parent software.amazon.lambda - 2.7.0 + 2.8.0 powertools-e2e-tests diff --git a/powertools-idempotency/pom.xml b/powertools-idempotency/pom.xml index f119ca445..d15d3445d 100644 --- a/powertools-idempotency/pom.xml +++ b/powertools-idempotency/pom.xml @@ -21,7 +21,7 @@ software.amazon.lambda powertools-parent - 2.7.0 + 2.8.0 powertools-idempotency diff --git a/powertools-idempotency/powertools-idempotency-core/pom.xml b/powertools-idempotency/powertools-idempotency-core/pom.xml index 5e57ee136..801664b4a 100644 --- a/powertools-idempotency/powertools-idempotency-core/pom.xml +++ b/powertools-idempotency/powertools-idempotency-core/pom.xml @@ -21,7 +21,7 @@ software.amazon.lambda powertools-idempotency - 2.7.0 + 2.8.0 powertools-idempotency-core diff --git a/powertools-idempotency/powertools-idempotency-dynamodb/pom.xml b/powertools-idempotency/powertools-idempotency-dynamodb/pom.xml index 25f6f77c7..a9cf5739b 100644 --- a/powertools-idempotency/powertools-idempotency-dynamodb/pom.xml +++ b/powertools-idempotency/powertools-idempotency-dynamodb/pom.xml @@ -21,7 +21,7 @@ software.amazon.lambda powertools-idempotency - 2.7.0 + 2.8.0 powertools-idempotency-dynamodb diff --git a/powertools-kafka/pom.xml b/powertools-kafka/pom.xml index 0d7a4c13b..ad564897f 100644 --- a/powertools-kafka/pom.xml +++ b/powertools-kafka/pom.xml @@ -21,7 +21,7 @@ powertools-parent software.amazon.lambda - 2.7.0 + 2.8.0 powertools-kafka diff --git a/powertools-large-messages/pom.xml b/powertools-large-messages/pom.xml index 6353cb089..d72877552 100644 --- a/powertools-large-messages/pom.xml +++ b/powertools-large-messages/pom.xml @@ -23,7 +23,7 @@ software.amazon.lambda powertools-parent - 2.7.0 + 2.8.0 powertools-large-messages diff --git a/powertools-logging/pom.xml b/powertools-logging/pom.xml index 9fd7b1e62..ae5788291 100644 --- a/powertools-logging/pom.xml +++ b/powertools-logging/pom.xml @@ -21,7 +21,7 @@ powertools-parent software.amazon.lambda - 2.7.0 + 2.8.0 Powertools for AWS Lambda (Java) - Logging diff --git a/powertools-logging/powertools-logging-log4j/pom.xml b/powertools-logging/powertools-logging-log4j/pom.xml index 8006baa7d..1cf3bf265 100644 --- a/powertools-logging/powertools-logging-log4j/pom.xml +++ b/powertools-logging/powertools-logging-log4j/pom.xml @@ -7,7 +7,7 @@ powertools-parent software.amazon.lambda - 2.7.0 + 2.8.0 ../../pom.xml diff --git a/powertools-logging/powertools-logging-logback/pom.xml b/powertools-logging/powertools-logging-logback/pom.xml index 70bbbdfc4..b5a50573d 100644 --- a/powertools-logging/powertools-logging-logback/pom.xml +++ b/powertools-logging/powertools-logging-logback/pom.xml @@ -6,7 +6,7 @@ powertools-parent software.amazon.lambda - 2.7.0 + 2.8.0 ../../pom.xml diff --git a/powertools-metrics/pom.xml b/powertools-metrics/pom.xml index 1ea59493c..4da0c0a9f 100644 --- a/powertools-metrics/pom.xml +++ b/powertools-metrics/pom.xml @@ -24,7 +24,7 @@ powertools-parent software.amazon.lambda - 2.7.0 + 2.8.0 Powertools for AWS Lambda (Java) - Metrics diff --git a/powertools-parameters/pom.xml b/powertools-parameters/pom.xml index 158fdc978..a2c4a65dc 100644 --- a/powertools-parameters/pom.xml +++ b/powertools-parameters/pom.xml @@ -21,7 +21,7 @@ powertools-parent software.amazon.lambda - 2.7.0 + 2.8.0 powertools-parameters diff --git a/powertools-parameters/powertools-parameters-appconfig/pom.xml b/powertools-parameters/powertools-parameters-appconfig/pom.xml index 9d9adc16b..ab8ae0e67 100644 --- a/powertools-parameters/powertools-parameters-appconfig/pom.xml +++ b/powertools-parameters/powertools-parameters-appconfig/pom.xml @@ -7,7 +7,7 @@ software.amazon.lambda powertools-parent - 2.7.0 + 2.8.0 ../../pom.xml diff --git a/powertools-parameters/powertools-parameters-dynamodb/pom.xml b/powertools-parameters/powertools-parameters-dynamodb/pom.xml index d66153da6..76a7b8845 100644 --- a/powertools-parameters/powertools-parameters-dynamodb/pom.xml +++ b/powertools-parameters/powertools-parameters-dynamodb/pom.xml @@ -7,7 +7,7 @@ software.amazon.lambda powertools-parent - 2.7.0 + 2.8.0 ../../pom.xml diff --git a/powertools-parameters/powertools-parameters-secrets/pom.xml b/powertools-parameters/powertools-parameters-secrets/pom.xml index f126716d6..fbe4905be 100644 --- a/powertools-parameters/powertools-parameters-secrets/pom.xml +++ b/powertools-parameters/powertools-parameters-secrets/pom.xml @@ -7,7 +7,7 @@ software.amazon.lambda powertools-parent - 2.7.0 + 2.8.0 ../../pom.xml diff --git a/powertools-parameters/powertools-parameters-ssm/pom.xml b/powertools-parameters/powertools-parameters-ssm/pom.xml index e6bf1ea27..c9de1db51 100644 --- a/powertools-parameters/powertools-parameters-ssm/pom.xml +++ b/powertools-parameters/powertools-parameters-ssm/pom.xml @@ -7,7 +7,7 @@ software.amazon.lambda powertools-parent - 2.7.0 + 2.8.0 ../../pom.xml diff --git a/powertools-parameters/powertools-parameters-tests/pom.xml b/powertools-parameters/powertools-parameters-tests/pom.xml index b40046bde..3bcd4d604 100644 --- a/powertools-parameters/powertools-parameters-tests/pom.xml +++ b/powertools-parameters/powertools-parameters-tests/pom.xml @@ -6,7 +6,7 @@ software.amazon.lambda powertools-parent - 2.7.0 + 2.8.0 ../../pom.xml diff --git a/powertools-serialization/pom.xml b/powertools-serialization/pom.xml index d7f33df28..c1eea4df7 100644 --- a/powertools-serialization/pom.xml +++ b/powertools-serialization/pom.xml @@ -21,7 +21,7 @@ powertools-parent software.amazon.lambda - 2.7.0 + 2.8.0 powertools-serialization diff --git a/powertools-tracing/pom.xml b/powertools-tracing/pom.xml index 68231dbe1..ed2596059 100644 --- a/powertools-tracing/pom.xml +++ b/powertools-tracing/pom.xml @@ -24,7 +24,7 @@ powertools-parent software.amazon.lambda - 2.7.0 + 2.8.0 Powertools for AWS Lambda (Java) - Tracing diff --git a/powertools-validation/pom.xml b/powertools-validation/pom.xml index 74051989e..37063cf6d 100644 --- a/powertools-validation/pom.xml +++ b/powertools-validation/pom.xml @@ -24,7 +24,7 @@ powertools-parent software.amazon.lambda - 2.7.0 + 2.8.0 Powertools for AWS Lambda (Java) - Validation From dfca97e5f1ebcc3cd293ea9f386246b88caec04d Mon Sep 17 00:00:00 2001 From: Philipp Page Date: Mon, 24 Nov 2025 13:38:29 +0100 Subject: [PATCH 049/202] chore(ci): Remove branch protection workflow. (#2311) --- .github/branch_protection_settings/1.x.x.json | 53 -------------- .github/branch_protection_settings/main.json | 63 ---------------- .github/branch_protection_settings/v2.json | 63 ---------------- .../workflows/security-branch-protections.yml | 72 ------------------- 4 files changed, 251 deletions(-) delete mode 100644 .github/branch_protection_settings/1.x.x.json delete mode 100644 .github/branch_protection_settings/main.json delete mode 100644 .github/branch_protection_settings/v2.json delete mode 100644 .github/workflows/security-branch-protections.yml diff --git a/.github/branch_protection_settings/1.x.x.json b/.github/branch_protection_settings/1.x.x.json deleted file mode 100644 index e52aba745..000000000 --- a/.github/branch_protection_settings/1.x.x.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "url": "https://api.github.com/repos/aws-powertools/powertools-lambda-java/branches/1.x.x/protection", - "required_status_checks": { - "url": "https://api.github.com/repos/aws-powertools/powertools-lambda-java/branches/1.x.x/protection/required_status_checks", - "strict": true, - "contexts": [ - "SonarCloud" - ], - "contexts_url": "https://api.github.com/repos/aws-powertools/powertools-lambda-java/branches/1.x.x/protection/required_status_checks/contexts", - "checks": [ - { - "context": "SonarCloud", - "app_id": null - } - ] - }, - "required_pull_request_reviews": { - "url": "https://api.github.com/repos/aws-powertools/powertools-lambda-java/branches/1.x.x/protection/required_pull_request_reviews", - "dismiss_stale_reviews": false, - "require_code_owner_reviews": false, - "require_last_push_approval": false, - "required_approving_review_count": 0 - }, - "required_signatures": { - "url": "https://api.github.com/repos/aws-powertools/powertools-lambda-java/branches/1.x.x/protection/required_signatures", - "enabled": false - }, - "enforce_admins": { - "url": "https://api.github.com/repos/aws-powertools/powertools-lambda-java/branches/1.x.x/protection/enforce_admins", - "enabled": true - }, - "required_linear_history": { - "enabled": false - }, - "allow_force_pushes": { - "enabled": false - }, - "allow_deletions": { - "enabled": false - }, - "block_creations": { - "enabled": false - }, - "required_conversation_resolution": { - "enabled": false - }, - "lock_branch": { - "enabled": false - }, - "allow_fork_syncing": { - "enabled": false - } -} diff --git a/.github/branch_protection_settings/main.json b/.github/branch_protection_settings/main.json deleted file mode 100644 index 8ca32bb45..000000000 --- a/.github/branch_protection_settings/main.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "url": "https://api.github.com/repos/aws-powertools/powertools-lambda-java/branches/main/protection", - "required_status_checks": { - "url": "https://api.github.com/repos/aws-powertools/powertools-lambda-java/branches/main/protection/required_status_checks", - "strict": true, - "contexts": [], - "contexts_url": "https://api.github.com/repos/aws-powertools/powertools-lambda-java/branches/main/protection/required_status_checks/contexts", - "checks": [] - }, - "restrictions": { - "url": "https://api.github.com/repos/aws-powertools/powertools-lambda-java/branches/main/protection/restrictions", - "users_url": "https://api.github.com/repos/aws-powertools/powertools-lambda-java/branches/main/protection/restrictions/users", - "teams_url": "https://api.github.com/repos/aws-powertools/powertools-lambda-java/branches/main/protection/restrictions/teams", - "apps_url": "https://api.github.com/repos/aws-powertools/powertools-lambda-java/branches/main/protection/restrictions/apps", - "users": [], - "teams": [], - "apps": [] - }, - "required_pull_request_reviews": { - "url": "https://api.github.com/repos/aws-powertools/powertools-lambda-java/branches/main/protection/required_pull_request_reviews", - "dismiss_stale_reviews": true, - "require_code_owner_reviews": true, - "require_last_push_approval": true, - "required_approving_review_count": 1, - "dismissal_restrictions": { - "url": "https://api.github.com/repos/aws-powertools/powertools-lambda-java/branches/main/protection/dismissal_restrictions", - "users_url": "https://api.github.com/repos/aws-powertools/powertools-lambda-java/branches/main/protection/dismissal_restrictions/users", - "teams_url": "https://api.github.com/repos/aws-powertools/powertools-lambda-java/branches/main/protection/dismissal_restrictions/teams", - "users": [], - "teams": [], - "apps": [] - } - }, - "required_signatures": { - "url": "https://api.github.com/repos/aws-powertools/powertools-lambda-java/branches/main/protection/required_signatures", - "enabled": false - }, - "enforce_admins": { - "url": "https://api.github.com/repos/aws-powertools/powertools-lambda-java/branches/main/protection/enforce_admins", - "enabled": true - }, - "required_linear_history": { - "enabled": true - }, - "allow_force_pushes": { - "enabled": false - }, - "allow_deletions": { - "enabled": false - }, - "block_creations": { - "enabled": true - }, - "required_conversation_resolution": { - "enabled": true - }, - "lock_branch": { - "enabled": false - }, - "allow_fork_syncing": { - "enabled": false - } -} diff --git a/.github/branch_protection_settings/v2.json b/.github/branch_protection_settings/v2.json deleted file mode 100644 index fb9fdebcd..000000000 --- a/.github/branch_protection_settings/v2.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "url": "https://api.github.com/repos/aws-powertools/powertools-lambda-java/branches/v2/protection", - "required_status_checks": { - "url": "https://api.github.com/repos/aws-powertools/powertools-lambda-java/branches/v2/protection/required_status_checks", - "strict": true, - "contexts": [], - "contexts_url": "https://api.github.com/repos/aws-powertools/powertools-lambda-java/branches/v2/protection/required_status_checks/contexts", - "checks": [] - }, - "restrictions": { - "url": "https://api.github.com/repos/aws-powertools/powertools-lambda-java/branches/v2/protection/restrictions", - "users_url": "https://api.github.com/repos/aws-powertools/powertools-lambda-java/branches/v2/protection/restrictions/users", - "teams_url": "https://api.github.com/repos/aws-powertools/powertools-lambda-java/branches/v2/protection/restrictions/teams", - "apps_url": "https://api.github.com/repos/aws-powertools/powertools-lambda-java/branches/v2/protection/restrictions/apps", - "users": [], - "teams": [], - "apps": [] - }, - "required_pull_request_reviews": { - "url": "https://api.github.com/repos/aws-powertools/powertools-lambda-java/branches/v2/protection/required_pull_request_reviews", - "dismiss_stale_reviews": true, - "require_code_owner_reviews": false, - "require_last_push_approval": true, - "required_approving_review_count": 1, - "dismissal_restrictions": { - "url": "https://api.github.com/repos/aws-powertools/powertools-lambda-java/branches/v2/protection/dismissal_restrictions", - "users_url": "https://api.github.com/repos/aws-powertools/powertools-lambda-java/branches/v2/protection/dismissal_restrictions/users", - "teams_url": "https://api.github.com/repos/aws-powertools/powertools-lambda-java/branches/v2/protection/dismissal_restrictions/teams", - "users": [], - "teams": [], - "apps": [] - } - }, - "required_signatures": { - "url": "https://api.github.com/repos/aws-powertools/powertools-lambda-java/branches/v2/protection/required_signatures", - "enabled": false - }, - "enforce_admins": { - "url": "https://api.github.com/repos/aws-powertools/powertools-lambda-java/branches/v2/protection/enforce_admins", - "enabled": false - }, - "required_linear_history": { - "enabled": true - }, - "allow_force_pushes": { - "enabled": false - }, - "allow_deletions": { - "enabled": false - }, - "block_creations": { - "enabled": true - }, - "required_conversation_resolution": { - "enabled": true - }, - "lock_branch": { - "enabled": false - }, - "allow_fork_syncing": { - "enabled": false - } -} diff --git a/.github/workflows/security-branch-protections.yml b/.github/workflows/security-branch-protections.yml deleted file mode 100644 index af6477802..000000000 --- a/.github/workflows/security-branch-protections.yml +++ /dev/null @@ -1,72 +0,0 @@ -# Branch Protections -# -# Description: -# This workflow compares current security branch protections against those stored, -# if there's any changes, it'll fail the job and alert using a Slack webhook -# -# Triggers: -# - pull_request -# - branch_protection_rule -# - cron: daily at 16:40 -# -# Secrets: -# - SECURITY.BRANCH_PROTECTION_TOKEN -# - SECURITY.SLACK_WEBHOOK_URL -# -# Notes: -# Modified copy of: https://github.com/github/docs/blob/main/.github/workflows/alert-changed-branch-protections.yml - -on: - branch_protection_rule: - schedule: - - cron: '20 16 * * *' # Run daily at 16:20 UTC - pull_request: - paths: - - .github/workflows/security-branch-protections.yml - - .github/branch_protection_settings/*.json - -name: Alert Changed Branch Protections -run-name: Alert Changed Branch Protections - -permissions: - contents: read - -jobs: - check-branch-protections: - runs-on: ubuntu-latest - permissions: - contents: write - environment: Security - if: ${{ github.repository == 'aws-powertools/powertools-lambda-java' }} - strategy: - matrix: - # List of branches we want to monitor for protection changes - branch: - - main - - v1 - steps: - - name: Checkout repository - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 - - name: Fetch branch protections - id: fetch - env: - GH_TOKEN: ${{ secrets.BRANCH_PROTECTION_TOKEN }} - run: | - # Fetch branch protections and store them in a file - gh api /repos/${{ github.repository }}/branches/${{ matrix.branch }}/protection | jq \ - > .github/branch_protection_settings/${{ matrix.branch }}.json - - name: Compare branch protections - id: compare - run: | - git diff --quiet .github/branch_protection_settings/${{ matrix.branch }}.json \ - || echo "diff_failed=true" >> $GITHUB_ENV - - name: Send webhook - if: ${{ env.diff_failed == 'true' }} - run: | - curl -X POST -d '{"message": "Branch protections have changed for ${{ github.repository }} on ${{ matrix.branch }}. Please review the changes or revert the changes in GitHub. https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}"}' \ - ${{ secrets.SLACK_WEBHOOK_URL }} - - name: Fail workflow - if: ${{ env.diff_failed == 'true' }} - run: | - git diff .github/branch_protection_settings/${{ matrix.branch }}.json - echo "::error::Branch protections have been changed" \ No newline at end of file From 8208272fb8839eba312e27c1ee5a73a466ae7800 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 24 Nov 2025 13:44:16 +0100 Subject: [PATCH 050/202] chore: bump org.wiremock:wiremock from 3.13.1 to 3.13.2 (#2306) Bumps [org.wiremock:wiremock](https://github.com/wiremock/wiremock) from 3.13.1 to 3.13.2. - [Release notes](https://github.com/wiremock/wiremock/releases) - [Commits](https://github.com/wiremock/wiremock/compare/3.13.1...3.13.2) --- updated-dependencies: - dependency-name: org.wiremock:wiremock dependency-version: 3.13.2 dependency-type: direct:production update-type: version-update:semver-patch ... 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 ed1d2aff9..64b6e0e0d 100644 --- a/pom.xml +++ b/pom.xml @@ -389,7 +389,7 @@ org.wiremock wiremock - 3.13.1 + 3.13.2 test From df4a757bdaaad2dd90093e95416a3ac8a435e30b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 24 Nov 2025 13:44:53 +0100 Subject: [PATCH 051/202] chore: bump aws.sdk.version from 2.38.6 to 2.39.1 (#2305) Bumps `aws.sdk.version` from 2.38.6 to 2.39.1. Updates `software.amazon.awssdk:bom` from 2.38.6 to 2.39.1 Updates `software.amazon.awssdk:http-client-spi` from 2.38.6 to 2.39.1 Updates `software.amazon.awssdk:url-connection-client` from 2.38.6 to 2.39.1 Updates `software.amazon.awssdk:s3` from 2.38.6 to 2.39.1 Updates `software.amazon.awssdk:dynamodb` from 2.38.6 to 2.39.1 Updates `software.amazon.awssdk:lambda` from 2.38.6 to 2.39.1 Updates `software.amazon.awssdk:kinesis` from 2.38.6 to 2.39.1 Updates `software.amazon.awssdk:cloudwatch` from 2.38.6 to 2.39.1 Updates `software.amazon.awssdk:xray` from 2.38.6 to 2.39.1 Updates `software.amazon.awssdk:sqs` from 2.38.6 to 2.39.1 Updates `software.amazon.awssdk:cloudformation` from 2.38.6 to 2.39.1 Updates `software.amazon.awssdk:sts` from 2.38.6 to 2.39.1 --- updated-dependencies: - dependency-name: software.amazon.awssdk:bom dependency-version: 2.39.1 dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:http-client-spi dependency-version: 2.39.1 dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:url-connection-client dependency-version: 2.39.1 dependency-type: direct:development update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:s3 dependency-version: 2.39.1 dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:dynamodb dependency-version: 2.39.1 dependency-type: direct:development update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:lambda dependency-version: 2.39.1 dependency-type: direct:development update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:kinesis dependency-version: 2.39.1 dependency-type: direct:development update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:cloudwatch dependency-version: 2.39.1 dependency-type: direct:development update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:xray dependency-version: 2.39.1 dependency-type: direct:development update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:sqs dependency-version: 2.39.1 dependency-type: direct:development update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:cloudformation dependency-version: 2.39.1 dependency-type: direct:development update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:sts dependency-version: 2.39.1 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> --- examples/powertools-examples-cloudformation/pom.xml | 2 +- pom.xml | 2 +- powertools-e2e-tests/handlers/pom.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/powertools-examples-cloudformation/pom.xml b/examples/powertools-examples-cloudformation/pom.xml index 8dde0a034..09adbfa18 100644 --- a/examples/powertools-examples-cloudformation/pom.xml +++ b/examples/powertools-examples-cloudformation/pom.xml @@ -14,7 +14,7 @@ 11 1.4.0 3.16.1 - 2.38.6 + 2.39.1 1.9.20.1 diff --git a/pom.xml b/pom.xml index 64b6e0e0d..dc2decfd6 100644 --- a/pom.xml +++ b/pom.xml @@ -85,7 +85,7 @@ 2.25.2 2.0.17 2.20.1 - 2.38.6 + 2.39.1 2.20.0 2.2.0 UTF-8 diff --git a/powertools-e2e-tests/handlers/pom.xml b/powertools-e2e-tests/handlers/pom.xml index f06db02f0..a9d3c3ab5 100644 --- a/powertools-e2e-tests/handlers/pom.xml +++ b/powertools-e2e-tests/handlers/pom.xml @@ -19,7 +19,7 @@ 3.6.1 1.14.1 3.14.1 - 2.38.6 + 2.39.1 1.9.20.1 true From 51eeaf47431f6a7d93bc3bd67942849595ebbf37 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 24 Nov 2025 13:45:08 +0100 Subject: [PATCH 052/202] chore: bump org.apache.commons:commons-lang3 from 3.19.0 to 3.20.0 (#2304) Bumps org.apache.commons:commons-lang3 from 3.19.0 to 3.20.0. --- updated-dependencies: - dependency-name: org.apache.commons:commons-lang3 dependency-version: 3.20.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> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index dc2decfd6..1e4c3a9fd 100644 --- a/pom.xml +++ b/pom.xml @@ -310,7 +310,7 @@ org.apache.commons commons-lang3 - 3.19.0 + 3.20.0 From ca96cd82ac46b8e54fdd4271570d6c2e5941fd85 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 24 Nov 2025 15:58:09 +0100 Subject: [PATCH 053/202] chore: bump actions/checkout from 5.0.0 to 6.0.0 (#2308) Bumps [actions/checkout](https://github.com/actions/checkout) from 5.0.0 to 6.0.0. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/08c6903cd8c0fde910a37f88322edcfb5dd907a8...1af3b93b6815bc44a9784bd300feb67ff0d1eeb3) --- updated-dependencies: - dependency-name: actions/checkout dependency-version: 6.0.0 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/build-docs.yml | 2 +- .github/workflows/check-build.yml | 4 ++-- .github/workflows/check-e2e.yml | 4 ++-- .github/workflows/check-pmd.yml | 2 +- .github/workflows/check-spotbugs.yml | 2 +- .github/workflows/release.yml | 6 +++--- .github/workflows/security-dependencies-check.yml | 2 +- .github/workflows/security-scorecard.yml | 2 +- 8 files changed, 12 insertions(+), 12 deletions(-) diff --git a/.github/workflows/build-docs.yml b/.github/workflows/build-docs.yml index 8cef6040e..be53fbfaa 100644 --- a/.github/workflows/build-docs.yml +++ b/.github/workflows/build-docs.yml @@ -32,7 +32,7 @@ jobs: environment: Docs steps: - name: Checkout Repository - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 + uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 with: fetch-depth: 0 - name: Build diff --git a/.github/workflows/check-build.yml b/.github/workflows/check-build.yml index 88f1eabee..a972084a6 100644 --- a/.github/workflows/check-build.yml +++ b/.github/workflows/check-build.yml @@ -77,7 +77,7 @@ jobs: steps: - id: checkout name: Checkout repository - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 - name: Setup Java uses: actions/setup-java@dded0888837ed1f317902acf8a20df0ad188d165 with: @@ -94,7 +94,7 @@ jobs: steps: - id: checkout name: Checkout repository - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 with: fetch-depth: 0 - name: Get changed files diff --git a/.github/workflows/check-e2e.yml b/.github/workflows/check-e2e.yml index 54e7cd023..6ed3b248e 100644 --- a/.github/workflows/check-e2e.yml +++ b/.github/workflows/check-e2e.yml @@ -57,7 +57,7 @@ jobs: - 25 steps: - - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + - uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 - name: Setup java uses: actions/setup-java@dded0888837ed1f317902acf8a20df0ad188d165 # v5.0.0 with: @@ -88,7 +88,7 @@ jobs: - 25 steps: - - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + - uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 - name: Setup java uses: actions/setup-java@dded0888837ed1f317902acf8a20df0ad188d165 # v5.0.0 with: diff --git a/.github/workflows/check-pmd.yml b/.github/workflows/check-pmd.yml index 41983f89b..66150821d 100644 --- a/.github/workflows/check-pmd.yml +++ b/.github/workflows/check-pmd.yml @@ -29,7 +29,7 @@ jobs: id-token: write steps: - name: Checkout Repository - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 - name: Setup Java uses: actions/setup-java@dded0888837ed1f317902acf8a20df0ad188d165 # v5.0.0 with: diff --git a/.github/workflows/check-spotbugs.yml b/.github/workflows/check-spotbugs.yml index bf746320d..8af0e4d9d 100644 --- a/.github/workflows/check-spotbugs.yml +++ b/.github/workflows/check-spotbugs.yml @@ -41,7 +41,7 @@ jobs: codecheck: runs-on: ubuntu-latest steps: - - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + - uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 - name: Setup Java uses: actions/setup-java@dded0888837ed1f317902acf8a20df0ad188d165 # v5.0.0 with: diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 79cb5b04f..bd2e23487 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -103,7 +103,7 @@ jobs: steps: - id: checkout name: Checkout repository - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 - id: version name: version uses: ./.github/actions/version @@ -224,7 +224,7 @@ jobs: steps: - id: checkout name: Checkout repository - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 with: ref: ${{ env.RELEASE_COMMIT }} - id: download_source @@ -272,7 +272,7 @@ jobs: steps: - id: checkout name: Checkout repository - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 with: # Checkout PR branch to make sure we build the version-bumped docs ref: ci-${{ github.run_id }} diff --git a/.github/workflows/security-dependencies-check.yml b/.github/workflows/security-dependencies-check.yml index c6e06950f..1e85d9e96 100644 --- a/.github/workflows/security-dependencies-check.yml +++ b/.github/workflows/security-dependencies-check.yml @@ -24,7 +24,7 @@ jobs: pull-requests: write steps: - name: Checkout Repository - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 - name: Verify Contents uses: actions/dependency-review-action@3c4e3dcb1aa7874d2c16be7d79418e9b7efd6261 # v4.8.2 with: diff --git a/.github/workflows/security-scorecard.yml b/.github/workflows/security-scorecard.yml index 205cb0ddc..d59367015 100644 --- a/.github/workflows/security-scorecard.yml +++ b/.github/workflows/security-scorecard.yml @@ -35,7 +35,7 @@ jobs: id-token: write steps: - name: Checkout Repository - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 with: persist-credentials: false - name: Run Analysis From 54991e6bf589ac29b26960b53782ab5a8fe13371 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 24 Nov 2025 15:58:32 +0100 Subject: [PATCH 054/202] chore: bump sam/build-java25 (#2309) Bumps sam/build-java25 from `2ef9e5b` to `af599d0`. --- updated-dependencies: - dependency-name: sam/build-java25 dependency-version: af599d010afef63c83a04265dee9adbd4557d94b4a81941f28ae42657af7890d dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- powertools-e2e-tests/src/test/resources/docker/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/powertools-e2e-tests/src/test/resources/docker/Dockerfile b/powertools-e2e-tests/src/test/resources/docker/Dockerfile index 5d374eaa8..6643760b4 100644 --- a/powertools-e2e-tests/src/test/resources/docker/Dockerfile +++ b/powertools-e2e-tests/src/test/resources/docker/Dockerfile @@ -1,5 +1,5 @@ # Use the official AWS SAM base image for Java 25 -FROM public.ecr.aws/sam/build-java25@sha256:2ef9e5b950cc79489691be16c7edff904bf196955633dc7fbbc282a1ea421ba8 +FROM public.ecr.aws/sam/build-java25@sha256:af599d010afef63c83a04265dee9adbd4557d94b4a81941f28ae42657af7890d # Install GraalVM dependencies RUN curl -4 -L https://download.oracle.com/graalvm/25/latest/graalvm-jdk-25_linux-x64_bin.tar.gz | tar -xvz From 93d302f09fbb37770bccedb96ab1e1acc5ea260e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 24 Nov 2025 15:58:58 +0100 Subject: [PATCH 055/202] chore: bump github/codeql-action from 4.31.4 to 4.31.5 (#2312) Bumps [github/codeql-action](https://github.com/github/codeql-action) from 4.31.4 to 4.31.5. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/e12f0178983d466f2f6028f5cc7a6d786fd97f4b...fdbfb4d2750291e159f0156def62b853c2798ca2) --- updated-dependencies: - dependency-name: github/codeql-action dependency-version: 4.31.5 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/security-scorecard.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/security-scorecard.yml b/.github/workflows/security-scorecard.yml index d59367015..0944694f7 100644 --- a/.github/workflows/security-scorecard.yml +++ b/.github/workflows/security-scorecard.yml @@ -52,6 +52,6 @@ jobs: path: results.sarif retention-days: 5 - name: Upload to Code-Scanning - uses: github/codeql-action/upload-sarif@e12f0178983d466f2f6028f5cc7a6d786fd97f4b # v3.29.5 + uses: github/codeql-action/upload-sarif@fdbfb4d2750291e159f0156def62b853c2798ca2 # v3.29.5 with: sarif_file: results.sarif From 7ea89ded9d25796e9acc0ae1a4b68b5ae4193481 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 26 Nov 2025 11:54:38 +0100 Subject: [PATCH 056/202] chore: bump aws-actions/configure-aws-credentials from 5.1.0 to 5.1.1 (#2316) Bumps [aws-actions/configure-aws-credentials](https://github.com/aws-actions/configure-aws-credentials) from 5.1.0 to 5.1.1. - [Release notes](https://github.com/aws-actions/configure-aws-credentials/releases) - [Changelog](https://github.com/aws-actions/configure-aws-credentials/blob/main/CHANGELOG.md) - [Commits](https://github.com/aws-actions/configure-aws-credentials/compare/00943011d9042930efac3dcd3a170e4273319bc8...61815dcd50bd041e203e49132bacad1fd04d2708) --- updated-dependencies: - dependency-name: aws-actions/configure-aws-credentials dependency-version: 5.1.1 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/build-docs.yml | 2 +- .github/workflows/check-e2e.yml | 4 ++-- .github/workflows/release.yml | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build-docs.yml b/.github/workflows/build-docs.yml index be53fbfaa..417f21c48 100644 --- a/.github/workflows/build-docs.yml +++ b/.github/workflows/build-docs.yml @@ -41,7 +41,7 @@ jobs: docker build -t squidfunk/mkdocs-material ./docs/ docker run --rm -t -v ${PWD}:/docs squidfunk/mkdocs-material build - name: Configure AWS credentials - uses: aws-actions/configure-aws-credentials@00943011d9042930efac3dcd3a170e4273319bc8 + uses: aws-actions/configure-aws-credentials@61815dcd50bd041e203e49132bacad1fd04d2708 with: aws-region: us-east-1 role-to-assume: ${{ secrets.AWS_DOCS_ROLE_ARN }} diff --git a/.github/workflows/check-e2e.yml b/.github/workflows/check-e2e.yml index 6ed3b248e..2ddb78ec0 100644 --- a/.github/workflows/check-e2e.yml +++ b/.github/workflows/check-e2e.yml @@ -65,7 +65,7 @@ jobs: java-version: ${{ matrix.java }} cache: maven - name: Setup AWS credentials - uses: aws-actions/configure-aws-credentials@00943011d9042930efac3dcd3a170e4273319bc8 # v5.1.0 + uses: aws-actions/configure-aws-credentials@61815dcd50bd041e203e49132bacad1fd04d2708 # v5.1.1 with: role-to-assume: ${{ secrets.AWS_IAM_ROLE }} aws-region: us-east-1 @@ -96,7 +96,7 @@ jobs: java-version: ${{ matrix.java }} cache: maven - name: Setup AWS credentials - uses: aws-actions/configure-aws-credentials@00943011d9042930efac3dcd3a170e4273319bc8 # v5.1.0 + uses: aws-actions/configure-aws-credentials@61815dcd50bd041e203e49132bacad1fd04d2708 # v5.1.1 with: role-to-assume: ${{ secrets.AWS_IAM_ROLE }} aws-region: us-east-1 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index bd2e23487..20ff19a69 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -282,7 +282,7 @@ jobs: docker build -t squidfunk/mkdocs-material ./docs/ docker run --rm -t -v ${PWD}:/docs squidfunk/mkdocs-material build - name: Configure AWS credentials - uses: aws-actions/configure-aws-credentials@00943011d9042930efac3dcd3a170e4273319bc8 + uses: aws-actions/configure-aws-credentials@61815dcd50bd041e203e49132bacad1fd04d2708 with: aws-region: us-east-1 role-to-assume: ${{ secrets.AWS_DOCS_ROLE_ARN }} From bb70c1be87072674a46456cfb73cd86818f45d46 Mon Sep 17 00:00:00 2001 From: Philipp Page Date: Wed, 10 Dec 2025 16:21:53 +0100 Subject: [PATCH 057/202] fix(metrics): Clear custom dimensions when flushing. (#2328) --- .../metrics/internal/EmfMetricsLogger.java | 24 ++- .../internal/EmfMetricsLoggerTest.java | 189 ++++++++++++++++++ 2 files changed, 212 insertions(+), 1 deletion(-) diff --git a/powertools-metrics/src/main/java/software/amazon/lambda/powertools/metrics/internal/EmfMetricsLogger.java b/powertools-metrics/src/main/java/software/amazon/lambda/powertools/metrics/internal/EmfMetricsLogger.java index 37f2d193a..611d4dcc6 100644 --- a/powertools-metrics/src/main/java/software/amazon/lambda/powertools/metrics/internal/EmfMetricsLogger.java +++ b/powertools-metrics/src/main/java/software/amazon/lambda/powertools/metrics/internal/EmfMetricsLogger.java @@ -164,6 +164,27 @@ public void flush() { } } else { emfLogger.flush(); + + // Clear custom dimensions after flush while preserving default dimensions + clearCustomDimensions(); + } + } + + private void clearCustomDimensions() { + // Reset all dimensions in the EMF logger + emfLogger.resetDimensions(false); + + // Re-apply default dimensions if they exist + if (!defaultDimensions.isEmpty()) { + DimensionSet emfDimensionSet = new DimensionSet(); + defaultDimensions.forEach((key, value) -> { + try { + emfDimensionSet.addDimension(key, value); + } catch (Exception e) { + // Ignore dimension errors + } + }); + emfLogger.setDimensions(emfDimensionSet); } } @@ -198,7 +219,8 @@ public void flushMetrics(Consumer metricsConsumer) { metrics.setNamespace(this.namespace); } if (!defaultDimensions.isEmpty()) { - metrics.setDefaultDimensions(software.amazon.lambda.powertools.metrics.model.DimensionSet.of(defaultDimensions)); + metrics.setDefaultDimensions( + software.amazon.lambda.powertools.metrics.model.DimensionSet.of(defaultDimensions)); } properties.forEach(metrics::addMetadata); diff --git a/powertools-metrics/src/test/java/software/amazon/lambda/powertools/metrics/internal/EmfMetricsLoggerTest.java b/powertools-metrics/src/test/java/software/amazon/lambda/powertools/metrics/internal/EmfMetricsLoggerTest.java index c2238711a..5e597e835 100644 --- a/powertools-metrics/src/test/java/software/amazon/lambda/powertools/metrics/internal/EmfMetricsLoggerTest.java +++ b/powertools-metrics/src/test/java/software/amazon/lambda/powertools/metrics/internal/EmfMetricsLoggerTest.java @@ -263,6 +263,65 @@ void shouldAddMetadata() throws Exception { assertThat(rootNode.get("CustomMetadata").asText()).isEqualTo("MetadataValue"); } + @Test + void shouldClearMetadataAfterFlush() throws Exception { + // Given - Add metadata and flush first time + metrics.addMetadata("RequestId", "req-123"); + metrics.addMetadata("UserAgent", "test-agent"); + metrics.addMetric("FirstMetric", 1.0); + metrics.flush(); + + // Capture first flush output and reset for second flush + String firstFlushOutput = outputStreamCaptor.toString().trim(); + outputStreamCaptor.reset(); + + // When - Add another metric and flush again using the SAME metrics instance + metrics.addMetric("SecondMetric", 2.0); + metrics.flush(); + + // Then - Verify first flush had metadata + JsonNode firstRootNode = objectMapper.readTree(firstFlushOutput); + assertThat(firstRootNode.has("RequestId")).isTrue(); + assertThat(firstRootNode.get("RequestId").asText()).isEqualTo("req-123"); + assertThat(firstRootNode.has("UserAgent")).isTrue(); + assertThat(firstRootNode.get("UserAgent").asText()).isEqualTo("test-agent"); + assertThat(firstRootNode.has("FirstMetric")).isTrue(); + + // Verify second flush does NOT have metadata from first flush + // The EMF library automatically clears metadata after flush + String secondFlushOutput = outputStreamCaptor.toString().trim(); + JsonNode secondRootNode = objectMapper.readTree(secondFlushOutput); + + // Metadata should be cleared after first flush by the EMF library + assertThat(secondRootNode.has("RequestId")).isFalse(); + assertThat(secondRootNode.has("UserAgent")).isFalse(); + assertThat(secondRootNode.has("SecondMetric")).isTrue(); + } + + @Test + void shouldInheritMetadataInFlushMetricsMethod() throws Exception { + // Given - Add metadata to the main metrics instance + metrics.addMetadata("PersistentMetadata", "should-inherit"); + metrics.addMetadata("GlobalContext", "main-instance"); + + // When - Use flushMetrics to create a separate metrics context + metrics.flushMetrics(separateMetrics -> { + separateMetrics.addMetric("SeparateMetric", 1.0); + // Don't add any metadata to the separate instance + }); + + // Then - The separate metrics context SHOULD inherit metadata from main instance + String flushMetricsOutput = outputStreamCaptor.toString().trim(); + JsonNode rootNode = objectMapper.readTree(flushMetricsOutput); + + // The separate metrics should have inherited metadata (this is expected behavior) + assertThat(rootNode.has("PersistentMetadata")).isTrue(); + assertThat(rootNode.get("PersistentMetadata").asText()).isEqualTo("should-inherit"); + assertThat(rootNode.has("GlobalContext")).isTrue(); + assertThat(rootNode.get("GlobalContext").asText()).isEqualTo("main-instance"); + assertThat(rootNode.has("SeparateMetric")).isTrue(); + } + @Test void shouldSetDefaultDimensions() throws Exception { // Given @@ -547,4 +606,134 @@ void shouldNotFlushSingleMetricWhenDisabled() { String emfOutput = outputStreamCaptor.toString().trim(); assertThat(emfOutput).isEmpty(); } + + @Test + void shouldClearCustomDimensionsAfterFlush() throws Exception { + // Given - Set up default dimensions that should persist + DimensionSet defaultDimensions = DimensionSet.of("Service", "TestService", "Environment", "Test"); + metrics.setDefaultDimensions(defaultDimensions); + + // First invocation - add custom dimensions and flush + DimensionSet customDimensions = DimensionSet.of("EXAMPLE_KEY", "EXAMPLE_VALUE"); + metrics.addDimension(customDimensions); + metrics.addMetric("SERL", 1.0); + metrics.flush(); + + // Capture first flush output + String firstFlushOutput = outputStreamCaptor.toString().trim(); + outputStreamCaptor.reset(); // Clear for second flush + + // Second invocation - should NOT have custom dimensions from first invocation + metrics.addMetric("Expected", 1.0); + metrics.flush(); + + // Then - Verify first flush had both default and custom dimensions + JsonNode firstRootNode = objectMapper.readTree(firstFlushOutput); + assertThat(firstRootNode.has("Service")).isTrue(); + assertThat(firstRootNode.get("Service").asText()).isEqualTo("TestService"); + assertThat(firstRootNode.has("Environment")).isTrue(); + assertThat(firstRootNode.get("Environment").asText()).isEqualTo("Test"); + assertThat(firstRootNode.has("EXAMPLE_KEY")).isTrue(); + assertThat(firstRootNode.get("EXAMPLE_KEY").asText()).isEqualTo("EXAMPLE_VALUE"); + assertThat(firstRootNode.has("SERL")).isTrue(); + + // Verify second flush has ONLY default dimensions (custom dimensions should be cleared) + String secondFlushOutput = outputStreamCaptor.toString().trim(); + JsonNode secondRootNode = objectMapper.readTree(secondFlushOutput); + + // Default dimensions should still be present + assertThat(secondRootNode.has("Service")).isTrue(); + assertThat(secondRootNode.get("Service").asText()).isEqualTo("TestService"); + assertThat(secondRootNode.has("Environment")).isTrue(); + assertThat(secondRootNode.get("Environment").asText()).isEqualTo("Test"); + + // Custom dimensions should be cleared (this is the failing assertion that demonstrates the bug) + assertThat(secondRootNode.has("EXAMPLE_KEY")).isFalse(); + assertThat(secondRootNode.has("Expected")).isTrue(); + + // Verify dimensions in CloudWatchMetrics section + JsonNode secondDimensions = secondRootNode.get("_aws").get("CloudWatchMetrics").get(0).get("Dimensions").get(0); + boolean hasExampleKey = false; + boolean hasService = false; + boolean hasEnvironment = false; + + for (JsonNode dimension : secondDimensions) { + String dimName = dimension.asText(); + if ("EXAMPLE_KEY".equals(dimName)) { + hasExampleKey = true; + } else if ("Service".equals(dimName)) { + hasService = true; + } else if ("Environment".equals(dimName)) { + hasEnvironment = true; + } + } + + // Default dimensions should be in CloudWatchMetrics + assertThat(hasService).isTrue(); + assertThat(hasEnvironment).isTrue(); + // Custom dimension should NOT be in CloudWatchMetrics (this should fail initially) + assertThat(hasExampleKey).isFalse(); + } + + @Test + void shouldHandleEmptyCustomDimensionsGracefully() throws Exception { + // Given - Only default dimensions, no custom dimensions + metrics.setDefaultDimensions(DimensionSet.of("Service", "TestService")); + + // When - Flush without adding custom dimensions + metrics.addMetric("TestMetric", 1.0); + metrics.flush(); + outputStreamCaptor.reset(); + + // Second flush + metrics.addMetric("TestMetric2", 2.0); + metrics.flush(); + + // Then - Should work normally with only default dimensions + String output = outputStreamCaptor.toString().trim(); + JsonNode rootNode = objectMapper.readTree(output); + + assertThat(rootNode.has("Service")).isTrue(); + assertThat(rootNode.get("Service").asText()).isEqualTo("TestService"); + assertThat(rootNode.has("TestMetric2")).isTrue(); + } + + @Test + void shouldClearCustomDimensionsWhenNoDefaultDimensionsSet() throws Exception { + // Given - No default dimensions set + metrics.clearDefaultDimensions(); + + // When - Add custom dimensions and flush + metrics.addDimension("CustomDim", "CustomValue"); + metrics.addMetric("Metric1", 1.0); + metrics.flush(); + outputStreamCaptor.reset(); + + // Second flush without custom dimensions + metrics.addMetric("Metric2", 2.0); + metrics.flush(); + + // Then - Custom dimensions should be cleared + String output = outputStreamCaptor.toString().trim(); + JsonNode rootNode = objectMapper.readTree(output); + + assertThat(rootNode.has("CustomDim")).isFalse(); + assertThat(rootNode.has("Metric2")).isTrue(); + + // Verify no custom dimensions in CloudWatchMetrics section + JsonNode dimensionsArray = rootNode.get("_aws").get("CloudWatchMetrics").get(0).get("Dimensions"); + boolean hasCustomDim = false; + if (dimensionsArray != null && dimensionsArray.size() > 0) { + JsonNode dimensions = dimensionsArray.get(0); + if (dimensions != null) { + for (JsonNode dimension : dimensions) { + if ("CustomDim".equals(dimension.asText())) { + hasCustomDim = true; + break; + } + } + } + } + assertThat(hasCustomDim).isFalse(); + } } From 79e31370cf85d1c44b304930b4f063272a5e3a68 Mon Sep 17 00:00:00 2001 From: Philipp Page Date: Mon, 15 Dec 2025 13:12:40 +0100 Subject: [PATCH 058/202] feat(cold-start-detection): Suppress cold start detection for non ON-DEMAND invocations (#2329) * fix: cold start only on on-demand invocation * fix: cold start only on on-demand invocation * fix: cold start only on on-demand invocation * mvn clean test is successful * reversed the sqllite changes * feat(cold-start-detection): Suppress cold start for non ON-DEMAND invocation (since there are no cold starts). --------- Co-authored-by: Attyuttam --- .../terraform/pom.xml | 6 +++--- .../sam-graalvm/pom.xml | 7 +++---- .../powertools-examples-parameters/sam/pom.xml | 4 +--- pom.xml | 2 -- powertools-common/pom.xml | 1 - .../common/internal/LambdaConstants.java | 2 ++ .../common/internal/LambdaHandlerProcessor.java | 9 ++++++++- .../internal/LambdaHandlerProcessorTest.java | 1 + powertools-e2e-tests/pom.xml | 2 -- powertools-logging/pom.xml | 3 +-- .../powertools-logging-log4j/pom.xml | 3 +-- .../powertools-logging-logback/pom.xml | 3 +-- powertools-metrics/pom.xml | 1 + powertools-parameters/pom.xml | 2 -- .../powertools-parameters-appconfig/pom.xml | 2 -- .../powertools-parameters-dynamodb/pom.xml | 2 -- .../powertools-parameters-secrets/pom.xml | 2 -- .../powertools-parameters-ssm/pom.xml | 2 -- .../powertools-parameters-tests/pom.xml | 1 - powertools-serialization/pom.xml | 1 - powertools-tracing/pom.xml | 15 ++++++++++++++- 21 files changed, 36 insertions(+), 35 deletions(-) diff --git a/examples/powertools-examples-core-utilities/terraform/pom.xml b/examples/powertools-examples-core-utilities/terraform/pom.xml index 14c0e223e..a6237b00f 100644 --- a/examples/powertools-examples-core-utilities/terraform/pom.xml +++ b/examples/powertools-examples-core-utilities/terraform/pom.xml @@ -1,5 +1,5 @@ + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 4.0.0 Powertools for AWS Lambda (Java) - Examples - Core Utilities (logging, tracing, metrics) with Terraform @@ -101,7 +101,8 @@ false - + @@ -126,7 +127,6 @@ org.apache.maven.plugins maven-surefire-plugin - 3.5.4 handler diff --git a/examples/powertools-examples-parameters/sam-graalvm/pom.xml b/examples/powertools-examples-parameters/sam-graalvm/pom.xml index 6d0c3f4a2..09401eeff 100644 --- a/examples/powertools-examples-parameters/sam-graalvm/pom.xml +++ b/examples/powertools-examples-parameters/sam-graalvm/pom.xml @@ -1,5 +1,5 @@ + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 4.0.0 software.amazon.lambda.examples 2.8.0 @@ -98,8 +98,6 @@ org.apache.maven.plugins maven-surefire-plugin - - 3.5.4 dev.aspectj @@ -144,7 +142,8 @@ false - + diff --git a/examples/powertools-examples-parameters/sam/pom.xml b/examples/powertools-examples-parameters/sam/pom.xml index 15d68ffcd..3e8f99aa0 100644 --- a/examples/powertools-examples-parameters/sam/pom.xml +++ b/examples/powertools-examples-parameters/sam/pom.xml @@ -1,5 +1,5 @@ + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 4.0.0 software.amazon.lambda.examples 2.8.0 @@ -72,8 +72,6 @@ org.apache.maven.plugins maven-surefire-plugin - - 3.5.4 dev.aspectj diff --git a/pom.xml b/pom.xml index 1e4c3a9fd..6f6a9ce10 100644 --- a/pom.xml +++ b/pom.xml @@ -95,7 +95,6 @@ 3.14.1 1.9.7 1.13.1 - 3.2.5 0.8.11 1.6.13 3.12.0 @@ -625,7 +624,6 @@ org.apache.maven.plugins maven-surefire-plugin - 3.5.4 @{argLine} diff --git a/powertools-common/pom.xml b/powertools-common/pom.xml index f14783b5b..551fae8bc 100644 --- a/powertools-common/pom.xml +++ b/powertools-common/pom.xml @@ -106,7 +106,6 @@ org.apache.maven.plugins maven-surefire-plugin - 3.5.4 -Dorg.graalvm.nativeimage.imagecode=agent diff --git a/powertools-common/src/main/java/software/amazon/lambda/powertools/common/internal/LambdaConstants.java b/powertools-common/src/main/java/software/amazon/lambda/powertools/common/internal/LambdaConstants.java index 69fc1283a..4c4e8e9db 100644 --- a/powertools-common/src/main/java/software/amazon/lambda/powertools/common/internal/LambdaConstants.java +++ b/powertools-common/src/main/java/software/amazon/lambda/powertools/common/internal/LambdaConstants.java @@ -28,4 +28,6 @@ private LambdaConstants() { public static final String ROOT_EQUALS = "Root="; public static final String POWERTOOLS_SERVICE_NAME = "POWERTOOLS_SERVICE_NAME"; public static final String SERVICE_UNDEFINED = "service_undefined"; + public static final String AWS_LAMBDA_INITIALIZATION_TYPE = "AWS_LAMBDA_INITIALIZATION_TYPE"; + public static final String ON_DEMAND_INVOCATION_TYPE = "on-demand"; } diff --git a/powertools-common/src/main/java/software/amazon/lambda/powertools/common/internal/LambdaHandlerProcessor.java b/powertools-common/src/main/java/software/amazon/lambda/powertools/common/internal/LambdaHandlerProcessor.java index 393835d1e..15bff15d6 100644 --- a/powertools-common/src/main/java/software/amazon/lambda/powertools/common/internal/LambdaHandlerProcessor.java +++ b/powertools-common/src/main/java/software/amazon/lambda/powertools/common/internal/LambdaHandlerProcessor.java @@ -93,7 +93,14 @@ protected static void resetServiceName() { } public static boolean isColdStart() { - return isColdStart == null; + if (isColdStart != null) { + return isColdStart; + } + + String initType = System.getenv(LambdaConstants.AWS_LAMBDA_INITIALIZATION_TYPE); + isColdStart = LambdaConstants.ON_DEMAND_INVOCATION_TYPE.equals(initType); + + return isColdStart; } public static void coldStartDone() { diff --git a/powertools-common/src/test/java/software/amazon/lambda/powertools/common/internal/LambdaHandlerProcessorTest.java b/powertools-common/src/test/java/software/amazon/lambda/powertools/common/internal/LambdaHandlerProcessorTest.java index 5c6bdc020..0726a9e77 100644 --- a/powertools-common/src/test/java/software/amazon/lambda/powertools/common/internal/LambdaHandlerProcessorTest.java +++ b/powertools-common/src/test/java/software/amazon/lambda/powertools/common/internal/LambdaHandlerProcessorTest.java @@ -216,6 +216,7 @@ void extractContext_notKnownHandler() { } @Test + @SetEnvironmentVariable(key = LambdaConstants.AWS_LAMBDA_INITIALIZATION_TYPE, value = LambdaConstants.ON_DEMAND_INVOCATION_TYPE) void isColdStart() { boolean isColdStart = LambdaHandlerProcessor.isColdStart(); diff --git a/powertools-e2e-tests/pom.xml b/powertools-e2e-tests/pom.xml index 484e3b4c2..bfd4350a0 100644 --- a/powertools-e2e-tests/pom.xml +++ b/powertools-e2e-tests/pom.xml @@ -214,7 +214,6 @@ org.apache.maven.plugins maven-failsafe-plugin - 3.5.4 @@ -241,7 +240,6 @@ org.apache.maven.plugins maven-failsafe-plugin - 3.5.4 diff --git a/powertools-logging/pom.xml b/powertools-logging/pom.xml index ae5788291..923d6d133 100644 --- a/powertools-logging/pom.xml +++ b/powertools-logging/pom.xml @@ -123,7 +123,6 @@ org.apache.maven.plugins maven-surefire-plugin - 3.5.4 -Dorg.graalvm.nativeimage.imagecode=agent @@ -182,11 +181,11 @@ org.apache.maven.plugins maven-surefire-plugin - 3.5.4 JSON testService + on-demand diff --git a/powertools-logging/powertools-logging-log4j/pom.xml b/powertools-logging/powertools-logging-log4j/pom.xml index 1cf3bf265..19a8b9428 100644 --- a/powertools-logging/powertools-logging-log4j/pom.xml +++ b/powertools-logging/powertools-logging-log4j/pom.xml @@ -112,7 +112,6 @@ org.apache.maven.plugins maven-surefire-plugin - 3.5.4 -Dorg.graalvm.nativeimage.imagecode=agent @@ -204,12 +203,12 @@ org.apache.maven.plugins maven-surefire-plugin - 3.5.4 testLog4j eu-central-1 <_X_AMZN_TRACE_ID>Root=1-63441c4a-abcdef012345678912345678 + on-demand diff --git a/powertools-logging/powertools-logging-logback/pom.xml b/powertools-logging/powertools-logging-logback/pom.xml index b5a50573d..7ed1f1a17 100644 --- a/powertools-logging/powertools-logging-logback/pom.xml +++ b/powertools-logging/powertools-logging-logback/pom.xml @@ -110,7 +110,6 @@ org.apache.maven.plugins maven-surefire-plugin - 3.5.4 -Dorg.graalvm.nativeimage.imagecode=agent @@ -203,12 +202,12 @@ org.apache.maven.plugins maven-surefire-plugin - 3.5.4 testLogback eu-central-1 <_X_AMZN_TRACE_ID>Root=1-63441c4a-abcdef012345678912345678 + on-demand diff --git a/powertools-metrics/pom.xml b/powertools-metrics/pom.xml index 4da0c0a9f..86bdcc560 100644 --- a/powertools-metrics/pom.xml +++ b/powertools-metrics/pom.xml @@ -231,6 +231,7 @@ Lambda + on-demand diff --git a/powertools-parameters/pom.xml b/powertools-parameters/pom.xml index a2c4a65dc..78234b5cc 100644 --- a/powertools-parameters/pom.xml +++ b/powertools-parameters/pom.xml @@ -80,7 +80,6 @@ maven-surefire-plugin - 3.5.4 eu-central-1 @@ -98,7 +97,6 @@ org.apache.maven.plugins maven-surefire-plugin - 3.5.4 -Dorg.graalvm.nativeimage.imagecode=agent diff --git a/powertools-parameters/powertools-parameters-appconfig/pom.xml b/powertools-parameters/powertools-parameters-appconfig/pom.xml index ab8ae0e67..3c38963a1 100644 --- a/powertools-parameters/powertools-parameters-appconfig/pom.xml +++ b/powertools-parameters/powertools-parameters-appconfig/pom.xml @@ -108,7 +108,6 @@ org.apache.maven.plugins maven-surefire-plugin - 3.5.4 -Dorg.graalvm.nativeimage.imagecode=agent @@ -175,7 +174,6 @@ maven-surefire-plugin - 3.5.4 eu-central-1 diff --git a/powertools-parameters/powertools-parameters-dynamodb/pom.xml b/powertools-parameters/powertools-parameters-dynamodb/pom.xml index 76a7b8845..b9e48567a 100644 --- a/powertools-parameters/powertools-parameters-dynamodb/pom.xml +++ b/powertools-parameters/powertools-parameters-dynamodb/pom.xml @@ -109,7 +109,6 @@ org.apache.maven.plugins maven-surefire-plugin - 3.5.4 -Dorg.graalvm.nativeimage.imagecode=agent @@ -176,7 +175,6 @@ maven-surefire-plugin - 3.5.4 eu-central-1 diff --git a/powertools-parameters/powertools-parameters-secrets/pom.xml b/powertools-parameters/powertools-parameters-secrets/pom.xml index fbe4905be..c83c674d5 100644 --- a/powertools-parameters/powertools-parameters-secrets/pom.xml +++ b/powertools-parameters/powertools-parameters-secrets/pom.xml @@ -109,7 +109,6 @@ org.apache.maven.plugins maven-surefire-plugin - 3.5.4 -Dorg.graalvm.nativeimage.imagecode=agent @@ -176,7 +175,6 @@ maven-surefire-plugin - 3.5.4 eu-central-1 diff --git a/powertools-parameters/powertools-parameters-ssm/pom.xml b/powertools-parameters/powertools-parameters-ssm/pom.xml index c9de1db51..d23b84bf6 100644 --- a/powertools-parameters/powertools-parameters-ssm/pom.xml +++ b/powertools-parameters/powertools-parameters-ssm/pom.xml @@ -98,7 +98,6 @@ maven-surefire-plugin - 3.5.4 eu-central-1 @@ -123,7 +122,6 @@ org.apache.maven.plugins maven-surefire-plugin - 3.5.4 -Dorg.graalvm.nativeimage.imagecode=agent diff --git a/powertools-parameters/powertools-parameters-tests/pom.xml b/powertools-parameters/powertools-parameters-tests/pom.xml index 3bcd4d604..9b93b3f79 100644 --- a/powertools-parameters/powertools-parameters-tests/pom.xml +++ b/powertools-parameters/powertools-parameters-tests/pom.xml @@ -110,7 +110,6 @@ org.apache.maven.plugins maven-surefire-plugin - 3.5.4 -Dorg.graalvm.nativeimage.imagecode=agent diff --git a/powertools-serialization/pom.xml b/powertools-serialization/pom.xml index c1eea4df7..535f23190 100644 --- a/powertools-serialization/pom.xml +++ b/powertools-serialization/pom.xml @@ -107,7 +107,6 @@ org.apache.maven.plugins maven-surefire-plugin - 3.5.4 -Dorg.graalvm.nativeimage.imagecode=agent diff --git a/powertools-tracing/pom.xml b/powertools-tracing/pom.xml index ed2596059..9e5603d70 100644 --- a/powertools-tracing/pom.xml +++ b/powertools-tracing/pom.xml @@ -129,6 +129,20 @@ + + + + org.apache.maven.plugins + maven-surefire-plugin + + + on-demand + + + + + + generate-graalvm-files @@ -137,7 +151,6 @@ org.apache.maven.plugins maven-surefire-plugin - 3.5.4 -Dorg.graalvm.nativeimage.imagecode=agent From e6f6a92892291670387274d1d83253e577008722 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 16 Dec 2025 10:09:57 +0100 Subject: [PATCH 059/202] chore: bump aws.sdk.version from 2.38.7 to 2.39.3 (#2313) Bumps `aws.sdk.version` from 2.38.7 to 2.39.3. Updates `software.amazon.awssdk:url-connection-client` from 2.38.7 to 2.39.3 Updates `software.amazon.awssdk:sdk-core` from 2.38.7 to 2.39.3 Updates `software.amazon.awssdk:s3` from 2.38.7 to 2.39.3 Updates `software.amazon.awssdk:kinesis` from 2.38.7 to 2.39.3 Updates `software.amazon.awssdk:sqs` from 2.38.7 to 2.39.3 Updates `software.amazon.awssdk:dynamodb-enhanced` from 2.38.7 to 2.39.3 --- updated-dependencies: - dependency-name: software.amazon.awssdk:url-connection-client dependency-version: 2.39.3 dependency-type: direct:development update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:sdk-core dependency-version: 2.39.3 dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:s3 dependency-version: 2.39.3 dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:kinesis dependency-version: 2.39.3 dependency-type: direct:development update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:sqs dependency-version: 2.39.3 dependency-type: direct:development update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:dynamodb-enhanced dependency-version: 2.39.3 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> --- examples/powertools-examples-batch/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/powertools-examples-batch/pom.xml b/examples/powertools-examples-batch/pom.xml index 6d941a31f..3a8e3ad8d 100644 --- a/examples/powertools-examples-batch/pom.xml +++ b/examples/powertools-examples-batch/pom.xml @@ -14,7 +14,7 @@ 11 11 1.9.20.1 - 2.38.7 + 2.39.3 From 314e56997a34273107ba4e13d5f1143a77d59600 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 16 Dec 2025 10:10:23 +0100 Subject: [PATCH 060/202] chore: bump com.google.protobuf:protobuf-java from 4.33.0 to 4.33.1 (#2314) Bumps [com.google.protobuf:protobuf-java](https://github.com/protocolbuffers/protobuf) from 4.33.0 to 4.33.1. - [Release notes](https://github.com/protocolbuffers/protobuf/releases) - [Changelog](https://github.com/protocolbuffers/protobuf/blob/main/protobuf_release.bzl) - [Commits](https://github.com/protocolbuffers/protobuf/commits) --- updated-dependencies: - dependency-name: com.google.protobuf:protobuf-java dependency-version: 4.33.1 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- examples/powertools-examples-kafka/pom.xml | 2 +- powertools-kafka/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/powertools-examples-kafka/pom.xml b/examples/powertools-examples-kafka/pom.xml index f4b75722c..1b8e8f09d 100644 --- a/examples/powertools-examples-kafka/pom.xml +++ b/examples/powertools-examples-kafka/pom.xml @@ -12,7 +12,7 @@ 11 1.9.20.1 1.12.1 - 4.33.0 + 4.33.1 diff --git a/powertools-kafka/pom.xml b/powertools-kafka/pom.xml index ad564897f..82f6b8021 100644 --- a/powertools-kafka/pom.xml +++ b/powertools-kafka/pom.xml @@ -36,7 +36,7 @@ 4.1.1 1.12.1 - 4.33.0 + 4.33.1 1.1.6 From ff8122d90e4ef686613207fd91daf036e317babc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 16 Dec 2025 10:10:33 +0100 Subject: [PATCH 061/202] chore: bump org.codehaus.mojo:versions-maven-plugin (#2315) Bumps [org.codehaus.mojo:versions-maven-plugin](https://github.com/mojohaus/versions) from 2.19.1 to 2.20.1. - [Release notes](https://github.com/mojohaus/versions/releases) - [Changelog](https://github.com/mojohaus/versions/blob/master/ReleaseNotes.md) - [Commits](https://github.com/mojohaus/versions/compare/2.19.1...2.20.1) --- updated-dependencies: - dependency-name: org.codehaus.mojo:versions-maven-plugin dependency-version: 2.20.1 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> Co-authored-by: Andrea Amorosi --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 6f6a9ce10..f400e0b26 100644 --- a/pom.xml +++ b/pom.xml @@ -111,7 +111,7 @@ 4.1.2 0.6.0 1.12.781 - 2.19.1 + 2.20.1 1.7.0 5.20.0 5.20.0 From 057f94e2e2028291b88331c135c16093cc58fc86 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 16 Dec 2025 10:10:44 +0100 Subject: [PATCH 062/202] chore: bump graalvm/setup-graalvm from 1.4.2 to 1.4.4 (#2322) Bumps [graalvm/setup-graalvm](https://github.com/graalvm/setup-graalvm) from 1.4.2 to 1.4.4. - [Release notes](https://github.com/graalvm/setup-graalvm/releases) - [Commits](https://github.com/graalvm/setup-graalvm/compare/eec48106e0bf45f2976c2ff0c3e22395cced8243...790e28947b79a9c09c3391c0f18bf8d0f102ed69) --- updated-dependencies: - dependency-name: graalvm/setup-graalvm dependency-version: 1.4.4 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/check-build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/check-build.yml b/.github/workflows/check-build.yml index a972084a6..f23968815 100644 --- a/.github/workflows/check-build.yml +++ b/.github/workflows/check-build.yml @@ -105,7 +105,7 @@ jobs: powertools-*/** pom.xml - name: Setup GraalVM - uses: graalvm/setup-graalvm@eec48106e0bf45f2976c2ff0c3e22395cced8243 # v1.4.2 + uses: graalvm/setup-graalvm@790e28947b79a9c09c3391c0f18bf8d0f102ed69 # v1.4.4 with: java-version: "21" distribution: "graalvm" From 9f4668a7d75285a529893abd28415b578a9aab5a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 16 Dec 2025 10:10:56 +0100 Subject: [PATCH 063/202] chore: bump actions/checkout from 6.0.0 to 6.0.1 (#2323) Bumps [actions/checkout](https://github.com/actions/checkout) from 6.0.0 to 6.0.1. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/1af3b93b6815bc44a9784bd300feb67ff0d1eeb3...8e8c483db84b4bee98b60c0593521ed34d9990e8) --- updated-dependencies: - dependency-name: actions/checkout dependency-version: 6.0.1 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/build-docs.yml | 2 +- .github/workflows/check-build.yml | 4 ++-- .github/workflows/check-e2e.yml | 4 ++-- .github/workflows/check-pmd.yml | 2 +- .github/workflows/check-spotbugs.yml | 2 +- .github/workflows/release.yml | 6 +++--- .github/workflows/security-dependencies-check.yml | 2 +- .github/workflows/security-scorecard.yml | 2 +- 8 files changed, 12 insertions(+), 12 deletions(-) diff --git a/.github/workflows/build-docs.yml b/.github/workflows/build-docs.yml index 417f21c48..a94ace711 100644 --- a/.github/workflows/build-docs.yml +++ b/.github/workflows/build-docs.yml @@ -32,7 +32,7 @@ jobs: environment: Docs steps: - name: Checkout Repository - uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 + uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 with: fetch-depth: 0 - name: Build diff --git a/.github/workflows/check-build.yml b/.github/workflows/check-build.yml index f23968815..108a32a11 100644 --- a/.github/workflows/check-build.yml +++ b/.github/workflows/check-build.yml @@ -77,7 +77,7 @@ jobs: steps: - id: checkout name: Checkout repository - uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 + uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 - name: Setup Java uses: actions/setup-java@dded0888837ed1f317902acf8a20df0ad188d165 with: @@ -94,7 +94,7 @@ jobs: steps: - id: checkout name: Checkout repository - uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 + uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 with: fetch-depth: 0 - name: Get changed files diff --git a/.github/workflows/check-e2e.yml b/.github/workflows/check-e2e.yml index 2ddb78ec0..8a527835d 100644 --- a/.github/workflows/check-e2e.yml +++ b/.github/workflows/check-e2e.yml @@ -57,7 +57,7 @@ jobs: - 25 steps: - - uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 - name: Setup java uses: actions/setup-java@dded0888837ed1f317902acf8a20df0ad188d165 # v5.0.0 with: @@ -88,7 +88,7 @@ jobs: - 25 steps: - - uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 - name: Setup java uses: actions/setup-java@dded0888837ed1f317902acf8a20df0ad188d165 # v5.0.0 with: diff --git a/.github/workflows/check-pmd.yml b/.github/workflows/check-pmd.yml index 66150821d..cab6c16a8 100644 --- a/.github/workflows/check-pmd.yml +++ b/.github/workflows/check-pmd.yml @@ -29,7 +29,7 @@ jobs: id-token: write steps: - name: Checkout Repository - uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 + uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 - name: Setup Java uses: actions/setup-java@dded0888837ed1f317902acf8a20df0ad188d165 # v5.0.0 with: diff --git a/.github/workflows/check-spotbugs.yml b/.github/workflows/check-spotbugs.yml index 8af0e4d9d..db4014aea 100644 --- a/.github/workflows/check-spotbugs.yml +++ b/.github/workflows/check-spotbugs.yml @@ -41,7 +41,7 @@ jobs: codecheck: runs-on: ubuntu-latest steps: - - uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 - name: Setup Java uses: actions/setup-java@dded0888837ed1f317902acf8a20df0ad188d165 # v5.0.0 with: diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 20ff19a69..a59cab7cb 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -103,7 +103,7 @@ jobs: steps: - id: checkout name: Checkout repository - uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 + uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 - id: version name: version uses: ./.github/actions/version @@ -224,7 +224,7 @@ jobs: steps: - id: checkout name: Checkout repository - uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 + uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 with: ref: ${{ env.RELEASE_COMMIT }} - id: download_source @@ -272,7 +272,7 @@ jobs: steps: - id: checkout name: Checkout repository - uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 + uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 with: # Checkout PR branch to make sure we build the version-bumped docs ref: ci-${{ github.run_id }} diff --git a/.github/workflows/security-dependencies-check.yml b/.github/workflows/security-dependencies-check.yml index 1e85d9e96..6729fd304 100644 --- a/.github/workflows/security-dependencies-check.yml +++ b/.github/workflows/security-dependencies-check.yml @@ -24,7 +24,7 @@ jobs: pull-requests: write steps: - name: Checkout Repository - uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 + uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 - name: Verify Contents uses: actions/dependency-review-action@3c4e3dcb1aa7874d2c16be7d79418e9b7efd6261 # v4.8.2 with: diff --git a/.github/workflows/security-scorecard.yml b/.github/workflows/security-scorecard.yml index 0944694f7..e15b0b5dc 100644 --- a/.github/workflows/security-scorecard.yml +++ b/.github/workflows/security-scorecard.yml @@ -35,7 +35,7 @@ jobs: id-token: write steps: - name: Checkout Repository - uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 + uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 with: persist-credentials: false - name: Run Analysis From 8fd60742bd06c695c9ab55f63701a38630a3d9fc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 16 Dec 2025 10:11:08 +0100 Subject: [PATCH 064/202] chore: bump sam/build-java25 (#2324) Bumps sam/build-java25 from `af599d0` to `b34fc78`. --- updated-dependencies: - dependency-name: sam/build-java25 dependency-version: b34fc789a70464f080232ee96590a6d0c7249eb59b1c33deccaae08a882cac23 dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- powertools-e2e-tests/src/test/resources/docker/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/powertools-e2e-tests/src/test/resources/docker/Dockerfile b/powertools-e2e-tests/src/test/resources/docker/Dockerfile index 6643760b4..fbefe46dd 100644 --- a/powertools-e2e-tests/src/test/resources/docker/Dockerfile +++ b/powertools-e2e-tests/src/test/resources/docker/Dockerfile @@ -1,5 +1,5 @@ # Use the official AWS SAM base image for Java 25 -FROM public.ecr.aws/sam/build-java25@sha256:af599d010afef63c83a04265dee9adbd4557d94b4a81941f28ae42657af7890d +FROM public.ecr.aws/sam/build-java25@sha256:b34fc789a70464f080232ee96590a6d0c7249eb59b1c33deccaae08a882cac23 # Install GraalVM dependencies RUN curl -4 -L https://download.oracle.com/graalvm/25/latest/graalvm-jdk-25_linux-x64_bin.tar.gz | tar -xvz From 8d5a364e795cfa28c9911fd89d8d8283c029a308 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 16 Dec 2025 10:11:21 +0100 Subject: [PATCH 065/202] chore: bump actions/setup-java from 5.0.0 to 5.1.0 (#2325) Bumps [actions/setup-java](https://github.com/actions/setup-java) from 5.0.0 to 5.1.0. - [Release notes](https://github.com/actions/setup-java/releases) - [Commits](https://github.com/actions/setup-java/compare/dded0888837ed1f317902acf8a20df0ad188d165...f2beeb24e141e01a676f977032f5a29d81c9e27e) --- updated-dependencies: - dependency-name: actions/setup-java dependency-version: 5.1.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> --- .github/workflows/check-build.yml | 2 +- .github/workflows/check-e2e.yml | 4 ++-- .github/workflows/check-pmd.yml | 2 +- .github/workflows/check-spotbugs.yml | 2 +- .github/workflows/release.yml | 6 +++--- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/check-build.yml b/.github/workflows/check-build.yml index 108a32a11..cdfd5aea5 100644 --- a/.github/workflows/check-build.yml +++ b/.github/workflows/check-build.yml @@ -79,7 +79,7 @@ jobs: name: Checkout repository uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 - name: Setup Java - uses: actions/setup-java@dded0888837ed1f317902acf8a20df0ad188d165 + uses: actions/setup-java@f2beeb24e141e01a676f977032f5a29d81c9e27e with: distribution: corretto java-version: ${{ matrix.java }} diff --git a/.github/workflows/check-e2e.yml b/.github/workflows/check-e2e.yml index 8a527835d..378d48a60 100644 --- a/.github/workflows/check-e2e.yml +++ b/.github/workflows/check-e2e.yml @@ -59,7 +59,7 @@ jobs: steps: - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 - name: Setup java - uses: actions/setup-java@dded0888837ed1f317902acf8a20df0ad188d165 # v5.0.0 + uses: actions/setup-java@f2beeb24e141e01a676f977032f5a29d81c9e27e # v5.1.0 with: distribution: 'corretto' java-version: ${{ matrix.java }} @@ -90,7 +90,7 @@ jobs: steps: - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 - name: Setup java - uses: actions/setup-java@dded0888837ed1f317902acf8a20df0ad188d165 # v5.0.0 + uses: actions/setup-java@f2beeb24e141e01a676f977032f5a29d81c9e27e # v5.1.0 with: distribution: 'corretto' java-version: ${{ matrix.java }} diff --git a/.github/workflows/check-pmd.yml b/.github/workflows/check-pmd.yml index cab6c16a8..7e7dce429 100644 --- a/.github/workflows/check-pmd.yml +++ b/.github/workflows/check-pmd.yml @@ -31,7 +31,7 @@ jobs: - name: Checkout Repository uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 - name: Setup Java - uses: actions/setup-java@dded0888837ed1f317902acf8a20df0ad188d165 # v5.0.0 + uses: actions/setup-java@f2beeb24e141e01a676f977032f5a29d81c9e27e # v5.1.0 with: java-version: 21 distribution: corretto diff --git a/.github/workflows/check-spotbugs.yml b/.github/workflows/check-spotbugs.yml index db4014aea..c5c8197f9 100644 --- a/.github/workflows/check-spotbugs.yml +++ b/.github/workflows/check-spotbugs.yml @@ -43,7 +43,7 @@ jobs: steps: - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 - name: Setup Java - uses: actions/setup-java@dded0888837ed1f317902acf8a20df0ad188d165 # v5.0.0 + uses: actions/setup-java@f2beeb24e141e01a676f977032f5a29d81c9e27e # v5.1.0 with: distribution: 'corretto' java-version: 21 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index a59cab7cb..c9b2d80c6 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -137,7 +137,7 @@ jobs: with: name: source - name: Setup Java - uses: actions/setup-java@dded0888837ed1f317902acf8a20df0ad188d165 + uses: actions/setup-java@f2beeb24e141e01a676f977032f5a29d81c9e27e with: distribution: corretto java-version: 21 @@ -172,7 +172,7 @@ jobs: with: name: source - name: Setup Java - uses: actions/setup-java@dded0888837ed1f317902acf8a20df0ad188d165 + uses: actions/setup-java@f2beeb24e141e01a676f977032f5a29d81c9e27e with: distribution: corretto java-version: ${{ matrix.java }} @@ -195,7 +195,7 @@ jobs: with: name: source - name: Setup Java - uses: actions/setup-java@dded0888837ed1f317902acf8a20df0ad188d165 + uses: actions/setup-java@f2beeb24e141e01a676f977032f5a29d81c9e27e with: distribution: corretto java-version: 21 From a94274eba5ca1bf04432910db7776e551f236799 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 16 Dec 2025 10:11:32 +0100 Subject: [PATCH 066/202] chore: bump tj-actions/changed-files from 47.0.0 to 47.0.1 (#2330) Bumps [tj-actions/changed-files](https://github.com/tj-actions/changed-files) from 47.0.0 to 47.0.1. - [Release notes](https://github.com/tj-actions/changed-files/releases) - [Changelog](https://github.com/tj-actions/changed-files/blob/main/HISTORY.md) - [Commits](https://github.com/tj-actions/changed-files/compare/24d32ffd492484c1d75e0c0b894501ddb9d30d62...e0021407031f5be11a464abee9a0776171c79891) --- updated-dependencies: - dependency-name: tj-actions/changed-files dependency-version: 47.0.1 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/check-build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/check-build.yml b/.github/workflows/check-build.yml index cdfd5aea5..339d6fab8 100644 --- a/.github/workflows/check-build.yml +++ b/.github/workflows/check-build.yml @@ -99,7 +99,7 @@ jobs: fetch-depth: 0 - name: Get changed files id: changed-files - uses: tj-actions/changed-files@24d32ffd492484c1d75e0c0b894501ddb9d30d62 # v47.0.0 + uses: tj-actions/changed-files@e0021407031f5be11a464abee9a0776171c79891 # v47.0.1 with: files: | powertools-*/** From ff3e3e6a3470199773715e51626f60d99338598a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 16 Dec 2025 10:11:42 +0100 Subject: [PATCH 067/202] chore: bump github/codeql-action from 4.31.5 to 4.31.8 (#2331) Bumps [github/codeql-action](https://github.com/github/codeql-action) from 4.31.5 to 4.31.8. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/fdbfb4d2750291e159f0156def62b853c2798ca2...1b168cd39490f61582a9beae412bb7057a6b2c4e) --- updated-dependencies: - dependency-name: github/codeql-action dependency-version: 4.31.8 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/security-scorecard.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/security-scorecard.yml b/.github/workflows/security-scorecard.yml index e15b0b5dc..7f3286dfe 100644 --- a/.github/workflows/security-scorecard.yml +++ b/.github/workflows/security-scorecard.yml @@ -52,6 +52,6 @@ jobs: path: results.sarif retention-days: 5 - name: Upload to Code-Scanning - uses: github/codeql-action/upload-sarif@fdbfb4d2750291e159f0156def62b853c2798ca2 # v3.29.5 + uses: github/codeql-action/upload-sarif@1b168cd39490f61582a9beae412bb7057a6b2c4e # v3.29.5 with: sarif_file: results.sarif From 42567838f53a764516f12126fe76d3bb289fb09a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 16 Dec 2025 11:34:12 +0100 Subject: [PATCH 068/202] chore(ci): bump version to 2.9.0 (#2332) * chore(ci): bump version to 2.9.0 * Restore CHANGELOG.md from main. --------- Co-authored-by: Powertools for AWS Lambda (Java) Bot <151832416+aws-powertools-bot@users.noreply.github.com> Co-authored-by: Philipp Page --- README.md | 6 +++--- examples/pom.xml | 2 +- examples/powertools-examples-batch/pom.xml | 2 +- examples/powertools-examples-cloudformation/README.md | 4 ++-- .../infra/sam-graalvm/README.md | 2 +- examples/powertools-examples-cloudformation/pom.xml | 2 +- examples/powertools-examples-core-utilities/cdk/app/pom.xml | 2 +- .../powertools-examples-core-utilities/cdk/infra/pom.xml | 2 +- .../powertools-examples-core-utilities/gradle/build.gradle | 6 +++--- .../kotlin/build.gradle.kts | 6 +++--- .../powertools-examples-core-utilities/sam-graalvm/pom.xml | 2 +- examples/powertools-examples-core-utilities/sam/pom.xml | 2 +- .../powertools-examples-core-utilities/serverless/pom.xml | 2 +- .../powertools-examples-core-utilities/terraform/pom.xml | 2 +- .../powertools-examples-idempotency/sam-graalvm/pom.xml | 2 +- examples/powertools-examples-idempotency/sam/pom.xml | 2 +- examples/powertools-examples-kafka/pom.xml | 2 +- .../main/java/org/demo/kafka/protobuf/ProtobufProduct.java | 4 ++-- .../org/demo/kafka/protobuf/ProtobufProductOrBuilder.java | 2 +- .../org/demo/kafka/protobuf/ProtobufProductOuterClass.java | 4 ++-- examples/powertools-examples-parameters/sam-graalvm/pom.xml | 2 +- examples/powertools-examples-parameters/sam/pom.xml | 2 +- .../powertools-examples-serialization/sam-graalvm/pom.xml | 2 +- examples/powertools-examples-serialization/sam/pom.xml | 2 +- examples/powertools-examples-validation/pom.xml | 2 +- mkdocs.yml | 2 +- pom.xml | 2 +- powertools-batch/pom.xml | 2 +- powertools-cloudformation/pom.xml | 2 +- powertools-common/pom.xml | 2 +- powertools-e2e-tests/handlers/batch/pom.xml | 2 +- .../handlers/idempotency-functional/pom.xml | 2 +- powertools-e2e-tests/handlers/idempotency-generics/pom.xml | 2 +- powertools-e2e-tests/handlers/idempotency/pom.xml | 2 +- .../handlers/largemessage-functional/pom.xml | 2 +- powertools-e2e-tests/handlers/largemessage/pom.xml | 2 +- .../handlers/largemessage_idempotent/pom.xml | 2 +- powertools-e2e-tests/handlers/logging-functional/pom.xml | 2 +- powertools-e2e-tests/handlers/logging-log4j/pom.xml | 2 +- powertools-e2e-tests/handlers/logging-logback/pom.xml | 2 +- powertools-e2e-tests/handlers/metrics/pom.xml | 2 +- powertools-e2e-tests/handlers/parameters/pom.xml | 2 +- powertools-e2e-tests/handlers/pom.xml | 2 +- powertools-e2e-tests/handlers/tracing/pom.xml | 2 +- powertools-e2e-tests/handlers/validation-alb-event/pom.xml | 2 +- .../handlers/validation-apigw-event/pom.xml | 2 +- powertools-e2e-tests/pom.xml | 2 +- powertools-idempotency/pom.xml | 2 +- powertools-idempotency/powertools-idempotency-core/pom.xml | 2 +- .../powertools-idempotency-dynamodb/pom.xml | 2 +- powertools-kafka/pom.xml | 2 +- powertools-large-messages/pom.xml | 2 +- powertools-logging/pom.xml | 2 +- powertools-logging/powertools-logging-log4j/pom.xml | 2 +- powertools-logging/powertools-logging-logback/pom.xml | 2 +- powertools-metrics/pom.xml | 2 +- powertools-parameters/pom.xml | 2 +- .../powertools-parameters-appconfig/pom.xml | 2 +- .../powertools-parameters-dynamodb/pom.xml | 2 +- powertools-parameters/powertools-parameters-secrets/pom.xml | 2 +- powertools-parameters/powertools-parameters-ssm/pom.xml | 2 +- powertools-parameters/powertools-parameters-tests/pom.xml | 2 +- powertools-serialization/pom.xml | 2 +- powertools-tracing/pom.xml | 2 +- powertools-validation/pom.xml | 2 +- 65 files changed, 74 insertions(+), 74 deletions(-) diff --git a/README.md b/README.md index 2644c47ab..4c02e2d1f 100644 --- a/README.md +++ b/README.md @@ -22,17 +22,17 @@ Powertools for AWS Lambda (Java) is available in Maven Central. You can use your software.amazon.lambda powertools-tracing - 2.8.0 + 2.9.0 software.amazon.lambda powertools-logging-log4j - 2.8.0 + 2.9.0 software.amazon.lambda powertools-metrics - 2.8.0 + 2.9.0 ... diff --git a/examples/pom.xml b/examples/pom.xml index 511cdd5a9..5d191063f 100644 --- a/examples/pom.xml +++ b/examples/pom.xml @@ -20,7 +20,7 @@ software.amazon.lambda powertools-examples - 2.8.0 + 2.9.0 pom Powertools for AWS Lambda (Java) - Examples diff --git a/examples/powertools-examples-batch/pom.xml b/examples/powertools-examples-batch/pom.xml index 3a8e3ad8d..0091fb5ca 100644 --- a/examples/powertools-examples-batch/pom.xml +++ b/examples/powertools-examples-batch/pom.xml @@ -5,7 +5,7 @@ 4.0.0 software.amazon.lambda.examples - 2.8.0 + 2.9.0 powertools-examples-batch jar Powertools for AWS Lambda (Java) - Examples - Batch diff --git a/examples/powertools-examples-cloudformation/README.md b/examples/powertools-examples-cloudformation/README.md index b9e58eb82..27e564bf3 100644 --- a/examples/powertools-examples-cloudformation/README.md +++ b/examples/powertools-examples-cloudformation/README.md @@ -15,7 +15,7 @@ Run the following in your shell: ```bash cd infra/sam sam build -sam deploy --guided --parameter-overrides BucketNameParam=my-unique-bucket-2.8.0718 +sam deploy --guided --parameter-overrides BucketNameParam=my-unique-bucket-2.9.0718 ``` ### Deploy with CDK @@ -32,5 +32,5 @@ To build and deploy this application for the first time, run the following in yo cd infra/cdk mvn package cdk synth -cdk deploy -c BucketNameParam=my-unique-bucket-2.8.0718 +cdk deploy -c BucketNameParam=my-unique-bucket-2.9.0718 ``` \ No newline at end of file diff --git a/examples/powertools-examples-cloudformation/infra/sam-graalvm/README.md b/examples/powertools-examples-cloudformation/infra/sam-graalvm/README.md index c2a9e2ffd..3aca1408a 100644 --- a/examples/powertools-examples-cloudformation/infra/sam-graalvm/README.md +++ b/examples/powertools-examples-cloudformation/infra/sam-graalvm/README.md @@ -40,7 +40,7 @@ sam build ## Deploy the sample application ```shell -sam deploy --guided --parameter-overrides BucketNameParam=my-unique-bucket-2.8.0718 +sam deploy --guided --parameter-overrides BucketNameParam=my-unique-bucket-2.9.0718 ``` This sample is based on Serverless Application Model (SAM). To deploy it, check out the instructions for getting started with SAM in [the examples directory](../../../README.md) diff --git a/examples/powertools-examples-cloudformation/pom.xml b/examples/powertools-examples-cloudformation/pom.xml index 09adbfa18..8581a6ceb 100644 --- a/examples/powertools-examples-cloudformation/pom.xml +++ b/examples/powertools-examples-cloudformation/pom.xml @@ -3,7 +3,7 @@ 4.0.0 software.amazon.lambda.examples - 2.8.0 + 2.9.0 powertools-examples-cloudformation jar diff --git a/examples/powertools-examples-core-utilities/cdk/app/pom.xml b/examples/powertools-examples-core-utilities/cdk/app/pom.xml index 29acef5e2..28be679a5 100644 --- a/examples/powertools-examples-core-utilities/cdk/app/pom.xml +++ b/examples/powertools-examples-core-utilities/cdk/app/pom.xml @@ -6,7 +6,7 @@ software.amazon.lambda.examples - 2.8.0 + 2.9.0 powertools-examples-core-utilities-cdk jar diff --git a/examples/powertools-examples-core-utilities/cdk/infra/pom.xml b/examples/powertools-examples-core-utilities/cdk/infra/pom.xml index 7daf3153f..e3ceb7e65 100644 --- a/examples/powertools-examples-core-utilities/cdk/infra/pom.xml +++ b/examples/powertools-examples-core-utilities/cdk/infra/pom.xml @@ -4,7 +4,7 @@ 4.0.0 software.amazon.lambda.examples cdk - 2.8.0 + 2.9.0 UTF-8 2.224.0 diff --git a/examples/powertools-examples-core-utilities/gradle/build.gradle b/examples/powertools-examples-core-utilities/gradle/build.gradle index 6841d20ab..b01fdcfaa 100644 --- a/examples/powertools-examples-core-utilities/gradle/build.gradle +++ b/examples/powertools-examples-core-utilities/gradle/build.gradle @@ -29,8 +29,8 @@ dependencies { implementation 'com.amazonaws:aws-lambda-java-events:3.16.0' implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.13.2' implementation 'org.aspectj:aspectjrt:1.9.20.1' - aspect 'software.amazon.lambda:powertools-tracing:2.8.0' - aspect 'software.amazon.lambda:powertools-logging-log4j:2.8.0' - aspect 'software.amazon.lambda:powertools-metrics:2.8.0' + aspect 'software.amazon.lambda:powertools-tracing:2.9.0' + aspect 'software.amazon.lambda:powertools-logging-log4j:2.9.0' + aspect 'software.amazon.lambda:powertools-metrics:2.9.0' } diff --git a/examples/powertools-examples-core-utilities/kotlin/build.gradle.kts b/examples/powertools-examples-core-utilities/kotlin/build.gradle.kts index bc11eb32e..3dae5015e 100644 --- a/examples/powertools-examples-core-utilities/kotlin/build.gradle.kts +++ b/examples/powertools-examples-core-utilities/kotlin/build.gradle.kts @@ -15,9 +15,9 @@ dependencies { implementation("com.amazonaws:aws-lambda-java-events:3.16.0") implementation("com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.15.2") implementation("org.aspectj:aspectjrt:1.9.20.1") - aspect("software.amazon.lambda:powertools-tracing:2.8.0") - aspect("software.amazon.lambda:powertools-logging-log4j:2.8.0") - aspect("software.amazon.lambda:powertools-metrics:2.8.0") + aspect("software.amazon.lambda:powertools-tracing:2.9.0") + aspect("software.amazon.lambda:powertools-logging-log4j:2.9.0") + aspect("software.amazon.lambda:powertools-metrics:2.9.0") implementation("org.jetbrains.kotlin:kotlin-stdlib:1.9.24") } diff --git a/examples/powertools-examples-core-utilities/sam-graalvm/pom.xml b/examples/powertools-examples-core-utilities/sam-graalvm/pom.xml index fceb4a322..e7a3f202d 100644 --- a/examples/powertools-examples-core-utilities/sam-graalvm/pom.xml +++ b/examples/powertools-examples-core-utilities/sam-graalvm/pom.xml @@ -4,7 +4,7 @@ Powertools for AWS Lambda (Java) - Examples - Core Utilities (logging, tracing, metrics) with SAM GraalVM software.amazon.lambda.examples - 2.8.0 + 2.9.0 powertools-examples-core-utilities-sam-graalvm jar diff --git a/examples/powertools-examples-core-utilities/sam/pom.xml b/examples/powertools-examples-core-utilities/sam/pom.xml index b8606a227..2d6a00161 100644 --- a/examples/powertools-examples-core-utilities/sam/pom.xml +++ b/examples/powertools-examples-core-utilities/sam/pom.xml @@ -4,7 +4,7 @@ Powertools for AWS Lambda (Java) - Examples - Core Utilities (logging, tracing, metrics) with SAM software.amazon.lambda.examples - 2.8.0 + 2.9.0 powertools-examples-core-utilities-sam jar diff --git a/examples/powertools-examples-core-utilities/serverless/pom.xml b/examples/powertools-examples-core-utilities/serverless/pom.xml index d77b0ccd6..26e647dad 100644 --- a/examples/powertools-examples-core-utilities/serverless/pom.xml +++ b/examples/powertools-examples-core-utilities/serverless/pom.xml @@ -4,7 +4,7 @@ Powertools for AWS Lambda (Java) - Examples - Core Utilities (logging, tracing, metrics) with Serverless software.amazon.lambda.examples - 2.8.0 + 2.9.0 powertools-examples-core-utilities-serverless jar diff --git a/examples/powertools-examples-core-utilities/terraform/pom.xml b/examples/powertools-examples-core-utilities/terraform/pom.xml index a6237b00f..4de1e415c 100644 --- a/examples/powertools-examples-core-utilities/terraform/pom.xml +++ b/examples/powertools-examples-core-utilities/terraform/pom.xml @@ -4,7 +4,7 @@ Powertools for AWS Lambda (Java) - Examples - Core Utilities (logging, tracing, metrics) with Terraform software.amazon.lambda.examples - 2.8.0 + 2.9.0 powertools-examples-core-utilities-terraform jar diff --git a/examples/powertools-examples-idempotency/sam-graalvm/pom.xml b/examples/powertools-examples-idempotency/sam-graalvm/pom.xml index d1c0205ff..0536951aa 100644 --- a/examples/powertools-examples-idempotency/sam-graalvm/pom.xml +++ b/examples/powertools-examples-idempotency/sam-graalvm/pom.xml @@ -2,7 +2,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 4.0.0 software.amazon.lambda.examples - 2.8.0 + 2.9.0 powertools-examples-idempotency-sam-graalvm jar Powertools for AWS Lambda (Java) - Examples - Idempotency GraalVM diff --git a/examples/powertools-examples-idempotency/sam/pom.xml b/examples/powertools-examples-idempotency/sam/pom.xml index b90705c67..22d6a9c81 100644 --- a/examples/powertools-examples-idempotency/sam/pom.xml +++ b/examples/powertools-examples-idempotency/sam/pom.xml @@ -17,7 +17,7 @@ 4.0.0 software.amazon.lambda.examples - 2.8.0 + 2.9.0 powertools-examples-idempotency jar Powertools for AWS Lambda (Java) - Examples - Idempotency diff --git a/examples/powertools-examples-kafka/pom.xml b/examples/powertools-examples-kafka/pom.xml index 1b8e8f09d..d152f46c0 100644 --- a/examples/powertools-examples-kafka/pom.xml +++ b/examples/powertools-examples-kafka/pom.xml @@ -2,7 +2,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 4.0.0 software.amazon.lambda.examples - 2.8.0 + 2.9.0 powertools-examples-kafka jar Powertools for AWS Lambda (Java) - Examples - Kafka diff --git a/examples/powertools-examples-kafka/src/main/java/org/demo/kafka/protobuf/ProtobufProduct.java b/examples/powertools-examples-kafka/src/main/java/org/demo/kafka/protobuf/ProtobufProduct.java index 13d8905f2..2bf5db844 100644 --- a/examples/powertools-examples-kafka/src/main/java/org/demo/kafka/protobuf/ProtobufProduct.java +++ b/examples/powertools-examples-kafka/src/main/java/org/demo/kafka/protobuf/ProtobufProduct.java @@ -1,7 +1,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // NO CHECKED-IN PROTOBUF GENCODE // source: ProtobufProduct.proto -// Protobuf Java Version: 4.33.0 +// Protobuf Java Version: 4.33.1 package org.demo.kafka.protobuf; @@ -19,7 +19,7 @@ public final class ProtobufProduct extends com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, /* major= */ 4, /* minor= */ 33, - /* patch= */ 0, + /* patch= */ 1, /* suffix= */ "", "ProtobufProduct"); } diff --git a/examples/powertools-examples-kafka/src/main/java/org/demo/kafka/protobuf/ProtobufProductOrBuilder.java b/examples/powertools-examples-kafka/src/main/java/org/demo/kafka/protobuf/ProtobufProductOrBuilder.java index ae7cb2182..caf17ad50 100644 --- a/examples/powertools-examples-kafka/src/main/java/org/demo/kafka/protobuf/ProtobufProductOrBuilder.java +++ b/examples/powertools-examples-kafka/src/main/java/org/demo/kafka/protobuf/ProtobufProductOrBuilder.java @@ -1,7 +1,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // NO CHECKED-IN PROTOBUF GENCODE // source: ProtobufProduct.proto -// Protobuf Java Version: 4.33.0 +// Protobuf Java Version: 4.33.1 package org.demo.kafka.protobuf; diff --git a/examples/powertools-examples-kafka/src/main/java/org/demo/kafka/protobuf/ProtobufProductOuterClass.java b/examples/powertools-examples-kafka/src/main/java/org/demo/kafka/protobuf/ProtobufProductOuterClass.java index 4fcac7bd7..ce3214777 100644 --- a/examples/powertools-examples-kafka/src/main/java/org/demo/kafka/protobuf/ProtobufProductOuterClass.java +++ b/examples/powertools-examples-kafka/src/main/java/org/demo/kafka/protobuf/ProtobufProductOuterClass.java @@ -1,7 +1,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // NO CHECKED-IN PROTOBUF GENCODE // source: ProtobufProduct.proto -// Protobuf Java Version: 4.33.0 +// Protobuf Java Version: 4.33.1 package org.demo.kafka.protobuf; @@ -13,7 +13,7 @@ private ProtobufProductOuterClass() {} com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, /* major= */ 4, /* minor= */ 33, - /* patch= */ 0, + /* patch= */ 1, /* suffix= */ "", "ProtobufProductOuterClass"); } diff --git a/examples/powertools-examples-parameters/sam-graalvm/pom.xml b/examples/powertools-examples-parameters/sam-graalvm/pom.xml index 09401eeff..7fc652bca 100644 --- a/examples/powertools-examples-parameters/sam-graalvm/pom.xml +++ b/examples/powertools-examples-parameters/sam-graalvm/pom.xml @@ -2,7 +2,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 4.0.0 software.amazon.lambda.examples - 2.8.0 + 2.9.0 powertools-examples-parameters-sam-graalvm jar Powertools for AWS Lambda (Java) - Examples - Parameters GraalVM diff --git a/examples/powertools-examples-parameters/sam/pom.xml b/examples/powertools-examples-parameters/sam/pom.xml index 3e8f99aa0..d2c3e68d2 100644 --- a/examples/powertools-examples-parameters/sam/pom.xml +++ b/examples/powertools-examples-parameters/sam/pom.xml @@ -2,7 +2,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 4.0.0 software.amazon.lambda.examples - 2.8.0 + 2.9.0 powertools-examples-parameters-sam jar Powertools for AWS Lambda (Java) - Examples - Parameters diff --git a/examples/powertools-examples-serialization/sam-graalvm/pom.xml b/examples/powertools-examples-serialization/sam-graalvm/pom.xml index 44661fb71..5077c8989 100644 --- a/examples/powertools-examples-serialization/sam-graalvm/pom.xml +++ b/examples/powertools-examples-serialization/sam-graalvm/pom.xml @@ -2,7 +2,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 4.0.0 software.amazon.lambda.examples - 2.8.0 + 2.9.0 powertools-examples-serialization-sam-graalvm jar Powertools for AWS Lambda (Java) - Examples - Serialization GraalVM diff --git a/examples/powertools-examples-serialization/sam/pom.xml b/examples/powertools-examples-serialization/sam/pom.xml index 93c60a2cb..cf66c3e14 100644 --- a/examples/powertools-examples-serialization/sam/pom.xml +++ b/examples/powertools-examples-serialization/sam/pom.xml @@ -2,7 +2,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 4.0.0 software.amazon.lambda.examples - 2.8.0 + 2.9.0 powertools-examples-serialization-sam jar Powertools for AWS Lambda (Java) - Examples - Serialization diff --git a/examples/powertools-examples-validation/pom.xml b/examples/powertools-examples-validation/pom.xml index 1337bc2ee..2fa8462a5 100644 --- a/examples/powertools-examples-validation/pom.xml +++ b/examples/powertools-examples-validation/pom.xml @@ -16,7 +16,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 4.0.0 software.amazon.lambda.examples - 2.8.0 + 2.9.0 powertools-examples-validation jar Powertools for AWS Lambda (Java) - Examples - Validation diff --git a/mkdocs.yml b/mkdocs.yml index 5f35b96c0..b52b88cca 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -129,7 +129,7 @@ extra_javascript: extra: powertools: - version: 2.8.0 + version: 2.9.0 version: provider: mike default: latest diff --git a/pom.xml b/pom.xml index f400e0b26..b300e911d 100644 --- a/pom.xml +++ b/pom.xml @@ -20,7 +20,7 @@ software.amazon.lambda powertools-parent - 2.8.0 + 2.9.0 pom Powertools for AWS Lambda (Java) - Parent diff --git a/powertools-batch/pom.xml b/powertools-batch/pom.xml index 07d11d41c..37cfdf7b2 100644 --- a/powertools-batch/pom.xml +++ b/powertools-batch/pom.xml @@ -6,7 +6,7 @@ software.amazon.lambda powertools-parent - 2.8.0 + 2.9.0 A suite of utilities that makes batch message processing using AWS Lambda easier. diff --git a/powertools-cloudformation/pom.xml b/powertools-cloudformation/pom.xml index 09e3299fd..cb06dc1f3 100644 --- a/powertools-cloudformation/pom.xml +++ b/powertools-cloudformation/pom.xml @@ -24,7 +24,7 @@ powertools-parent software.amazon.lambda - 2.8.0 + 2.9.0 Powertools for AWS Lambda (Java) - Cloudformation diff --git a/powertools-common/pom.xml b/powertools-common/pom.xml index 551fae8bc..75ef10beb 100644 --- a/powertools-common/pom.xml +++ b/powertools-common/pom.xml @@ -24,7 +24,7 @@ powertools-parent software.amazon.lambda - 2.8.0 + 2.9.0 Powertools for AWS Lambda (Java) - Common Internal Utilities diff --git a/powertools-e2e-tests/handlers/batch/pom.xml b/powertools-e2e-tests/handlers/batch/pom.xml index f8e0a037f..3e89aadd2 100644 --- a/powertools-e2e-tests/handlers/batch/pom.xml +++ b/powertools-e2e-tests/handlers/batch/pom.xml @@ -5,7 +5,7 @@ software.amazon.lambda e2e-test-handlers-parent - 2.8.0 + 2.9.0 e2e-test-handler-batch diff --git a/powertools-e2e-tests/handlers/idempotency-functional/pom.xml b/powertools-e2e-tests/handlers/idempotency-functional/pom.xml index 2b53dc275..b5669b21f 100644 --- a/powertools-e2e-tests/handlers/idempotency-functional/pom.xml +++ b/powertools-e2e-tests/handlers/idempotency-functional/pom.xml @@ -5,7 +5,7 @@ software.amazon.lambda e2e-test-handlers-parent - 2.8.0 + 2.9.0 e2e-test-handler-idempotency-functional diff --git a/powertools-e2e-tests/handlers/idempotency-generics/pom.xml b/powertools-e2e-tests/handlers/idempotency-generics/pom.xml index 76e65edb1..21a658e6c 100644 --- a/powertools-e2e-tests/handlers/idempotency-generics/pom.xml +++ b/powertools-e2e-tests/handlers/idempotency-generics/pom.xml @@ -5,7 +5,7 @@ software.amazon.lambda e2e-test-handlers-parent - 2.8.0 + 2.9.0 e2e-test-handler-idempotency-generics diff --git a/powertools-e2e-tests/handlers/idempotency/pom.xml b/powertools-e2e-tests/handlers/idempotency/pom.xml index 36181ea01..921599bdb 100644 --- a/powertools-e2e-tests/handlers/idempotency/pom.xml +++ b/powertools-e2e-tests/handlers/idempotency/pom.xml @@ -5,7 +5,7 @@ software.amazon.lambda e2e-test-handlers-parent - 2.8.0 + 2.9.0 e2e-test-handler-idempotency diff --git a/powertools-e2e-tests/handlers/largemessage-functional/pom.xml b/powertools-e2e-tests/handlers/largemessage-functional/pom.xml index d29017074..ddfe39a5e 100644 --- a/powertools-e2e-tests/handlers/largemessage-functional/pom.xml +++ b/powertools-e2e-tests/handlers/largemessage-functional/pom.xml @@ -5,7 +5,7 @@ software.amazon.lambda e2e-test-handlers-parent - 2.8.0 + 2.9.0 e2e-test-handler-largemessage-functional diff --git a/powertools-e2e-tests/handlers/largemessage/pom.xml b/powertools-e2e-tests/handlers/largemessage/pom.xml index 53b1e7c10..bee253988 100644 --- a/powertools-e2e-tests/handlers/largemessage/pom.xml +++ b/powertools-e2e-tests/handlers/largemessage/pom.xml @@ -5,7 +5,7 @@ software.amazon.lambda e2e-test-handlers-parent - 2.8.0 + 2.9.0 e2e-test-handler-largemessage diff --git a/powertools-e2e-tests/handlers/largemessage_idempotent/pom.xml b/powertools-e2e-tests/handlers/largemessage_idempotent/pom.xml index 9f6f23389..5ef7e1963 100644 --- a/powertools-e2e-tests/handlers/largemessage_idempotent/pom.xml +++ b/powertools-e2e-tests/handlers/largemessage_idempotent/pom.xml @@ -5,7 +5,7 @@ software.amazon.lambda e2e-test-handlers-parent - 2.8.0 + 2.9.0 e2e-test-handler-large-msg-idempotent diff --git a/powertools-e2e-tests/handlers/logging-functional/pom.xml b/powertools-e2e-tests/handlers/logging-functional/pom.xml index 4616af233..4ec6e5008 100644 --- a/powertools-e2e-tests/handlers/logging-functional/pom.xml +++ b/powertools-e2e-tests/handlers/logging-functional/pom.xml @@ -5,7 +5,7 @@ software.amazon.lambda e2e-test-handlers-parent - 2.8.0 + 2.9.0 e2e-test-handler-logging-functional diff --git a/powertools-e2e-tests/handlers/logging-log4j/pom.xml b/powertools-e2e-tests/handlers/logging-log4j/pom.xml index bba711163..022f029e6 100644 --- a/powertools-e2e-tests/handlers/logging-log4j/pom.xml +++ b/powertools-e2e-tests/handlers/logging-log4j/pom.xml @@ -5,7 +5,7 @@ software.amazon.lambda e2e-test-handlers-parent - 2.8.0 + 2.9.0 e2e-test-handler-logging-log4j diff --git a/powertools-e2e-tests/handlers/logging-logback/pom.xml b/powertools-e2e-tests/handlers/logging-logback/pom.xml index bd442fe88..f8458db25 100644 --- a/powertools-e2e-tests/handlers/logging-logback/pom.xml +++ b/powertools-e2e-tests/handlers/logging-logback/pom.xml @@ -5,7 +5,7 @@ software.amazon.lambda e2e-test-handlers-parent - 2.8.0 + 2.9.0 e2e-test-handler-logging-logback diff --git a/powertools-e2e-tests/handlers/metrics/pom.xml b/powertools-e2e-tests/handlers/metrics/pom.xml index 90704c6d9..ddc6ae1bd 100644 --- a/powertools-e2e-tests/handlers/metrics/pom.xml +++ b/powertools-e2e-tests/handlers/metrics/pom.xml @@ -5,7 +5,7 @@ software.amazon.lambda e2e-test-handlers-parent - 2.8.0 + 2.9.0 e2e-test-handler-metrics diff --git a/powertools-e2e-tests/handlers/parameters/pom.xml b/powertools-e2e-tests/handlers/parameters/pom.xml index 670eeb9c0..fb2deb2aa 100644 --- a/powertools-e2e-tests/handlers/parameters/pom.xml +++ b/powertools-e2e-tests/handlers/parameters/pom.xml @@ -5,7 +5,7 @@ software.amazon.lambda e2e-test-handlers-parent - 2.8.0 + 2.9.0 e2e-test-handler-parameters diff --git a/powertools-e2e-tests/handlers/pom.xml b/powertools-e2e-tests/handlers/pom.xml index a9d3c3ab5..54f07d681 100644 --- a/powertools-e2e-tests/handlers/pom.xml +++ b/powertools-e2e-tests/handlers/pom.xml @@ -4,7 +4,7 @@ software.amazon.lambda e2e-test-handlers-parent - 2.8.0 + 2.9.0 pom Handlers for End-to-End tests Fake handlers that use Powertools for AWS Lambda (Java). diff --git a/powertools-e2e-tests/handlers/tracing/pom.xml b/powertools-e2e-tests/handlers/tracing/pom.xml index 89891df8c..9874ce986 100644 --- a/powertools-e2e-tests/handlers/tracing/pom.xml +++ b/powertools-e2e-tests/handlers/tracing/pom.xml @@ -5,7 +5,7 @@ software.amazon.lambda e2e-test-handlers-parent - 2.8.0 + 2.9.0 e2e-test-handler-tracing diff --git a/powertools-e2e-tests/handlers/validation-alb-event/pom.xml b/powertools-e2e-tests/handlers/validation-alb-event/pom.xml index 8e5e4dadb..14dbb9b13 100644 --- a/powertools-e2e-tests/handlers/validation-alb-event/pom.xml +++ b/powertools-e2e-tests/handlers/validation-alb-event/pom.xml @@ -5,7 +5,7 @@ software.amazon.lambda e2e-test-handlers-parent - 2.8.0 + 2.9.0 e2e-test-handler-validation-alb-event diff --git a/powertools-e2e-tests/handlers/validation-apigw-event/pom.xml b/powertools-e2e-tests/handlers/validation-apigw-event/pom.xml index 97e967c3b..290e47b13 100644 --- a/powertools-e2e-tests/handlers/validation-apigw-event/pom.xml +++ b/powertools-e2e-tests/handlers/validation-apigw-event/pom.xml @@ -5,7 +5,7 @@ software.amazon.lambda e2e-test-handlers-parent - 2.8.0 + 2.9.0 e2e-test-handler-validation-apigw-event diff --git a/powertools-e2e-tests/pom.xml b/powertools-e2e-tests/pom.xml index bfd4350a0..fec4dec92 100644 --- a/powertools-e2e-tests/pom.xml +++ b/powertools-e2e-tests/pom.xml @@ -20,7 +20,7 @@ powertools-parent software.amazon.lambda - 2.8.0 + 2.9.0 powertools-e2e-tests diff --git a/powertools-idempotency/pom.xml b/powertools-idempotency/pom.xml index d15d3445d..cbe2384ba 100644 --- a/powertools-idempotency/pom.xml +++ b/powertools-idempotency/pom.xml @@ -21,7 +21,7 @@ software.amazon.lambda powertools-parent - 2.8.0 + 2.9.0 powertools-idempotency diff --git a/powertools-idempotency/powertools-idempotency-core/pom.xml b/powertools-idempotency/powertools-idempotency-core/pom.xml index 801664b4a..4cba1956f 100644 --- a/powertools-idempotency/powertools-idempotency-core/pom.xml +++ b/powertools-idempotency/powertools-idempotency-core/pom.xml @@ -21,7 +21,7 @@ software.amazon.lambda powertools-idempotency - 2.8.0 + 2.9.0 powertools-idempotency-core diff --git a/powertools-idempotency/powertools-idempotency-dynamodb/pom.xml b/powertools-idempotency/powertools-idempotency-dynamodb/pom.xml index a9cf5739b..d223e0d2f 100644 --- a/powertools-idempotency/powertools-idempotency-dynamodb/pom.xml +++ b/powertools-idempotency/powertools-idempotency-dynamodb/pom.xml @@ -21,7 +21,7 @@ software.amazon.lambda powertools-idempotency - 2.8.0 + 2.9.0 powertools-idempotency-dynamodb diff --git a/powertools-kafka/pom.xml b/powertools-kafka/pom.xml index 82f6b8021..c71ef94f6 100644 --- a/powertools-kafka/pom.xml +++ b/powertools-kafka/pom.xml @@ -21,7 +21,7 @@ powertools-parent software.amazon.lambda - 2.8.0 + 2.9.0 powertools-kafka diff --git a/powertools-large-messages/pom.xml b/powertools-large-messages/pom.xml index d72877552..ad5910ec1 100644 --- a/powertools-large-messages/pom.xml +++ b/powertools-large-messages/pom.xml @@ -23,7 +23,7 @@ software.amazon.lambda powertools-parent - 2.8.0 + 2.9.0 powertools-large-messages diff --git a/powertools-logging/pom.xml b/powertools-logging/pom.xml index 923d6d133..200358e0b 100644 --- a/powertools-logging/pom.xml +++ b/powertools-logging/pom.xml @@ -21,7 +21,7 @@ powertools-parent software.amazon.lambda - 2.8.0 + 2.9.0 Powertools for AWS Lambda (Java) - Logging diff --git a/powertools-logging/powertools-logging-log4j/pom.xml b/powertools-logging/powertools-logging-log4j/pom.xml index 19a8b9428..aa4aca181 100644 --- a/powertools-logging/powertools-logging-log4j/pom.xml +++ b/powertools-logging/powertools-logging-log4j/pom.xml @@ -7,7 +7,7 @@ powertools-parent software.amazon.lambda - 2.8.0 + 2.9.0 ../../pom.xml diff --git a/powertools-logging/powertools-logging-logback/pom.xml b/powertools-logging/powertools-logging-logback/pom.xml index 7ed1f1a17..dbf7f5207 100644 --- a/powertools-logging/powertools-logging-logback/pom.xml +++ b/powertools-logging/powertools-logging-logback/pom.xml @@ -6,7 +6,7 @@ powertools-parent software.amazon.lambda - 2.8.0 + 2.9.0 ../../pom.xml diff --git a/powertools-metrics/pom.xml b/powertools-metrics/pom.xml index 86bdcc560..5f6c971e3 100644 --- a/powertools-metrics/pom.xml +++ b/powertools-metrics/pom.xml @@ -24,7 +24,7 @@ powertools-parent software.amazon.lambda - 2.8.0 + 2.9.0 Powertools for AWS Lambda (Java) - Metrics diff --git a/powertools-parameters/pom.xml b/powertools-parameters/pom.xml index 78234b5cc..124e22186 100644 --- a/powertools-parameters/pom.xml +++ b/powertools-parameters/pom.xml @@ -21,7 +21,7 @@ powertools-parent software.amazon.lambda - 2.8.0 + 2.9.0 powertools-parameters diff --git a/powertools-parameters/powertools-parameters-appconfig/pom.xml b/powertools-parameters/powertools-parameters-appconfig/pom.xml index 3c38963a1..406f715d3 100644 --- a/powertools-parameters/powertools-parameters-appconfig/pom.xml +++ b/powertools-parameters/powertools-parameters-appconfig/pom.xml @@ -7,7 +7,7 @@ software.amazon.lambda powertools-parent - 2.8.0 + 2.9.0 ../../pom.xml diff --git a/powertools-parameters/powertools-parameters-dynamodb/pom.xml b/powertools-parameters/powertools-parameters-dynamodb/pom.xml index b9e48567a..eb5604046 100644 --- a/powertools-parameters/powertools-parameters-dynamodb/pom.xml +++ b/powertools-parameters/powertools-parameters-dynamodb/pom.xml @@ -7,7 +7,7 @@ software.amazon.lambda powertools-parent - 2.8.0 + 2.9.0 ../../pom.xml diff --git a/powertools-parameters/powertools-parameters-secrets/pom.xml b/powertools-parameters/powertools-parameters-secrets/pom.xml index c83c674d5..b9535269e 100644 --- a/powertools-parameters/powertools-parameters-secrets/pom.xml +++ b/powertools-parameters/powertools-parameters-secrets/pom.xml @@ -7,7 +7,7 @@ software.amazon.lambda powertools-parent - 2.8.0 + 2.9.0 ../../pom.xml diff --git a/powertools-parameters/powertools-parameters-ssm/pom.xml b/powertools-parameters/powertools-parameters-ssm/pom.xml index d23b84bf6..e0253e10b 100644 --- a/powertools-parameters/powertools-parameters-ssm/pom.xml +++ b/powertools-parameters/powertools-parameters-ssm/pom.xml @@ -7,7 +7,7 @@ software.amazon.lambda powertools-parent - 2.8.0 + 2.9.0 ../../pom.xml diff --git a/powertools-parameters/powertools-parameters-tests/pom.xml b/powertools-parameters/powertools-parameters-tests/pom.xml index 9b93b3f79..fa2542730 100644 --- a/powertools-parameters/powertools-parameters-tests/pom.xml +++ b/powertools-parameters/powertools-parameters-tests/pom.xml @@ -6,7 +6,7 @@ software.amazon.lambda powertools-parent - 2.8.0 + 2.9.0 ../../pom.xml diff --git a/powertools-serialization/pom.xml b/powertools-serialization/pom.xml index 535f23190..81603cd4f 100644 --- a/powertools-serialization/pom.xml +++ b/powertools-serialization/pom.xml @@ -21,7 +21,7 @@ powertools-parent software.amazon.lambda - 2.8.0 + 2.9.0 powertools-serialization diff --git a/powertools-tracing/pom.xml b/powertools-tracing/pom.xml index 9e5603d70..545633c50 100644 --- a/powertools-tracing/pom.xml +++ b/powertools-tracing/pom.xml @@ -24,7 +24,7 @@ powertools-parent software.amazon.lambda - 2.8.0 + 2.9.0 Powertools for AWS Lambda (Java) - Tracing diff --git a/powertools-validation/pom.xml b/powertools-validation/pom.xml index 37063cf6d..8dfce6b6a 100644 --- a/powertools-validation/pom.xml +++ b/powertools-validation/pom.xml @@ -24,7 +24,7 @@ powertools-parent software.amazon.lambda - 2.8.0 + 2.9.0 Powertools for AWS Lambda (Java) - Validation From 058c61f57f172715328b2c76dc5a32b4fd765a1c Mon Sep 17 00:00:00 2001 From: Philipp Page Date: Tue, 16 Dec 2025 11:46:06 +0100 Subject: [PATCH 069/202] docs: Announce end-of-life of version 1.x.x (#2333) --- docs/processes/versioning.md | 8 ++++---- docs/upgrade.md | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/processes/versioning.md b/docs/processes/versioning.md index bbb60f507..d20269001 100644 --- a/docs/processes/versioning.md +++ b/docs/processes/versioning.md @@ -55,7 +55,7 @@ To see the list of available major versions of Powertools for AWS Lambda and whe ### Version support matrix -| SDK | Major version | Current Phase | General Availability Date | Notes | -| -------------------------------- | ------------- | -------------------- | ------------------------- | ------------------------------------------------------------------------------------------------------------------- | -| Powertools for AWS Lambda (Java) | 2.x | General Availability | 06/12/2025 | See [Release notes](https://github.com/aws-powertools/powertools-lambda-java/releases/tag/v2.0.0) | -| Powertools for AWS Lambda (Java) | 1.x | Maintenance | 11/04/2020 | End-of-support: December 12, 2025. See [upgrade guide](https://docs.powertools.aws.dev/lambda/java/latest/upgrade/) | +| SDK | Major version | Current Phase | General Availability Date | Notes | +| -------------------------------- | ------------- | -------------------- | ------------------------- | ------------------------------------------------------------------------------------------------- | +| Powertools for AWS Lambda (Java) | 2.x | General Availability | 06/12/2025 | See [Release notes](https://github.com/aws-powertools/powertools-lambda-java/releases/tag/v2.0.0) | +| Powertools for AWS Lambda (Java) | 1.x | End-of-life | 11/04/2020 | See [announcement](https://github.com/aws-powertools/powertools-lambda-java/issues/1895) | diff --git a/docs/upgrade.md b/docs/upgrade.md index 5b6d16d99..c9662a3db 100644 --- a/docs/upgrade.md +++ b/docs/upgrade.md @@ -7,7 +7,7 @@ description: Guide to update between major Powertools for AWS Lambda (Java) vers !!! warning "End of support notice" - On December 12th, 2025, Powertools for AWS Lambda (Java) v1 will reach end of support and will no longer receive updates or releases. If you are still using v1, we strongly recommend you to read our upgrade guide and update to the latest version. + On December 12th, 2025, Powertools for AWS Lambda (Java) v1 reached end-of-life and will no longer receive updates or releases. If you are still using v1, we strongly recommend you to read our upgrade guide and update to the latest version. Refer to [our announcement](https://github.com/aws-powertools/powertools-lambda-java/issues/1895) for details. Given our commitment to all of our customers using Powertools for AWS Lambda (Java), we will keep [Maven Central](https://central.sonatype.com/search?q=powertools){target="\_blank"} `v1` releases and a `v1` documentation archive to prevent any disruption. From df51f8b56ce63af4e2fc86a31ba90daaf2a9d38b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 21 Dec 2025 14:23:43 +0000 Subject: [PATCH 070/202] chore: bump aws.sdk.version from 2.39.1 to 2.40.9 (#2335) Bumps `aws.sdk.version` from 2.39.1 to 2.40.9. Updates `software.amazon.awssdk:bom` from 2.39.1 to 2.40.9 Updates `software.amazon.awssdk:http-client-spi` from 2.39.1 to 2.40.9 Updates `software.amazon.awssdk:url-connection-client` from 2.39.1 to 2.40.9 Updates `software.amazon.awssdk:s3` from 2.39.1 to 2.40.9 Updates `software.amazon.awssdk:dynamodb` from 2.39.1 to 2.40.9 Updates `software.amazon.awssdk:lambda` from 2.39.1 to 2.40.9 Updates `software.amazon.awssdk:kinesis` from 2.39.1 to 2.40.9 Updates `software.amazon.awssdk:cloudwatch` from 2.39.1 to 2.40.9 Updates `software.amazon.awssdk:xray` from 2.39.1 to 2.40.9 Updates `software.amazon.awssdk:sqs` from 2.39.1 to 2.40.9 Updates `software.amazon.awssdk:cloudformation` from 2.39.1 to 2.40.9 Updates `software.amazon.awssdk:sts` from 2.39.1 to 2.40.9 --- updated-dependencies: - dependency-name: software.amazon.awssdk:bom dependency-version: 2.40.9 dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:http-client-spi dependency-version: 2.40.9 dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:url-connection-client dependency-version: 2.40.9 dependency-type: direct:development update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:s3 dependency-version: 2.40.9 dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:dynamodb dependency-version: 2.40.9 dependency-type: direct:development update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:lambda dependency-version: 2.40.9 dependency-type: direct:development update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:kinesis dependency-version: 2.40.9 dependency-type: direct:development update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:cloudwatch dependency-version: 2.40.9 dependency-type: direct:development update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:xray dependency-version: 2.40.9 dependency-type: direct:development update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:sqs dependency-version: 2.40.9 dependency-type: direct:development update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:cloudformation dependency-version: 2.40.9 dependency-type: direct:development update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:sts dependency-version: 2.40.9 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> --- examples/powertools-examples-cloudformation/pom.xml | 2 +- pom.xml | 2 +- powertools-e2e-tests/handlers/pom.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/powertools-examples-cloudformation/pom.xml b/examples/powertools-examples-cloudformation/pom.xml index 8581a6ceb..212c0966b 100644 --- a/examples/powertools-examples-cloudformation/pom.xml +++ b/examples/powertools-examples-cloudformation/pom.xml @@ -14,7 +14,7 @@ 11 1.4.0 3.16.1 - 2.39.1 + 2.40.9 1.9.20.1 diff --git a/pom.xml b/pom.xml index b300e911d..a7b3d2fee 100644 --- a/pom.xml +++ b/pom.xml @@ -85,7 +85,7 @@ 2.25.2 2.0.17 2.20.1 - 2.39.1 + 2.40.9 2.20.0 2.2.0 UTF-8 diff --git a/powertools-e2e-tests/handlers/pom.xml b/powertools-e2e-tests/handlers/pom.xml index 54f07d681..477b49dc0 100644 --- a/powertools-e2e-tests/handlers/pom.xml +++ b/powertools-e2e-tests/handlers/pom.xml @@ -19,7 +19,7 @@ 3.6.1 1.14.1 3.14.1 - 2.39.1 + 2.40.9 1.9.20.1 true From e8b1bb7cd74ab69a2c98c1afc0299ad6e683ae5a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 21 Dec 2025 14:24:37 +0000 Subject: [PATCH 071/202] chore: bump org.mockito:mockito-junit-jupiter from 5.20.0 to 5.21.0 (#2336) Bumps [org.mockito:mockito-junit-jupiter](https://github.com/mockito/mockito) from 5.20.0 to 5.21.0. - [Release notes](https://github.com/mockito/mockito/releases) - [Commits](https://github.com/mockito/mockito/compare/v5.20.0...v5.21.0) --- updated-dependencies: - dependency-name: org.mockito:mockito-junit-jupiter dependency-version: 5.21.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> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index a7b3d2fee..6188b47a4 100644 --- a/pom.xml +++ b/pom.xml @@ -114,7 +114,7 @@ 2.20.1 1.7.0 5.20.0 - 5.20.0 + 5.21.0 2.3.0 1.5.0 From 9a18c5d5356053993e60bfdc3a4a94212b9d68d9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 21 Dec 2025 14:24:48 +0000 Subject: [PATCH 072/202] chore: bump actions/upload-artifact from 5.0.0 to 6.0.0 (#2338) Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 5.0.0 to 6.0.0. - [Release notes](https://github.com/actions/upload-artifact/releases) - [Commits](https://github.com/actions/upload-artifact/compare/330a01c490aca151604b8cf639adc76d48f6c5d4...b7c566a772e6b6bfb58ed0dc250532a479d7789f) --- updated-dependencies: - dependency-name: actions/upload-artifact dependency-version: 6.0.0 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/release.yml | 2 +- .github/workflows/security-scorecard.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index c9b2d80c6..9e52301dd 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -112,7 +112,7 @@ jobs: snapshot: ${{ inputs.snapshot}} - id: upload_source name: Upload artifacts - uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0 + uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 with: if-no-files-found: error name: source diff --git a/.github/workflows/security-scorecard.yml b/.github/workflows/security-scorecard.yml index 7f3286dfe..f9aaaea52 100644 --- a/.github/workflows/security-scorecard.yml +++ b/.github/workflows/security-scorecard.yml @@ -46,7 +46,7 @@ jobs: publish_results: true repo_token: ${{ secrets.SCORECARD_TOKEN }} - name: Upload Results - uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0 + uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 with: name: SARIF file path: results.sarif From 9ee9a95081f1559fa86f04221cbf6aa5b8c692dd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 21 Dec 2025 14:24:59 +0000 Subject: [PATCH 073/202] chore: bump actions/download-artifact from 6.0.0 to 7.0.0 (#2339) Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 6.0.0 to 7.0.0. - [Release notes](https://github.com/actions/download-artifact/releases) - [Commits](https://github.com/actions/download-artifact/compare/018cc2cf5baa6db3ef3c5f8a56943fffe632ef53...37930b1c2abaa49bbe596cd826c3c89aef350131) --- updated-dependencies: - dependency-name: actions/download-artifact dependency-version: 7.0.0 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/release.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 9e52301dd..630b91321 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -133,7 +133,7 @@ jobs: steps: - id: download_source name: Download artifacts - uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v4.6.1 + uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v4.6.1 with: name: source - name: Setup Java @@ -168,7 +168,7 @@ jobs: steps: - id: download_source name: Download artifacts - uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v4.6.1 + uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v4.6.1 with: name: source - name: Setup Java @@ -191,7 +191,7 @@ jobs: steps: - id: download_source name: Download artifacts - uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v4.6.1 + uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v4.6.1 with: name: source - name: Setup Java @@ -229,7 +229,7 @@ jobs: ref: ${{ env.RELEASE_COMMIT }} - id: download_source name: Download artifacts - uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v4.6.1 + uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v4.6.1 with: name: source - id: setup-git From ad640f7a61385f20208c8dc3a0296e162934e138 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 21 Dec 2025 14:25:08 +0000 Subject: [PATCH 074/202] chore: bump github/codeql-action from 4.31.8 to 4.31.9 (#2340) Bumps [github/codeql-action](https://github.com/github/codeql-action) from 4.31.8 to 4.31.9. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/1b168cd39490f61582a9beae412bb7057a6b2c4e...5d4e8d1aca955e8d8589aabd499c5cae939e33c7) --- updated-dependencies: - dependency-name: github/codeql-action dependency-version: 4.31.9 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/security-scorecard.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/security-scorecard.yml b/.github/workflows/security-scorecard.yml index f9aaaea52..b91e78c69 100644 --- a/.github/workflows/security-scorecard.yml +++ b/.github/workflows/security-scorecard.yml @@ -52,6 +52,6 @@ jobs: path: results.sarif retention-days: 5 - name: Upload to Code-Scanning - uses: github/codeql-action/upload-sarif@1b168cd39490f61582a9beae412bb7057a6b2c4e # v3.29.5 + uses: github/codeql-action/upload-sarif@5d4e8d1aca955e8d8589aabd499c5cae939e33c7 # v3.29.5 with: sarif_file: results.sarif From 21e1fcffc3793c51235bcfd6778c483d57320dae Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 21 Dec 2025 14:25:44 +0000 Subject: [PATCH 075/202] chore: bump sam/build-java25 (#2342) Bumps sam/build-java25 from `b34fc78` to `bffac7d`. --- updated-dependencies: - dependency-name: sam/build-java25 dependency-version: bffac7de6e418a93d2aefc1e8e7c79eda0971e7a026725fe618b58ddfba7a128 dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- powertools-e2e-tests/src/test/resources/docker/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/powertools-e2e-tests/src/test/resources/docker/Dockerfile b/powertools-e2e-tests/src/test/resources/docker/Dockerfile index fbefe46dd..1ceb29aa0 100644 --- a/powertools-e2e-tests/src/test/resources/docker/Dockerfile +++ b/powertools-e2e-tests/src/test/resources/docker/Dockerfile @@ -1,5 +1,5 @@ # Use the official AWS SAM base image for Java 25 -FROM public.ecr.aws/sam/build-java25@sha256:b34fc789a70464f080232ee96590a6d0c7249eb59b1c33deccaae08a882cac23 +FROM public.ecr.aws/sam/build-java25@sha256:bffac7de6e418a93d2aefc1e8e7c79eda0971e7a026725fe618b58ddfba7a128 # Install GraalVM dependencies RUN curl -4 -L https://download.oracle.com/graalvm/25/latest/graalvm-jdk-25_linux-x64_bin.tar.gz | tar -xvz From 54fe0be69938dbecb0d4efaa6c0152ee20c34eac Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 21 Dec 2025 14:25:57 +0000 Subject: [PATCH 076/202] chore: bump org.apache.logging.log4j:log4j-core from 2.25.2 to 2.25.3 (#2344) Bumps org.apache.logging.log4j:log4j-core from 2.25.2 to 2.25.3. --- updated-dependencies: - dependency-name: org.apache.logging.log4j:log4j-core dependency-version: 2.25.3 dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- examples/powertools-examples-core-utilities/cdk/app/pom.xml | 2 +- examples/powertools-examples-core-utilities/sam-graalvm/pom.xml | 2 +- examples/powertools-examples-parameters/sam-graalvm/pom.xml | 2 +- pom.xml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/examples/powertools-examples-core-utilities/cdk/app/pom.xml b/examples/powertools-examples-core-utilities/cdk/app/pom.xml index 28be679a5..c02b73026 100644 --- a/examples/powertools-examples-core-utilities/cdk/app/pom.xml +++ b/examples/powertools-examples-core-utilities/cdk/app/pom.xml @@ -11,7 +11,7 @@ jar - 2.25.2 + 2.25.3 11 11 1.9.20.1 diff --git a/examples/powertools-examples-core-utilities/sam-graalvm/pom.xml b/examples/powertools-examples-core-utilities/sam-graalvm/pom.xml index e7a3f202d..eea0357e9 100644 --- a/examples/powertools-examples-core-utilities/sam-graalvm/pom.xml +++ b/examples/powertools-examples-core-utilities/sam-graalvm/pom.xml @@ -9,7 +9,7 @@ jar - 2.25.2 + 2.25.3 11 11 1.9.20.1 diff --git a/examples/powertools-examples-parameters/sam-graalvm/pom.xml b/examples/powertools-examples-parameters/sam-graalvm/pom.xml index 7fc652bca..2aaffd9d1 100644 --- a/examples/powertools-examples-parameters/sam-graalvm/pom.xml +++ b/examples/powertools-examples-parameters/sam-graalvm/pom.xml @@ -8,7 +8,7 @@ Powertools for AWS Lambda (Java) - Examples - Parameters GraalVM - 2.25.2 + 2.25.3 11 11 1.9.20.1 diff --git a/pom.xml b/pom.xml index 6188b47a4..e6cf78b14 100644 --- a/pom.xml +++ b/pom.xml @@ -82,7 +82,7 @@ 11 11 3.1.2 - 2.25.2 + 2.25.3 2.0.17 2.20.1 2.40.9 From 4d2e562f1ff1ff4b260a29ccf7ec071cca28583d Mon Sep 17 00:00:00 2001 From: Attyuttam Date: Mon, 5 Jan 2026 18:21:01 +0530 Subject: [PATCH 077/202] feat(crac): Support CRaC and priming of powertools tracing (#2345) * fix: cold start only on on-demand invocation * fix: cold start only on on-demand invocation * fix: cold start only on on-demand invocation * mvn clean test is successful * reversed the sqllite changes * fix: priming for powertools-tracing * reverted OS specific changes * mvn clean test is successful * reversed the sqllite changes * fix: priming for powertools-tracing * reverted OS specific changes * resolved testing issues * resolved testing issues * resolved testing issues * resolved testing issues * resolved testing issues * incorporated comments * Update pom.xml --- docs/core/tracing.md | 49 + powertools-tracing/pom.xml | 41 + .../powertools/tracing/TracingUtils.java | 28 +- .../src/main/resources/classesloaded.txt | 5996 +++++++++++++++++ .../powertools/tracing/TracingUtilsTest.java | 16 + spotbugs-exclude.xml | 5 + 6 files changed, 6134 insertions(+), 1 deletion(-) create mode 100644 powertools-tracing/src/main/resources/classesloaded.txt diff --git a/docs/core/tracing.md b/docs/core/tracing.md index 95fbe6d06..1cd37f91c 100644 --- a/docs/core/tracing.md +++ b/docs/core/tracing.md @@ -447,3 +447,52 @@ Below is an example configuration needed for each test case. // test logic } ``` +## Advanced + +### Lambda SnapStart priming + +The Tracing utility integrates with AWS Lambda SnapStart to improve restore durations. To make sure the SnapStart priming logic of this utility runs correctly, you need an explicit reference to `TracingUtils` in your code to allow the library to register before SnapStart takes a memory snapshot. Learn more about what priming is in this [blog post](https://aws.amazon.com/blogs/compute/optimizing-cold-start-performance-of-aws-lambda-using-advanced-priming-strategies-with-snapstart/){target="_blank"}. + +If you don't set a custom `TracingUtils` in your code yet, make sure to reference `TracingUtils` in your Lambda handler initialization code. This can be done by adding one of the following lines to your handler class: + +=== "Constructor" + + ```java hl_lines="7" + import software.amazon.lambda.powertools.validation.Validation; + import software.amazon.lambda.powertools.validation.ValidationConfig; + + public class MyFunctionHandler implements RequestHandler { + + public MyFunctionHandler() { + TracingUtils.init(); // Ensure TracingUtils is loaded for SnapStart + } + + @Override + @Validation(inboundSchema = "classpath:/schema_in.json", outboundSchema = "classpath:/schema_out.json") + public APIGatewayProxyResponseEvent handleRequest(APIGatewayProxyRequestEvent input, Context context) { + // ... + return something; + } + } + ``` + +=== "Static Initializer" + + ```java hl_lines="7" + import software.amazon.lambda.powertools.validation.Validation; + import software.amazon.lambda.powertools.validation.ValidationConfig; + + public class MyFunctionHandler implements RequestHandler { + + static { + TracingUtils.init(); // Ensure TracingUtils is loaded for SnapStart + } + + @Override + @Validation(inboundSchema = "classpath:/schema_in.json", outboundSchema = "classpath:/schema_out.json") + public APIGatewayProxyResponseEvent handleRequest(APIGatewayProxyRequestEvent input, Context context) { + // ... + return something; + } + } + ``` diff --git a/powertools-tracing/pom.xml b/powertools-tracing/pom.xml index 545633c50..a9bb8e61e 100644 --- a/powertools-tracing/pom.xml +++ b/powertools-tracing/pom.xml @@ -33,6 +33,10 @@ + + org.crac + crac + org.aspectj aspectjrt @@ -80,6 +84,11 @@ + + org.mockito + mockito-core + test + org.junit.jupiter junit-jupiter-api @@ -144,8 +153,33 @@ + + generate-classesloaded-file + + + + org.apache.maven.plugins + maven-surefire-plugin + + + -Xlog:class+load=info:classesloaded.txt + --add-opens java.base/java.util=ALL-UNNAMED + --add-opens java.base/java.lang=ALL-UNNAMED + + + + + + generate-graalvm-files + + + org.mockito + mockito-subclass + test + + @@ -165,6 +199,13 @@ graalvm-native + + + org.mockito + mockito-subclass + test + + diff --git a/powertools-tracing/src/main/java/software/amazon/lambda/powertools/tracing/TracingUtils.java b/powertools-tracing/src/main/java/software/amazon/lambda/powertools/tracing/TracingUtils.java index 954ed7da4..853197b21 100644 --- a/powertools-tracing/src/main/java/software/amazon/lambda/powertools/tracing/TracingUtils.java +++ b/powertools-tracing/src/main/java/software/amazon/lambda/powertools/tracing/TracingUtils.java @@ -16,6 +16,9 @@ import static software.amazon.lambda.powertools.common.internal.LambdaHandlerProcessor.serviceName; +import org.crac.Context; +import org.crac.Core; +import org.crac.Resource; import com.amazonaws.xray.AWSXRay; import com.amazonaws.xray.entities.Entity; import com.amazonaws.xray.entities.Subsegment; @@ -23,15 +26,27 @@ import java.util.function.Consumer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import software.amazon.lambda.powertools.common.internal.ClassPreLoader; /** * A class of helper functions to add additional functionality and ease * of use. */ -public final class TracingUtils { +public final class TracingUtils implements Resource{ private static final Logger LOG = LoggerFactory.getLogger(TracingUtils.class); private static ObjectMapper objectMapper; + private static final TracingUtils INSTANCE = new TracingUtils(); + + static { + Core.getGlobalContext().register(INSTANCE); + } + + public static void init() { + // Placeholder method used to enable SnapStart priming. Users need a direct reference to this class in order for the CRaC hooks to execute. + new TracingUtils(); + } + /** * Put an annotation to the current subsegment with a String value. * @@ -192,4 +207,15 @@ public static void defaultObjectMapper(ObjectMapper objectMapper) { public static ObjectMapper objectMapper() { return objectMapper; } + + @Override + public void beforeCheckpoint(Context context) throws Exception { + init(); + ClassPreLoader.preloadClasses(); + } + + @Override + public void afterRestore(Context context) throws Exception { + // This is a no-op, as we don't need to do anything after restore + } } diff --git a/powertools-tracing/src/main/resources/classesloaded.txt b/powertools-tracing/src/main/resources/classesloaded.txt new file mode 100644 index 000000000..8ce6d3d5d --- /dev/null +++ b/powertools-tracing/src/main/resources/classesloaded.txt @@ -0,0 +1,5996 @@ + java.lang.Object + java.io.Serializable + java.lang.Comparable + java.lang.CharSequence + java.lang.constant.Constable + java.lang.constant.ConstantDesc + java.lang.String + java.lang.reflect.AnnotatedElement + java.lang.reflect.GenericDeclaration + java.lang.reflect.Type + java.lang.invoke.TypeDescriptor + java.lang.invoke.TypeDescriptor$OfField + java.lang.Class + java.lang.Cloneable + java.lang.ClassLoader + java.lang.System + java.lang.Throwable + java.lang.Error + java.lang.ThreadDeath + java.lang.Exception + java.lang.RuntimeException + java.lang.SecurityManager + java.security.ProtectionDomain + java.security.AccessControlContext + java.security.AccessController + java.security.SecureClassLoader + java.lang.ReflectiveOperationException + java.lang.ClassNotFoundException + java.lang.Record + java.lang.LinkageError + java.lang.NoClassDefFoundError + java.lang.ClassCastException + java.lang.ArrayStoreException + java.lang.VirtualMachineError + java.lang.InternalError + java.lang.OutOfMemoryError + java.lang.StackOverflowError + java.lang.IllegalMonitorStateException + java.lang.ref.Reference + java.lang.ref.SoftReference + java.lang.ref.WeakReference + java.lang.ref.FinalReference + java.lang.ref.PhantomReference + java.lang.ref.Finalizer + java.lang.Runnable + java.lang.Thread + java.lang.Thread$UncaughtExceptionHandler + java.lang.ThreadGroup + java.util.Dictionary + java.util.Map + java.util.Hashtable + java.util.Properties + java.lang.Module + java.lang.reflect.AccessibleObject + java.lang.reflect.Member + java.lang.reflect.Field + java.lang.reflect.Parameter + java.lang.reflect.Executable + java.lang.reflect.Method + java.lang.reflect.Constructor + jdk.internal.reflect.MagicAccessorImpl + jdk.internal.reflect.MethodAccessor + jdk.internal.reflect.MethodAccessorImpl + jdk.internal.reflect.ConstructorAccessor + jdk.internal.reflect.ConstructorAccessorImpl + jdk.internal.reflect.DelegatingClassLoader + jdk.internal.reflect.ConstantPool + jdk.internal.reflect.FieldAccessor + jdk.internal.reflect.FieldAccessorImpl + jdk.internal.reflect.UnsafeFieldAccessorImpl + jdk.internal.reflect.UnsafeStaticFieldAccessorImpl + java.lang.annotation.Annotation + jdk.internal.reflect.CallerSensitive + jdk.internal.reflect.NativeConstructorAccessorImpl + java.lang.invoke.MethodHandle + java.lang.invoke.DirectMethodHandle + java.lang.invoke.VarHandle + java.lang.invoke.MemberName + java.lang.invoke.ResolvedMethodName + java.lang.invoke.MethodHandleNatives + java.lang.invoke.LambdaForm + java.lang.invoke.TypeDescriptor$OfMethod + java.lang.invoke.MethodType + java.lang.BootstrapMethodError + java.lang.invoke.CallSite + jdk.internal.invoke.NativeEntryPoint + java.lang.invoke.MethodHandleNatives$CallSiteContext + java.lang.invoke.ConstantCallSite + java.lang.invoke.MutableCallSite + java.lang.invoke.VolatileCallSite + java.lang.AssertionStatusDirectives + java.lang.Appendable + java.lang.AbstractStringBuilder + java.lang.StringBuffer + java.lang.StringBuilder + jdk.internal.misc.UnsafeConstants + jdk.internal.misc.Unsafe + jdk.internal.module.Modules + java.lang.AutoCloseable + java.io.Closeable + java.io.InputStream + java.io.ByteArrayInputStream + java.net.URL + java.util.jar.Manifest + jdk.internal.loader.BuiltinClassLoader + jdk.internal.loader.ClassLoaders + jdk.internal.loader.ClassLoaders$AppClassLoader + jdk.internal.loader.ClassLoaders$PlatformClassLoader + java.security.CodeSource + java.util.AbstractMap + java.util.concurrent.ConcurrentMap + java.util.concurrent.ConcurrentHashMap + java.lang.Iterable + java.util.Collection + java.util.AbstractCollection + java.util.List + java.util.AbstractList + java.util.RandomAccess + java.util.ArrayList + java.lang.StackTraceElement + java.nio.Buffer + java.lang.StackWalker + java.lang.StackStreamFactory$AbstractStackWalker + java.lang.StackWalker$StackFrame + java.lang.StackFrameInfo + java.lang.LiveStackFrame + java.lang.LiveStackFrameInfo + java.util.concurrent.locks.AbstractOwnableSynchronizer + java.lang.Boolean + java.lang.Character + java.lang.Number + java.lang.Float + java.lang.Double + java.lang.Byte + java.lang.Short + java.lang.Integer + java.lang.Long + java.util.Iterator + java.lang.reflect.RecordComponent + jdk.internal.vm.vector.VectorSupport + jdk.internal.vm.vector.VectorSupport$VectorPayload + jdk.internal.vm.vector.VectorSupport$Vector + jdk.internal.vm.vector.VectorSupport$VectorMask + jdk.internal.vm.vector.VectorSupport$VectorShuffle + java.lang.NullPointerException + java.lang.ArithmeticException + java.io.ObjectStreamField + java.util.Comparator + java.lang.String$CaseInsensitiveComparator + java.lang.Module$ArchivedData + jdk.internal.misc.CDS + java.util.Set + java.util.ImmutableCollections$AbstractImmutableCollection + java.util.ImmutableCollections$AbstractImmutableSet + java.util.ImmutableCollections$Set12 + java.util.Objects + java.util.ImmutableCollections + java.util.ImmutableCollections$AbstractImmutableList + java.util.ImmutableCollections$ListN + java.util.ImmutableCollections$SetN + java.util.ImmutableCollections$AbstractImmutableMap + java.util.ImmutableCollections$MapN + jdk.internal.access.JavaLangReflectAccess + java.lang.reflect.ReflectAccess + jdk.internal.access.SharedSecrets + java.lang.invoke.MethodHandles + java.lang.invoke.MemberName$Factory + java.security.Guard + java.security.Permission + java.security.BasicPermission + java.lang.reflect.ReflectPermission + java.lang.StringLatin1 + java.lang.invoke.MethodHandles$Lookup + jdk.internal.reflect.Reflection + java.lang.Math + java.util.HashMap + java.util.AbstractSet + java.util.ImmutableCollections$MapN$1 + java.util.ImmutableCollections$MapN$MapNIterator + java.util.Map$Entry + java.util.KeyValueHolder + java.util.HashMap$Node + java.util.LinkedHashMap$Entry + java.util.HashMap$TreeNode + java.lang.Runtime + java.util.concurrent.locks.Lock + java.util.concurrent.locks.ReentrantLock + java.util.concurrent.ConcurrentHashMap$Segment + java.util.concurrent.ConcurrentHashMap$CounterCell + java.util.concurrent.ConcurrentHashMap$Node + java.util.concurrent.locks.LockSupport + java.util.concurrent.ConcurrentHashMap$ReservationNode + java.security.PrivilegedAction + jdk.internal.reflect.ReflectionFactory$GetReflectionFactoryAction + jdk.internal.reflect.ReflectionFactory + java.lang.ref.Reference$ReferenceHandler + jdk.internal.ref.Cleaner + java.lang.ref.ReferenceQueue + java.lang.ref.ReferenceQueue$Null + java.lang.ref.ReferenceQueue$Lock + jdk.internal.access.JavaLangRefAccess + java.lang.ref.Reference$1 + java.lang.ref.Finalizer$FinalizerThread + jdk.internal.access.JavaLangAccess + java.lang.System$2 + jdk.internal.util.SystemProps + jdk.internal.util.SystemProps$Raw + jdk.internal.misc.VM + java.lang.StringConcatHelper + java.lang.VersionProps + java.util.Arrays + java.lang.CharacterData + java.lang.CharacterDataLatin1 + java.lang.Integer$IntegerCache + java.util.HashMap$EntrySet + java.util.HashMap$HashIterator + java.util.HashMap$EntryIterator + jdk.internal.util.StaticProperty + java.io.FileInputStream + java.io.FileDescriptor + jdk.internal.access.JavaIOFileDescriptorAccess + java.io.FileDescriptor$1 + java.io.Flushable + java.io.OutputStream + java.io.FileOutputStream + java.io.FilterInputStream + java.io.BufferedInputStream + java.io.FilterOutputStream + java.io.PrintStream + java.io.BufferedOutputStream + java.io.Writer + java.io.OutputStreamWriter + java.nio.charset.Charset + java.nio.charset.spi.CharsetProvider + sun.nio.cs.StandardCharsets + java.lang.ThreadLocal + java.util.concurrent.atomic.AtomicInteger + sun.security.action.GetPropertyAction + sun.util.PreHashedMap + sun.nio.cs.StandardCharsets$Aliases + sun.nio.cs.StandardCharsets$Cache + sun.nio.cs.HistoricallyNamedCharset + sun.nio.cs.Unicode + sun.nio.cs.UTF_8 + sun.nio.cs.ISO_8859_1 + sun.nio.cs.US_ASCII + java.nio.charset.StandardCharsets + sun.nio.cs.UTF_16BE + sun.nio.cs.UTF_16LE + sun.nio.cs.UTF_16 + sun.nio.cs.StandardCharsets$Classes + jdk.internal.util.ArraysSupport + sun.nio.cs.MS1252 + java.lang.Class$ReflectionData + java.lang.Class$Atomic + java.lang.Class$1 + java.lang.reflect.Modifier + jdk.internal.reflect.DelegatingConstructorAccessorImpl + sun.nio.cs.StreamEncoder + java.nio.charset.CharsetEncoder + sun.nio.cs.ArrayEncoder + sun.nio.cs.SingleByte$Encoder + sun.nio.cs.MS1252$Holder + java.lang.StringUTF16 + sun.nio.cs.SingleByte + java.nio.charset.CodingErrorAction + java.nio.ByteBuffer + jdk.internal.misc.ScopedMemoryAccess + jdk.internal.access.JavaNioAccess + java.nio.Buffer$1 + java.nio.HeapByteBuffer + java.nio.ByteOrder + java.io.BufferedWriter + java.lang.Terminator + jdk.internal.misc.Signal$Handler + java.lang.Terminator$1 + jdk.internal.misc.Signal + java.util.Hashtable$Entry + jdk.internal.misc.Signal$NativeHandler + jdk.internal.misc.OSEnvironment + sun.io.Win32ErrorMode + java.util.Collections + java.util.Collections$EmptySet + java.util.Collections$EmptyList + java.util.Collections$EmptyMap + java.lang.IllegalArgumentException + java.lang.invoke.MethodHandleStatics + jdk.internal.module.ModuleBootstrap + java.lang.module.ModuleDescriptor + sun.invoke.util.VerifyAccess + jdk.internal.access.JavaLangModuleAccess + java.lang.module.ModuleDescriptor$1 + java.io.File + java.io.DefaultFileSystem + java.io.FileSystem + java.io.WinNTFileSystem + jdk.internal.module.ModulePatcher + jdk.internal.module.ModuleBootstrap$Counters + jdk.internal.module.ArchivedBootLayer + jdk.internal.module.ArchivedModuleGraph + jdk.internal.module.SystemModuleFinders + java.net.URI + jdk.internal.access.JavaNetUriAccess + java.net.URI$1 + jdk.internal.module.SystemModulesMap + jdk.internal.module.SystemModules + jdk.internal.module.SystemModules$default + jdk.internal.module.Builder + java.lang.module.ModuleDescriptor$Requires + java.lang.module.ModuleDescriptor$Exports + java.lang.module.ModuleDescriptor$Opens + java.lang.module.ModuleDescriptor$Provides + java.util.ImmutableCollections$List12 + java.lang.module.ModuleDescriptor$Version + java.lang.Enum + java.lang.module.ModuleDescriptor$Modifier + java.lang.module.ModuleDescriptor$Requires$Modifier + jdk.internal.module.ModuleTarget + jdk.internal.module.ModuleHashes + jdk.internal.module.ModuleHashes$Builder + java.util.Collections$UnmodifiableMap + jdk.internal.module.ModuleResolution + java.lang.module.ModuleReference + java.util.function.Supplier + jdk.internal.module.SystemModuleFinders$2 + jdk.internal.module.ModuleReferenceImpl + jdk.internal.module.ModuleHashes$HashSupplier + jdk.internal.module.SystemModuleFinders$3 + java.lang.module.ModuleFinder + jdk.internal.module.SystemModuleFinders$SystemModuleFinder + java.util.Optional + jdk.internal.loader.BootLoader + jdk.internal.loader.NativeLibraries + jdk.internal.loader.ClassLoaderHelper + java.util.HashSet + java.util.Queue + java.util.Deque + java.util.ArrayDeque + jdk.internal.loader.ArchivedClassLoaders + jdk.internal.loader.ClassLoaders$BootClassLoader + java.security.cert.Certificate + java.lang.ClassLoader$ParallelLoaders + java.util.WeakHashMap + java.util.WeakHashMap$Entry + java.util.Collections$SetFromMap + java.util.WeakHashMap$KeySet + jdk.internal.access.JavaSecurityAccess + java.security.ProtectionDomain$JavaSecurityAccessImpl + java.security.ProtectionDomain$Key + java.security.Principal + jdk.internal.loader.URLClassPath + java.net.URLStreamHandlerFactory + java.net.URL$DefaultFactory + jdk.internal.access.JavaNetURLAccess + java.net.URL$3 + java.io.File$PathStatus + sun.net.www.ParseUtil + java.util.HexFormat + java.net.URLStreamHandler + sun.net.www.protocol.file.Handler + sun.net.util.IPAddressUtil + jdk.internal.util.Preconditions + sun.net.www.protocol.jar.Handler + jdk.internal.module.ServicesCatalog + jdk.internal.loader.AbstractClassLoaderValue + jdk.internal.loader.ClassLoaderValue + jdk.internal.loader.BuiltinClassLoader$LoadedModule + java.util.ImmutableCollections$SetN$SetNIterator + java.lang.module.Configuration + java.lang.module.ResolvedModule + java.util.AbstractMap$1 + java.util.AbstractMap$1$1 + java.util.ImmutableCollections$Set12$1 + jdk.internal.module.ModuleLoaderMap + java.util.function.Function + jdk.internal.module.ModuleLoaderMap$Mapper + jdk.internal.module.ModuleLoaderMap$Modules + java.lang.ModuleLayer + java.util.ListIterator + java.util.ImmutableCollections$ListItr + jdk.internal.loader.AbstractClassLoaderValue$Memoizer + jdk.internal.module.ServicesCatalog$ServiceProvider + java.util.concurrent.CopyOnWriteArrayList + java.util.HashMap$KeySet + java.util.HashMap$KeyIterator + java.lang.ModuleLayer$Controller + java.lang.invoke.LambdaMetafactory + java.lang.invoke.MethodType$ConcurrentWeakInternSet + java.lang.Void + java.lang.invoke.MethodTypeForm + java.lang.invoke.MethodType$ConcurrentWeakInternSet$WeakEntry + sun.invoke.util.Wrapper + sun.invoke.util.Wrapper$Format + java.lang.invoke.LambdaForm$NamedFunction + java.lang.invoke.DirectMethodHandle$Holder + sun.invoke.util.ValueConversions + java.lang.invoke.MethodHandleImpl + java.lang.invoke.Invokers + java.lang.invoke.LambdaForm$Kind + java.lang.NoSuchMethodException + java.lang.invoke.LambdaForm$BasicType + java.lang.reflect.Array + java.lang.invoke.LambdaForm$Name + java.lang.invoke.LambdaForm$Holder + java.lang.invoke.InvokerBytecodeGenerator + java.lang.invoke.InvokerBytecodeGenerator$2 + java.lang.invoke.MethodHandleImpl$Intrinsic + java.lang.invoke.BootstrapMethodInvoker + java.lang.invoke.VarHandle$AccessMode + java.lang.invoke.VarHandle$AccessType + java.lang.invoke.Invokers$Holder + jdk.internal.access.JavaLangInvokeAccess + java.lang.invoke.MethodHandleImpl$1 + java.lang.invoke.AbstractValidatingLambdaMetafactory + java.lang.invoke.InnerClassLambdaMetafactory + jdk.internal.org.objectweb.asm.Type + sun.security.action.GetBooleanAction + jdk.internal.org.objectweb.asm.Handle + sun.invoke.util.BytecodeDescriptor + jdk.internal.org.objectweb.asm.ConstantDynamic + java.lang.invoke.MethodHandleInfo + java.lang.invoke.InfoFromMemberName + jdk.internal.org.objectweb.asm.ClassVisitor + jdk.internal.org.objectweb.asm.ClassWriter + jdk.internal.org.objectweb.asm.SymbolTable + jdk.internal.org.objectweb.asm.Symbol + jdk.internal.org.objectweb.asm.SymbolTable$Entry + jdk.internal.org.objectweb.asm.ByteVector + java.lang.invoke.LambdaProxyClassArchive + jdk.internal.org.objectweb.asm.MethodVisitor + jdk.internal.org.objectweb.asm.MethodWriter + jdk.internal.org.objectweb.asm.Label + java.lang.invoke.TypeConvertingMethodAdapter + java.lang.invoke.InnerClassLambdaMetafactory$ForwardingMethodGenerator + jdk.internal.org.objectweb.asm.Handler + jdk.internal.org.objectweb.asm.Attribute + jdk.internal.org.objectweb.asm.AnnotationVisitor + jdk.internal.org.objectweb.asm.AnnotationWriter + java.lang.invoke.MethodHandles$Lookup$ClassOption + java.lang.invoke.MethodHandles$Lookup$ClassFile + jdk.internal.org.objectweb.asm.ClassReader + java.lang.invoke.MethodHandles$Lookup$ClassDefiner + jdk.internal.module.ModuleBootstrap$$Lambda$1/0x000002bb4b0405d0 + java.lang.invoke.InnerClassLambdaMetafactory$1 + java.lang.invoke.BoundMethodHandle + java.lang.invoke.ClassSpecializer + java.lang.invoke.BoundMethodHandle$Specializer + java.lang.invoke.ClassSpecializer$1 + java.lang.invoke.ClassSpecializer$SpeciesData + java.lang.invoke.BoundMethodHandle$SpeciesData + java.lang.invoke.ClassSpecializer$Factory + java.lang.invoke.BoundMethodHandle$Specializer$Factory + java.lang.invoke.SimpleMethodHandle + java.lang.NoSuchFieldException + java.lang.invoke.BoundMethodHandle$Species_L + sun.invoke.util.VerifyType + sun.invoke.empty.Empty + java.lang.invoke.DirectMethodHandle$2 + java.lang.invoke.DirectMethodHandle$Accessor + java.lang.invoke.DelegatingMethodHandle + java.lang.invoke.MethodHandleImpl$IntrinsicMethodHandle + java.lang.invoke.DelegatingMethodHandle$Holder + sun.invoke.util.Wrapper$1 + java.lang.invoke.LambdaFormEditor + java.lang.invoke.LambdaFormEditor$TransformKey + java.lang.invoke.LambdaFormBuffer + java.lang.invoke.LambdaFormEditor$Transform + jdk.internal.org.objectweb.asm.Frame + java.lang.invoke.InvokerBytecodeGenerator$ClassData + java.util.ArrayList$Itr + jdk.internal.org.objectweb.asm.FieldVisitor + jdk.internal.org.objectweb.asm.FieldWriter + java.lang.invoke.LambdaForm$MH/0x000002bb4b000400 + jdk.internal.ref.CleanerFactory + java.util.concurrent.ThreadFactory + jdk.internal.ref.CleanerFactory$1 + java.lang.ref.Cleaner + java.lang.ref.Cleaner$1 + jdk.internal.ref.CleanerImpl + java.lang.ref.Cleaner$Cleanable + jdk.internal.ref.PhantomCleanable + jdk.internal.ref.CleanerImpl$PhantomCleanableRef + jdk.internal.ref.CleanerImpl$CleanerCleanable + jdk.internal.misc.InnocuousThread + java.util.ArrayList$SubList + java.lang.Module$ReflectionData + java.lang.WeakPairMap + java.lang.WeakPairMap$Pair + java.lang.WeakPairMap$Pair$Lookup + java.util.function.BiFunction + java.lang.Module$$Lambda$2/0x000002bb4b040808 + java.lang.WeakPairMap$WeakRefPeer + java.lang.WeakPairMap$Pair$Weak + java.lang.WeakPairMap$Pair$Weak$1 + java.lang.WeakPairMap$$Lambda$3/0x000002bb4b041140 + java.lang.invoke.DirectMethodHandle$Constructor + java.lang.invoke.StringConcatFactory + java.lang.invoke.StringConcatFactory$1 + java.lang.invoke.StringConcatFactory$2 + java.lang.invoke.StringConcatFactory$3 + jdk.internal.vm.PostVMInitHook + java.util.Locale + sun.util.locale.BaseLocale + sun.util.locale.LocaleUtils + sun.util.locale.BaseLocale$Key + sun.util.locale.LocaleObjectCache + sun.util.locale.BaseLocale$Cache + sun.util.locale.LocaleObjectCache$CacheEntry + java.util.Locale$Cache + jdk.internal.vm.PostVMInitHook$2 + jdk.internal.util.EnvUtils + jdk.internal.vm.PostVMInitHook$1 + sun.launcher.LauncherHelper + java.nio.charset.CharsetDecoder + sun.nio.cs.ArrayDecoder + sun.nio.cs.SingleByte$Decoder + java.lang.StringCoding + java.util.zip.ZipConstants + java.util.zip.ZipFile + java.util.jar.JarFile + jdk.internal.access.JavaUtilZipFileAccess + java.util.zip.ZipFile$1 + jdk.internal.access.JavaUtilJarAccess + java.util.jar.JavaUtilJarAccessImpl + java.lang.Runtime$Version + java.util.zip.ZipFile$CleanableResource + java.util.zip.ZipCoder + java.util.zip.ZipCoder$UTF8ZipCoder + java.util.zip.ZipFile$Source + sun.nio.fs.DefaultFileSystemProvider + java.nio.file.spi.FileSystemProvider + sun.nio.fs.AbstractFileSystemProvider + sun.nio.fs.WindowsFileSystemProvider + java.nio.file.OpenOption + java.nio.file.StandardOpenOption + java.nio.file.FileSystem + sun.nio.fs.WindowsFileSystem + java.util.Arrays$ArrayList + java.util.Arrays$ArrayItr + java.util.Collections$UnmodifiableCollection + java.util.Collections$UnmodifiableSet + sun.nio.fs.WindowsPathParser + sun.nio.fs.WindowsPathType + sun.nio.fs.WindowsPathParser$Result + java.util.zip.ZipFile$Source$Key + java.nio.file.Watchable + java.nio.file.Path + sun.nio.fs.WindowsPath + java.nio.file.attribute.BasicFileAttributes + java.nio.file.CopyOption + java.nio.file.LinkOption + java.nio.file.Files + java.nio.file.attribute.AttributeView + java.nio.file.attribute.FileAttributeView + java.nio.file.attribute.BasicFileAttributeView + sun.nio.fs.Util + sun.nio.fs.WindowsFileAttributeViews + sun.nio.fs.DynamicFileAttributeView + sun.nio.fs.AbstractBasicFileAttributeView + sun.nio.fs.WindowsFileAttributeViews$Basic + java.nio.file.attribute.DosFileAttributes + sun.nio.fs.WindowsFileAttributes + sun.nio.fs.NativeBuffers + jdk.internal.misc.TerminatingThreadLocal + sun.nio.fs.NativeBuffers$1 + jdk.internal.misc.TerminatingThreadLocal$1 + java.lang.ThreadLocal$ThreadLocalMap + java.lang.ThreadLocal$ThreadLocalMap$Entry + java.util.IdentityHashMap + java.util.IdentityHashMap$KeySet + sun.nio.fs.NativeBuffer + sun.nio.fs.NativeBuffer$Deallocator + sun.nio.fs.WindowsNativeDispatcher + jdk.internal.loader.NativeLibraries$LibraryPaths + jdk.internal.loader.NativeLibraries$1 + java.util.ArrayDeque$DeqIterator + jdk.internal.loader.NativeLibrary + jdk.internal.loader.NativeLibraries$NativeLibraryImpl + java.util.concurrent.ConcurrentHashMap$CollectionView + java.util.concurrent.ConcurrentHashMap$ValuesView + java.util.concurrent.ConcurrentHashMap$Traverser + java.util.concurrent.ConcurrentHashMap$BaseIterator + java.util.Enumeration + java.util.concurrent.ConcurrentHashMap$ValueIterator + sun.nio.fs.WindowsNativeDispatcher$FirstFile + sun.nio.fs.WindowsNativeDispatcher$FirstStream + sun.nio.fs.WindowsNativeDispatcher$VolumeInformation + sun.nio.fs.WindowsNativeDispatcher$DiskFreeSpace + sun.nio.fs.WindowsNativeDispatcher$Account + sun.nio.fs.WindowsNativeDispatcher$AclInformation + sun.nio.fs.WindowsNativeDispatcher$CompletionStatus + java.io.DataOutput + java.io.DataInput + java.io.RandomAccessFile + jdk.internal.access.JavaIORandomAccessFileAccess + java.io.RandomAccessFile$2 + java.io.FileCleanable + java.util.zip.ZipFile$Source$End + java.util.zip.ZipUtils + java.util.concurrent.TimeUnit + java.nio.file.attribute.FileTime + jdk.internal.perf.PerfCounter + jdk.internal.perf.Perf$GetPerfAction + jdk.internal.perf.Perf + jdk.internal.perf.PerfCounter$CoreCounters + sun.nio.ch.DirectBuffer + java.nio.MappedByteBuffer + java.nio.DirectByteBuffer + java.nio.Bits + java.util.concurrent.atomic.AtomicLong + jdk.internal.misc.VM$BufferPool + java.nio.Bits$1 + java.nio.LongBuffer + java.nio.DirectLongBufferU + java.util.zip.ZipEntry + java.util.jar.JarEntry + java.util.jar.JarFile$JarFileEntry + java.util.zip.ZipFile$ZipFileInputStream + java.util.zip.InflaterInputStream + java.util.zip.ZipFile$ZipFileInflaterInputStream + java.util.zip.Inflater + java.util.zip.Inflater$InflaterZStreamRef + java.util.zip.ZipFile$InflaterCleanupAction + sun.security.util.SignatureFileVerifier + sun.security.util.Debug + sun.security.action.GetIntegerAction + java.util.jar.JarVerifier + java.security.CodeSigner + java.io.ByteArrayOutputStream + java.util.jar.Attributes + java.util.LinkedHashMap + java.util.jar.Manifest$FastInputStream + java.util.jar.Attributes$Name + java.io.RandomAccessFile$1 + sun.net.util.URLUtil + java.security.PrivilegedExceptionAction + jdk.internal.loader.URLClassPath$3 + jdk.internal.loader.URLClassPath$Loader + jdk.internal.loader.URLClassPath$JarLoader + jdk.internal.loader.URLClassPath$JarLoader$1 + jdk.internal.loader.FileURLMapper + java.lang.Readable + java.nio.CharBuffer + java.nio.HeapCharBuffer + sun.nio.cs.UTF_8$Decoder + java.nio.charset.CoderResult + jdk.internal.util.jar.JarIndex + java.util.StringTokenizer + jdk.internal.loader.Resource + jdk.internal.loader.URLClassPath$JarLoader$2 + java.lang.NamedPackage + java.lang.Package + java.lang.Package$VersionInfo + sun.nio.ByteBuffered + java.util.zip.Checksum + java.util.zip.CRC32 + java.util.zip.Checksum$1 + java.security.SecureClassLoader$CodeSourceKey + java.security.SecureClassLoader$1 + java.security.PermissionCollection + sun.security.util.LazyCodeSourcePermissionCollection + java.security.Permissions + java.lang.RuntimePermission + java.security.BasicPermissionCollection + java.security.AllPermission + java.security.UnresolvedPermission + java.security.SecureClassLoader$DebugHolder + org.apache.maven.surefire.booter.ForkedBooter%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-booter/3.5.4/surefire-booter-3.5.4.jar + org.apache.maven.surefire.api.fork.ForkNodeArguments%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-api/3.5.4/surefire-api-3.5.4.jar + org.apache.maven.plugin.surefire.log.api.ConsoleLogger%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-logger-api/3.5.4/surefire-logger-api-3.5.4.jar + org.apache.maven.surefire.api.provider.CommandListener%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-api/3.5.4/surefire-api-3.5.4.jar + java.util.concurrent.Executor + java.util.concurrent.ExecutorService + java.util.concurrent.ScheduledExecutorService + java.io.IOException + java.util.concurrent.ConcurrentHashMap$ForwardingNode + java.lang.InterruptedException + org.apache.maven.surefire.api.report.ReporterFactory%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-api/3.5.4/surefire-api-3.5.4.jar + org.apache.maven.surefire.api.provider.CommandChainReader%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-api/3.5.4/surefire-api-3.5.4.jar + java.lang.SecurityException + java.security.AccessControlException + java.lang.PublicMethods$MethodList + java.lang.PublicMethods$Key + java.util.concurrent.Semaphore + java.util.concurrent.locks.AbstractQueuedSynchronizer + java.util.concurrent.Semaphore$Sync + java.util.concurrent.Semaphore$NonfairSync + org.apache.maven.surefire.booter.BooterDeserializer%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-booter/3.5.4/surefire-booter-3.5.4.jar + org.apache.maven.surefire.booter.SystemPropertyManager%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-booter/3.5.4/surefire-booter-3.5.4.jar + java.util.Properties$LineReader + java.util.Properties$EntrySet + java.util.concurrent.ConcurrentHashMap$EntrySetView + java.util.Collections$SynchronizedCollection + java.util.Collections$SynchronizedSet + java.util.concurrent.ConcurrentHashMap$EntryIterator + java.util.concurrent.ConcurrentHashMap$MapEntry + java.util.Collections$UnmodifiableCollection$1 + org.apache.maven.surefire.booter.KeyValueSource%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-booter/3.5.4/surefire-booter-3.5.4.jar + org.apache.maven.surefire.booter.PropertiesWrapper%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-booter/3.5.4/surefire-booter-3.5.4.jar + java.lang.IllegalStateException + java.io.FileInputStream$1 + org.apache.maven.surefire.booter.TypeEncodedValue%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-booter/3.5.4/surefire-booter-3.5.4.jar + org.apache.maven.surefire.api.testset.DirectoryScannerParameters%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-api/3.5.4/surefire-api-3.5.4.jar + org.apache.maven.surefire.api.util.RunOrder%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-api/3.5.4/surefire-api-3.5.4.jar + org.apache.maven.surefire.api.testset.RunOrderParameters%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-api/3.5.4/surefire-api-3.5.4.jar + org.apache.maven.surefire.api.testset.TestArtifactInfo%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-api/3.5.4/surefire-api-3.5.4.jar + org.apache.maven.surefire.api.testset.TestRequest%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-api/3.5.4/surefire-api-3.5.4.jar + org.apache.maven.surefire.api.testset.TestFilter%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-api/3.5.4/surefire-api-3.5.4.jar + org.apache.maven.surefire.api.testset.GenericTestPattern%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-api/3.5.4/surefire-api-3.5.4.jar + org.apache.maven.surefire.api.testset.TestListResolver%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-api/3.5.4/surefire-api-3.5.4.jar + java.util.Collections$SingletonSet + org.apache.maven.surefire.api.testset.IncludedExcludedPatterns%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-api/3.5.4/surefire-api-3.5.4.jar + java.util.LinkedHashSet + java.util.Collections$1 + org.apache.maven.surefire.shared.utils.StringUtils%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-shared-utils/3.5.4/surefire-shared-utils-3.5.4.jar + java.lang.IndexOutOfBoundsException + java.lang.StringIndexOutOfBoundsException + org.apache.maven.surefire.api.testset.ResolvedTest%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-api/3.5.4/surefire-api-3.5.4.jar + org.apache.maven.surefire.api.testset.ResolvedTest$Type%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-api/3.5.4/surefire-api-3.5.4.jar + org.apache.maven.surefire.api.testset.ResolvedTest$ClassMatcher%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-api/3.5.4/surefire-api-3.5.4.jar + org.apache.maven.surefire.api.testset.ResolvedTest$MethodMatcher%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-api/3.5.4/surefire-api-3.5.4.jar + org.apache.maven.surefire.api.report.ReporterConfiguration%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-api/3.5.4/surefire-api-3.5.4.jar + org.apache.maven.surefire.api.booter.Shutdown%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-api/3.5.4/surefire-api-3.5.4.jar + java.lang.Class$3 + jdk.internal.reflect.NativeMethodAccessorImpl + jdk.internal.reflect.DelegatingMethodAccessorImpl + org.apache.maven.surefire.booter.ProviderConfiguration%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-booter/3.5.4/surefire-booter-3.5.4.jar + org.apache.maven.surefire.api.cli.CommandLineOption%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-api/3.5.4/surefire-api-3.5.4.jar + org.apache.maven.surefire.api.booter.DumpErrorSingleton%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-api/3.5.4/surefire-api-3.5.4.jar + org.apache.maven.surefire.api.util.internal.DumpFileUtils%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-api/3.5.4/surefire-api-3.5.4.jar + java.lang.management.ManagementFactory + java.lang.IncompatibleClassChangeError + java.lang.NoSuchMethodError + java.lang.invoke.LambdaForm$DMH/0x000002bb4b006000 + java.lang.management.ManagementFactory$$Lambda$4/0x000002bb4b044878 + java.lang.management.PlatformManagedObject + java.lang.management.RuntimeMXBean + java.lang.management.ManagementFactory$PlatformMBeanFinder + java.lang.management.ManagementFactory$PlatformMBeanFinder$1 + java.io.FilePermission + jdk.internal.access.JavaIOFilePermissionAccess + java.io.FilePermission$1 + sun.security.util.FilePermCompat + sun.security.util.SecurityProperties + java.security.Security + java.security.Security$1 + jdk.internal.access.JavaSecurityPropertiesAccess + java.security.Security$2 + sun.management.spi.PlatformMBeanProvider + java.util.ServiceLoader + java.util.ServiceLoader$ModuleServicesLookupIterator + java.util.ServiceLoader$LazyClassPathLookupIterator + java.util.ServiceLoader$2 + java.util.ServiceLoader$3 + java.util.concurrent.CopyOnWriteArrayList$COWIterator + com.sun.management.internal.PlatformMBeanProviderImpl + java.util.ServiceLoader$1 + java.util.ServiceLoader$Provider + java.util.ServiceLoader$ProviderImpl + com.sun.management.internal.PlatformMBeanProviderImpl$$Lambda$5/0x000002bb4b045ec8 + sun.management.spi.PlatformMBeanProvider$PlatformComponent + com.sun.management.internal.PlatformMBeanProviderImpl$1 + java.util.stream.BaseStream + java.util.stream.Stream + java.util.Spliterators + java.util.Spliterators$EmptySpliterator + java.util.Spliterator + java.util.Spliterators$EmptySpliterator$OfRef + java.util.Spliterator$OfPrimitive + java.util.Spliterator$OfInt + java.util.Spliterators$EmptySpliterator$OfInt + java.util.Spliterator$OfLong + java.util.Spliterators$EmptySpliterator$OfLong + java.util.Spliterator$OfDouble + java.util.Spliterators$EmptySpliterator$OfDouble + java.util.Spliterators$ArraySpliterator + java.util.stream.StreamSupport + java.util.stream.PipelineHelper + java.util.stream.AbstractPipeline + java.util.stream.ReferencePipeline + java.util.stream.ReferencePipeline$Head + java.util.stream.StreamOpFlag + java.util.stream.StreamOpFlag$Type + java.util.stream.StreamOpFlag$MaskBuilder + java.util.EnumMap + java.util.EnumMap$1 + sun.reflect.annotation.AnnotationParser + java.util.stream.Collectors + java.util.stream.Collector$Characteristics + java.util.EnumSet + java.util.RegularEnumSet + java.util.stream.Collector + java.util.stream.Collectors$CollectorImpl + java.util.stream.Collectors$$Lambda$5/0x800000010 + java.util.function.BiConsumer + java.lang.invoke.DirectMethodHandle$Interface + java.util.stream.Collectors$$Lambda$6/0x800000011 + java.util.function.BinaryOperator + java.util.stream.Collectors$$Lambda$7/0x800000016 + java.util.stream.Collectors$$Lambda$8/0x800000017 + java.util.stream.ReduceOps + java.util.stream.TerminalOp + java.util.stream.ReduceOps$ReduceOp + java.util.stream.ReduceOps$3 + java.util.stream.StreamShape + java.util.stream.ReduceOps$Box + java.util.function.Consumer + java.util.stream.Sink + java.util.stream.TerminalSink + java.util.stream.ReduceOps$AccumulatingSink + java.util.stream.ReduceOps$3ReducingSink + com.sun.management.internal.PlatformMBeanProviderImpl$2 + com.sun.management.internal.PlatformMBeanProviderImpl$3 + com.sun.management.internal.PlatformMBeanProviderImpl$4 + javax.management.DynamicMBean + com.sun.management.DiagnosticCommandMBean + javax.management.NotificationBroadcaster + javax.management.NotificationEmitter + sun.management.NotificationEmitterSupport + com.sun.management.internal.DiagnosticCommandImpl + sun.management.ManagementFactoryHelper + sun.management.VMManagement + sun.management.VMManagementImpl + com.sun.management.internal.PlatformMBeanProviderImpl$5 + java.util.Collections$UnmodifiableList + java.util.Collections$UnmodifiableRandomAccessList + jdk.management.jfr.internal.FlightRecorderMXBeanProvider + java.util.concurrent.Callable + java.util.Collections$EmptyEnumeration + java.lang.management.DefaultPlatformMBeanProvider + java.lang.management.DefaultPlatformMBeanProvider$1 + java.lang.management.DefaultPlatformMBeanProvider$2 + java.lang.management.DefaultPlatformMBeanProvider$3 + java.lang.management.DefaultPlatformMBeanProvider$4 + java.lang.management.DefaultPlatformMBeanProvider$5 + java.lang.management.DefaultPlatformMBeanProvider$6 + java.lang.management.DefaultPlatformMBeanProvider$7 + java.lang.management.DefaultPlatformMBeanProvider$8 + sun.management.ManagementFactoryHelper$LoggingMXBeanAccess + sun.management.ManagementFactoryHelper$LoggingMXBeanAccess$1 + java.util.logging.LogManager + java.lang.management.DefaultPlatformMBeanProvider$9 + java.lang.management.DefaultPlatformMBeanProvider$10 + java.lang.management.DefaultPlatformMBeanProvider$11 + jdk.management.jfr.FlightRecorderMXBean + jdk.management.jfr.internal.FlightRecorderMXBeanProvider$SingleMBeanComponent + java.util.Collections$SingletonList + java.util.HashMap$Values + java.util.HashMap$HashMapSpliterator + java.util.HashMap$ValueSpliterator + java.util.function.Predicate + java.lang.management.ManagementFactory$PlatformMBeanFinder$$Lambda$10/0x000002bb4b04b790 + java.util.stream.ReferencePipeline$StatelessOp + java.util.stream.ReferencePipeline$2 + java.lang.management.ManagementFactory$PlatformMBeanFinder$$Lambda$11/0x000002bb4b04b9e0 + java.util.stream.ReduceOps$2 + java.util.stream.ReduceOps$2ReducingSink + java.util.stream.Sink$ChainedReference + java.util.stream.ReferencePipeline$2$1 + sun.management.RuntimeImpl + java.util.Collections$SingletonMap + java.util.Collections$2 + java.lang.invoke.LambdaForm$DMH/0x000002bb4b006400 + sun.management.spi.PlatformMBeanProvider$PlatformComponent$$Lambda$12/0x000002bb4b04c7a8 + sun.management.spi.PlatformMBeanProvider$PlatformComponent$$Lambda$13/0x000002bb4b04c9f8 + java.util.stream.ReferencePipeline$3 + java.util.stream.Collectors$$Lambda$14/0x000002bb4b04cc38 + java.util.stream.Collectors$$Lambda$15/0x000002bb4b04ce50 + java.util.stream.Collectors$$Lambda$16/0x000002bb4b04d078 + java.util.stream.ReferencePipeline$3$1 + sun.management.Util + java.lang.management.ManagementPermission + org.apache.maven.surefire.booter.ClassLoaderConfiguration%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-booter/3.5.4/surefire-booter-3.5.4.jar + org.apache.maven.surefire.booter.AbstractPathConfiguration%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-booter/3.5.4/surefire-booter-3.5.4.jar + org.apache.maven.surefire.booter.ClasspathConfiguration%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-booter/3.5.4/surefire-booter-3.5.4.jar + org.apache.maven.surefire.booter.Classpath%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-booter/3.5.4/surefire-booter-3.5.4.jar + java.net.MalformedURLException + java.net.URLClassLoader + org.apache.maven.surefire.booter.IsolatedClassLoader%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-booter/3.5.4/surefire-booter-3.5.4.jar + org.apache.maven.surefire.booter.SurefireExecutionException%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-booter/3.5.4/surefire-booter-3.5.4.jar + org.apache.maven.surefire.booter.ProcessCheckerType%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-booter/3.5.4/surefire-booter-3.5.4.jar + org.apache.maven.surefire.booter.StartupConfiguration%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-booter/3.5.4/surefire-booter-3.5.4.jar + org.apache.maven.surefire.spi.MasterProcessChannelProcessorFactory%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-extensions-spi/3.5.4/surefire-extensions-spi-3.5.4.jar + java.util.Spliterators$1Adapter + java.util.HashMap$ValueIterator + jdk.internal.module.Resources + jdk.internal.loader.BuiltinClassLoader$2 + jdk.internal.loader.BuiltinClassLoader$5 + java.lang.module.ModuleReader + jdk.internal.module.SystemModuleFinders$SystemModuleReader + jdk.internal.module.SystemModuleFinders$SystemImage + jdk.internal.jimage.ImageReaderFactory + java.nio.file.Paths + java.nio.file.FileSystems + java.nio.file.FileSystems$DefaultFileSystemHolder + java.nio.file.FileSystems$DefaultFileSystemHolder$1 + java.net.URI$Parser + jdk.internal.jimage.ImageReaderFactory$1 + jdk.internal.jimage.ImageReader + jdk.internal.jimage.BasicImageReader + jdk.internal.jimage.ImageReader$SharedImageReader + jdk.internal.jimage.BasicImageReader$1 + jdk.internal.jimage.NativeImageBuffer + jdk.internal.jimage.NativeImageBuffer$1 + jdk.internal.jimage.ImageHeader + java.nio.IntBuffer + java.nio.DirectIntBufferU + java.nio.DirectByteBufferR + java.nio.DirectIntBufferRU + jdk.internal.jimage.ImageStrings + jdk.internal.jimage.ImageStringsReader + jdk.internal.jimage.decompressor.Decompressor + jdk.internal.jimage.ImageLocation + java.util.Collections$EmptyIterator + jdk.internal.loader.BuiltinClassLoader$1 + java.lang.CompoundEnumeration + jdk.internal.loader.URLClassPath$1 + jdk.internal.loader.URLClassPath$FileLoader + java.util.SortedSet + java.util.NavigableSet + java.util.TreeSet + java.util.SortedMap + java.util.NavigableMap + java.util.TreeMap + java.util.TreeMap$Entry + java.util.TreeMap$KeySet + java.util.TreeMap$PrivateEntryIterator + java.util.TreeMap$KeyIterator + java.io.Reader + java.io.BufferedReader + java.io.InputStreamReader + sun.nio.cs.StreamDecoder + java.util.Vector + java.util.AbstractSequentialList + java.util.LinkedList + java.util.LinkedList$Node + java.net.URLConnection + java.net.JarURLConnection + sun.net.www.protocol.jar.JarURLConnection + sun.net.www.protocol.jar.URLJarFile$URLJarFileCloseController + sun.net.www.protocol.jar.JarFileFactory + sun.net.www.URLConnection + sun.net.www.protocol.file.FileURLConnection + sun.net.www.MessageHeader + sun.net.www.protocol.jar.URLJarFile + sun.net.www.protocol.jar.URLJarFile$URLJarFileEntry + sun.net.www.protocol.jar.JarURLConnection$JarURLInputStream + java.util.LinkedHashMap$LinkedKeySet + java.util.LinkedHashMap$LinkedHashIterator + java.util.LinkedHashMap$LinkedKeyIterator + org.apache.maven.surefire.booter.spi.AbstractMasterProcessChannelProcessorFactory%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-booter/3.5.4/surefire-booter-3.5.4.jar + org.apache.maven.surefire.booter.spi.LegacyMasterProcessChannelProcessorFactory%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-booter/3.5.4/surefire-booter-3.5.4.jar + org.apache.maven.surefire.api.booter.MasterProcessChannelEncoder%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-api/3.5.4/surefire-api-3.5.4.jar + org.apache.maven.surefire.api.booter.MasterProcessChannelDecoder%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-api/3.5.4/surefire-api-3.5.4.jar + org.apache.maven.surefire.api.util.internal.DaemonThreadFactory%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-api/3.5.4/surefire-api-3.5.4.jar + java.util.concurrent.Executors + java.util.concurrent.Executors$DefaultThreadFactory + org.apache.maven.surefire.api.util.internal.DaemonThreadFactory$NamedThreadFactory%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-api/3.5.4/surefire-api-3.5.4.jar + java.util.concurrent.AbstractExecutorService + java.util.concurrent.ThreadPoolExecutor + java.util.concurrent.ScheduledThreadPoolExecutor + java.util.concurrent.RejectedExecutionHandler + java.util.concurrent.ThreadPoolExecutor$AbortPolicy + java.util.concurrent.BlockingQueue + java.util.AbstractQueue + java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue + java.util.concurrent.Future + java.util.concurrent.RunnableFuture + java.util.concurrent.Delayed + java.util.concurrent.ScheduledFuture + java.util.concurrent.RunnableScheduledFuture + java.util.concurrent.locks.ReentrantLock$Sync + java.util.concurrent.locks.ReentrantLock$NonfairSync + java.util.concurrent.locks.Condition + java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject + org.apache.maven.surefire.booter.spi.SurefireMasterProcessChannelProcessorFactory%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-booter/3.5.4/surefire-booter-3.5.4.jar + java.net.URISyntaxException + java.util.concurrent.ExecutionException + java.net.SocketAddress + java.net.InetSocketAddress + java.nio.channels.Channel + java.nio.channels.AsynchronousChannel + java.nio.channels.AsynchronousByteChannel + org.apache.maven.surefire.booter.ForkedNodeArg%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-booter/3.5.4/surefire-booter-3.5.4.jar + java.lang.UnsupportedOperationException + org.apache.maven.plugin.surefire.log.api.NullConsoleLogger%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-logger-api/3.5.4/surefire-logger-api-3.5.4.jar + org.apache.maven.surefire.api.util.internal.Channels%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-api/3.5.4/surefire-api-3.5.4.jar + org.apache.maven.surefire.api.util.internal.Channels$2%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-api/3.5.4/surefire-api-3.5.4.jar + org.apache.maven.surefire.api.util.internal.Channels$1%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-api/3.5.4/surefire-api-3.5.4.jar + java.nio.channels.ReadableByteChannel + java.nio.channels.WritableByteChannel + org.apache.maven.surefire.api.util.internal.WritableBufferedByteChannel%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-api/3.5.4/surefire-api-3.5.4.jar + org.apache.maven.surefire.api.util.internal.AbstractNoninterruptibleWritableChannel%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-api/3.5.4/surefire-api-3.5.4.jar + org.apache.maven.surefire.api.util.internal.Channels$4%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-api/3.5.4/surefire-api-3.5.4.jar + java.nio.channels.ClosedChannelException + java.nio.channels.NonWritableChannelException + org.apache.maven.surefire.booter.spi.AbstractMasterProcessChannelProcessorFactory$1%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-booter/3.5.4/surefire-booter-3.5.4.jar + java.util.concurrent.FutureTask + java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask + java.lang.invoke.VarHandles + java.lang.ClassValue + java.lang.invoke.VarHandles$1 + java.lang.ClassValue$Entry + java.lang.ClassValue$Identity + java.lang.ClassValue$Version + java.lang.invoke.VarHandleInts$FieldInstanceReadOnly + java.lang.invoke.VarHandleInts$FieldInstanceReadWrite + java.lang.invoke.VarHandle$1 + jdk.internal.util.Preconditions$1 + java.lang.invoke.VarHandleGuards + java.lang.invoke.VarForm + java.lang.invoke.VarHandleReferences$FieldInstanceReadOnly + java.lang.invoke.VarHandleReferences$FieldInstanceReadWrite + java.util.concurrent.FutureTask$WaitNode + java.util.concurrent.Executors$RunnableAdapter + java.util.concurrent.ThreadPoolExecutor$Worker + java.lang.Thread$State + java.util.concurrent.TimeUnit$1 + java.time.temporal.TemporalUnit + java.time.temporal.ChronoUnit + java.time.temporal.TemporalAmount + java.time.Duration + java.math.BigInteger + java.lang.invoke.VarHandle$AccessDescriptor + org.apache.maven.surefire.api.stream.AbstractStreamEncoder%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-api/3.5.4/surefire-api-3.5.4.jar + org.apache.maven.surefire.booter.stream.EventEncoder%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-booter/3.5.4/surefire-booter-3.5.4.jar + org.apache.maven.surefire.booter.spi.EventChannelEncoder%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-booter/3.5.4/surefire-booter-3.5.4.jar + java.util.concurrent.ForkJoinPool$ManagedBlocker + java.util.concurrent.locks.AbstractQueuedSynchronizer$Node + java.lang.AssertionError + java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode + org.apache.maven.surefire.api.booter.ForkedProcessEventType%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-api/3.5.4/surefire-api-3.5.4.jar + org.apache.maven.surefire.api.report.ReportEntry%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-api/3.5.4/surefire-api-3.5.4.jar + java.util.concurrent.atomic.AtomicBoolean + org.apache.maven.surefire.booter.spi.CommandChannelDecoder%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-booter/3.5.4/surefire-booter-3.5.4.jar + org.apache.maven.surefire.api.stream.MalformedChannelException%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-api/3.5.4/surefire-api-3.5.4.jar + org.apache.maven.surefire.api.stream.AbstractStreamDecoder%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-api/3.5.4/surefire-api-3.5.4.jar + org.apache.maven.surefire.booter.stream.CommandDecoder%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-booter/3.5.4/surefire-booter-3.5.4.jar + org.apache.maven.surefire.api.util.internal.AbstractNoninterruptibleReadableChannel%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-api/3.5.4/surefire-api-3.5.4.jar + org.apache.maven.surefire.api.util.internal.Channels$3%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-api/3.5.4/surefire-api-3.5.4.jar + java.nio.channels.NonReadableChannelException + java.io.EOFException + org.apache.maven.surefire.api.stream.AbstractStreamDecoder$MalformedFrameException%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-api/3.5.4/surefire-api-3.5.4.jar + org.apache.maven.surefire.api.stream.SegmentType%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-api/3.5.4/surefire-api-3.5.4.jar + java.io.FileNotFoundException + org.apache.maven.surefire.api.booter.Constants%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-api/3.5.4/surefire-api-3.5.4.jar + org.apache.maven.surefire.api.booter.MasterProcessCommand%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-api/3.5.4/surefire-api-3.5.4.jar + org.apache.maven.surefire.api.stream.AbstractStreamDecoder$Segment%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-api/3.5.4/surefire-api-3.5.4.jar + org.apache.maven.surefire.booter.ForkedBooter$8%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-booter/3.5.4/surefire-booter-3.5.4.jar + org.apache.maven.surefire.shared.utils.cli.ShutdownHookUtils%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-shared-utils/3.5.4/surefire-shared-utils-3.5.4.jar + java.lang.ApplicationShutdownHooks + java.lang.ApplicationShutdownHooks$1 + java.lang.Shutdown + java.lang.Shutdown$Lock + org.apache.maven.surefire.api.booter.ForkingReporterFactory%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-api/3.5.4/surefire-api-3.5.4.jar + org.apache.maven.surefire.api.report.RunListener%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-api/3.5.4/surefire-api-3.5.4.jar + org.apache.maven.surefire.api.report.TestOutputReceiver%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-api/3.5.4/surefire-api-3.5.4.jar + org.apache.maven.surefire.api.report.TestReportListener%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-api/3.5.4/surefire-api-3.5.4.jar + org.apache.maven.surefire.api.booter.ForkingRunListener%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-api/3.5.4/surefire-api-3.5.4.jar + org.apache.maven.surefire.booter.CommandReader%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-booter/3.5.4/surefire-booter-3.5.4.jar + org.apache.maven.surefire.api.testset.TestSetFailedException%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-api/3.5.4/surefire-api-3.5.4.jar + java.util.concurrent.ConcurrentLinkedQueue + java.util.concurrent.ConcurrentLinkedQueue$Node + org.apache.maven.surefire.booter.CommandReader$CommandRunnable%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-booter/3.5.4/surefire-booter-3.5.4.jar + java.util.concurrent.atomic.AtomicReference + java.util.concurrent.CountDownLatch + java.util.concurrent.CountDownLatch$Sync + org.apache.maven.surefire.booter.PpidChecker%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-booter/3.5.4/surefire-booter-3.5.4.jar + org.apache.maven.surefire.api.stream.AbstractStreamDecoder$Memento%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-api/3.5.4/surefire-api-3.5.4.jar + org.apache.maven.surefire.booter.PpidChecker$ProcessInfoConsumer%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-booter/3.5.4/surefire-booter-3.5.4.jar + org.apache.maven.surefire.api.stream.AbstractStreamDecoder$BufferedStream%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-api/3.5.4/surefire-api-3.5.4.jar + org.apache.maven.surefire.booter.PpidChecker$2%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-booter/3.5.4/surefire-booter-3.5.4.jar + org.apache.maven.surefire.booter.PpidChecker$1%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-booter/3.5.4/surefire-booter-3.5.4.jar + org.apache.maven.surefire.api.stream.AbstractStreamDecoder$StreamReadStatus%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-api/3.5.4/surefire-api-3.5.4.jar + org.apache.maven.surefire.booter.stream.CommandDecoder$1%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-booter/3.5.4/surefire-booter-3.5.4.jar + java.lang.NoSuchFieldError + org.apache.maven.surefire.shared.lang3.SystemUtils%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-shared-utils/3.5.4/surefire-shared-utils-3.5.4.jar + org.apache.maven.surefire.api.booter.Command%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-api/3.5.4/surefire-api-3.5.4.jar + org.apache.maven.surefire.booter.CommandReader$1%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-booter/3.5.4/surefire-booter-3.5.4.jar + java.util.concurrent.ConcurrentLinkedQueue$Itr + org.apache.maven.surefire.shared.lang3.SystemProperties%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-shared-utils/3.5.4/surefire-shared-utils-3.5.4.jar + org.apache.maven.surefire.shared.lang3.function.Suppliers%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-shared-utils/3.5.4/surefire-shared-utils-3.5.4.jar + org.apache.maven.surefire.shared.lang3.function.Suppliers$$Lambda$17/0x000002bb4b00f850 + org.apache.maven.surefire.shared.lang3.StringUtils%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-shared-utils/3.5.4/surefire-shared-utils-3.5.4.jar + java.util.regex.Pattern + java.util.regex.Pattern$Node + java.util.regex.Pattern$LastNode + java.util.regex.Pattern$GroupHead + java.util.regex.CharPredicates + java.lang.Character$Subset + java.lang.Character$UnicodeBlock + java.util.regex.Pattern$CharPredicate + java.lang.invoke.LambdaForm$DMH/0x000002bb4b010000 + java.util.regex.CharPredicates$$Lambda$18/0x000002bb4b05b1d8 + java.util.regex.Pattern$BmpCharPredicate + java.util.regex.Pattern$CharProperty + java.util.regex.Pattern$Qtype + java.util.regex.Pattern$BmpCharProperty + java.util.regex.Pattern$CharPropertyGreedy + java.util.regex.Pattern$SliceNode + java.util.regex.Pattern$Slice + java.util.regex.Pattern$Begin + java.util.regex.Pattern$First + java.util.regex.Pattern$Start + java.util.regex.Pattern$StartS + java.util.regex.Pattern$TreeInfo + org.apache.maven.surefire.shared.lang3.JavaVersion%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-shared-utils/3.5.4/surefire-shared-utils-3.5.4.jar + org.apache.maven.surefire.shared.lang3.SystemProperties$$Lambda$19/0x000002bb4b014000 + org.apache.maven.surefire.shared.lang3.math.NumberUtils%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-shared-utils/3.5.4/surefire-shared-utils-3.5.4.jar + java.lang.NumberFormatException + java.math.BigDecimal + java.lang.Long$LongCache + java.lang.Short$ShortCache + java.lang.Byte$ByteCache + jdk.internal.math.FloatingDecimal + jdk.internal.math.FloatingDecimal$BinaryToASCIIConverter + jdk.internal.math.FloatingDecimal$ExceptionalBinaryToASCIIBuffer + jdk.internal.math.FloatingDecimal$BinaryToASCIIBuffer + jdk.internal.math.FloatingDecimal$1 + jdk.internal.math.FloatingDecimal$ASCIIToBinaryConverter + jdk.internal.math.FloatingDecimal$PreparedASCIIToBinaryBuffer + jdk.internal.math.FloatingDecimal$ASCIIToBinaryBuffer + jdk.internal.math.FDBigInteger + org.apache.maven.surefire.shared.lang3.SystemUtils$$Lambda$20/0x000002bb4b014610 + org.apache.maven.surefire.shared.lang3.Strings%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-shared-utils/3.5.4/surefire-shared-utils-3.5.4.jar + org.apache.maven.surefire.shared.lang3.Strings$CiStrings%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-shared-utils/3.5.4/surefire-shared-utils-3.5.4.jar + org.apache.maven.surefire.shared.lang3.Strings$CsStrings%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-shared-utils/3.5.4/surefire-shared-utils-3.5.4.jar + org.apache.maven.surefire.shared.lang3.CharSequenceUtils%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-shared-utils/3.5.4/surefire-shared-utils-3.5.4.jar + java.text.Format + java.text.DateFormat + java.text.SimpleDateFormat + java.text.AttributedCharacterIterator$Attribute + java.text.Format$Field + java.text.DateFormat$Field + java.util.Locale$Category + java.util.Calendar + java.util.TimeZone + sun.util.calendar.ZoneInfo + sun.util.calendar.ZoneInfoFile + sun.util.calendar.ZoneInfoFile$1 + java.io.DataInputStream + sun.util.calendar.ZoneInfoFile$ZoneOffsetTransitionRule + sun.util.calendar.ZoneInfoFile$Checksum + java.util.spi.LocaleServiceProvider + sun.util.spi.CalendarProvider + sun.util.locale.provider.LocaleProviderAdapter + sun.util.locale.provider.LocaleProviderAdapter$Type + sun.util.locale.provider.LocaleProviderAdapter$1 + sun.util.locale.provider.ResourceBundleBasedAdapter + sun.util.locale.provider.JRELocaleProviderAdapter + sun.util.cldr.CLDRLocaleProviderAdapter + sun.util.locale.provider.LocaleDataMetaInfo + sun.util.cldr.CLDRBaseLocaleDataMetaInfo + sun.util.locale.LanguageTag + sun.util.locale.ParseStatus + sun.util.locale.StringTokenIterator + sun.util.locale.InternalLocaleBuilder + sun.util.locale.InternalLocaleBuilder$CaseInsensitiveChar + sun.util.cldr.CLDRLocaleProviderAdapter$$Lambda$51/0x800000059 + jdk.internal.module.ModulePatcher$PatchedModuleReader + sun.net.www.protocol.jrt.Handler + sun.util.resources.cldr.provider.CLDRLocaleDataMetaInfo + sun.util.locale.provider.JRELocaleProviderAdapter$$Lambda$53/0x80000005b + sun.util.locale.provider.AvailableLanguageTags + sun.util.locale.provider.CalendarProviderImpl + java.util.Calendar$Builder + java.util.GregorianCalendar + sun.util.calendar.CalendarSystem + sun.util.calendar.CalendarSystem$GregorianHolder + sun.util.calendar.AbstractCalendar + sun.util.calendar.BaseCalendar + sun.util.calendar.Gregorian + sun.util.locale.provider.CalendarDataUtility + java.util.Locale$Builder + java.util.spi.CalendarDataProvider + sun.util.locale.provider.LocaleServiceProviderPool + java.text.spi.BreakIteratorProvider + java.text.spi.CollatorProvider + java.text.spi.DateFormatProvider + java.text.spi.DateFormatSymbolsProvider + java.text.spi.DecimalFormatSymbolsProvider + java.text.spi.NumberFormatProvider + java.util.spi.CurrencyNameProvider + java.util.spi.LocaleNameProvider + java.util.spi.TimeZoneNameProvider + sun.util.locale.provider.LocaleServiceProviderPool$LocalizedObjectGetter + sun.util.locale.provider.CalendarDataUtility$CalendarWeekParameterGetter + java.util.ResourceBundle$Control + java.util.ResourceBundle + java.util.ResourceBundle$Control$CandidateListCache + java.util.ResourceBundle$SingleFormatControl + java.util.ResourceBundle$NoFallbackControl + sun.util.cldr.CLDRLocaleProviderAdapter$$Lambda$54/0x80000005c + sun.util.locale.provider.CalendarDataProviderImpl + sun.util.cldr.CLDRCalendarDataProviderImpl + sun.util.locale.provider.LocaleResources + sun.util.resources.LocaleData + sun.util.resources.LocaleData$1 + sun.util.resources.Bundles$Strategy + sun.util.resources.LocaleData$LocaleDataStrategy + sun.util.resources.Bundles + sun.util.resources.Bundles$1 + jdk.internal.access.JavaUtilResourceBundleAccess + java.util.ResourceBundle$1 + java.util.ResourceBundle$2 + sun.util.resources.Bundles$CacheKey + java.util.ListResourceBundle + sun.util.resources.cldr.CalendarData + java.util.ResourceBundle$ResourceBundleProviderHelper + java.util.ResourceBundle$ResourceBundleProviderHelper$$Lambda$55/0x80000005d + sun.util.resources.Bundles$CacheKeyReference + sun.util.resources.Bundles$BundleReference + sun.util.locale.provider.LocaleResources$ResourceReference + sun.util.calendar.CalendarDate + sun.util.calendar.BaseCalendar$Date + sun.util.calendar.Gregorian$Date + sun.util.calendar.CalendarUtils + java.text.DateFormatSymbols + sun.util.locale.provider.JRELocaleProviderAdapter$$Lambda$56/0x80000005e + sun.util.locale.provider.DateFormatSymbolsProviderImpl + java.util.spi.ResourceBundleProvider + sun.util.resources.LocaleData$LocaleDataResourceBundleProvider + sun.util.resources.LocaleData$CommonResourceBundleProvider + java.util.ArrayList$SubList$1 + sun.text.resources.cldr.FormatData + sun.text.resources.cldr.FormatData_en + sun.util.resources.Bundles$2 + sun.util.resources.provider.LocaleDataProvider + java.lang.InstantiationException + java.lang.IllegalAccessException + sun.text.resources.cldr.ext.FormatData_en_001 + sun.text.resources.cldr.ext.FormatData_en_IN + java.text.NumberFormat + sun.util.locale.provider.JRELocaleProviderAdapter$$Lambda$57/0x80000005f + sun.util.locale.provider.NumberFormatProviderImpl + java.text.DecimalFormatSymbols + sun.util.locale.provider.JRELocaleProviderAdapter$$Lambda$58/0x800000060 + sun.util.locale.provider.DecimalFormatSymbolsProviderImpl + java.lang.StringLatin1$CharsSpliterator + java.util.stream.IntStream + java.util.stream.IntPipeline + java.util.stream.IntPipeline$Head + java.util.function.IntPredicate + java.text.DecimalFormatSymbols$$Lambda$59/0x800000061 + java.util.stream.IntPipeline$StatelessOp + java.util.stream.IntPipeline$10 + java.util.stream.FindOps + java.util.stream.FindOps$FindSink + java.util.function.IntConsumer + java.util.stream.Sink$OfInt + java.util.stream.FindOps$FindSink$OfInt + java.util.stream.FindOps$FindOp + java.util.OptionalInt + java.util.stream.FindOps$FindSink$OfInt$$Lambda$62/0x800000064 + java.util.stream.FindOps$FindSink$OfInt$$Lambda$63/0x800000065 + java.util.stream.FindOps$FindSink$OfInt$$Lambda$60/0x800000062 + java.util.stream.FindOps$FindSink$OfInt$$Lambda$61/0x800000063 + java.util.stream.Sink$ChainedInt + java.util.stream.IntPipeline$10$1 + java.lang.StringUTF16$CharsSpliterator + java.lang.CharacterData00 + java.text.DecimalFormat + java.text.FieldPosition + java.text.DigitList + java.math.RoundingMode + java.util.Date + java.util.regex.Pattern$GroupTail + java.util.regex.CharPredicates$$Lambda$20/0x800000029 + java.util.regex.Pattern$BmpCharPropertyGreedy + java.util.regex.Pattern$$Lambda$19/0x800000025 + java.util.regex.Pattern$Ques + java.util.regex.Pattern$BranchConn + java.util.regex.Pattern$Branch + java.util.regex.ASCII + java.util.regex.Pattern$Curly + java.util.regex.CharPredicates$$Lambda$47/0x800000055 + java.util.regex.Pattern$Dollar + java.util.regex.Pattern$BitClass + org.apache.maven.surefire.booter.ForkedBooter$4%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-booter/3.5.4/surefire-booter-3.5.4.jar + org.apache.maven.surefire.api.booter.BiProperty%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-api/3.5.4/surefire-api-3.5.4.jar + org.apache.maven.surefire.booter.ForkedBooter$3%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-booter/3.5.4/surefire-booter-3.5.4.jar + org.apache.maven.surefire.booter.ForkedBooter$PingScheduler%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-booter/3.5.4/surefire-booter-3.5.4.jar + org.apache.maven.surefire.api.provider.ProviderParameters%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-api/3.5.4/surefire-api-3.5.4.jar + org.apache.maven.surefire.api.booter.BaseProviderFactory%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-api/3.5.4/surefire-api-3.5.4.jar + org.apache.maven.surefire.api.util.ScanResult%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-api/3.5.4/surefire-api-3.5.4.jar + org.apache.maven.surefire.api.util.DirectoryScanner%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-api/3.5.4/surefire-api-3.5.4.jar + org.apache.maven.surefire.api.util.RunOrderCalculator%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-api/3.5.4/surefire-api-3.5.4.jar + org.apache.maven.surefire.api.util.ReflectionUtils%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-api/3.5.4/surefire-api-3.5.4.jar + org.apache.maven.surefire.api.util.SurefireReflectionException%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-api/3.5.4/surefire-api-3.5.4.jar + java.lang.reflect.InvocationTargetException + org.apache.maven.surefire.api.provider.SurefireProvider%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-api/3.5.4/surefire-api-3.5.4.jar + org.apache.maven.surefire.api.provider.AbstractProvider%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-api/3.5.4/surefire-api-3.5.4.jar + org.apache.maven.surefire.junitplatform.JUnitPlatformProvider%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-junit-platform/3.5.4/surefire-junit-platform-3.5.4.jar + org.apache.maven.surefire.api.util.ScannerFilter%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-api/3.5.4/surefire-api-3.5.4.jar + java.io.StringReader + java.io.UncheckedIOException + org.apache.maven.surefire.junitplatform.LauncherSessionFactory%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-junit-platform/3.5.4/surefire-junit-platform-3.5.4.jar + org.apache.maven.surefire.junitplatform.CancellationTokenAdapter%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-junit-platform/3.5.4/surefire-junit-platform-3.5.4.jar + org.apache.maven.surefire.junitplatform.LauncherSessionAdapter%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-junit-platform/3.5.4/surefire-junit-platform-3.5.4.jar + org.apache.maven.surefire.junitplatform.LauncherSessionFactory$$Lambda$36/0x000002bb4b017940 + org.junit.platform.launcher.TagFilter%20SAHA/.m2/repository/org/junit/platform/junit-platform-launcher/1.14.0/junit-platform-launcher-1.14.0.jar + org.junit.platform.commons.JUnitException%20SAHA/.m2/repository/org/junit/platform/junit-platform-commons/1.14.0/junit-platform-commons-1.14.0.jar + org.junit.platform.commons.util.PreconditionViolationException%20SAHA/.m2/repository/org/junit/platform/junit-platform-commons/1.14.0/junit-platform-commons-1.14.0.jar + org.junit.platform.commons.PreconditionViolationException%20SAHA/.m2/repository/org/junit/platform/junit-platform-commons/1.14.0/junit-platform-commons-1.14.0.jar + org.junit.platform.engine.Filter%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + org.junit.platform.launcher.PostDiscoveryFilter%20SAHA/.m2/repository/org/junit/platform/junit-platform-launcher/1.14.0/junit-platform-launcher-1.14.0.jar + org.apache.maven.surefire.junitplatform.JUnitPlatformProvider$$Lambda$37/0x000002bb4b0128a0 + org.apache.maven.surefire.junitplatform.JUnitPlatformProvider$$Lambda$38/0x000002bb4b012ad8 + org.apache.maven.surefire.junitplatform.JUnitPlatformProvider$$Lambda$39/0x000002bb4b012d08 + org.apache.maven.surefire.junitplatform.JUnitPlatformProvider$$Lambda$40/0x000002bb4b012f40 + org.apache.maven.surefire.junitplatform.JUnitPlatformProvider$$Lambda$41/0x000002bb4b013170 + org.apache.maven.surefire.junitplatform.JUnitPlatformProvider$$Lambda$42/0x000002bb4b0133b8 + org.apache.maven.surefire.junitplatform.TestMethodFilter%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-junit-platform/3.5.4/surefire-junit-platform-3.5.4.jar + org.apache.maven.surefire.junitplatform.JUnitPlatformProvider$$Lambda$43/0x000002bb4b013858 + org.apache.maven.surefire.junitplatform.JUnitPlatformProvider$$Lambda$44/0x000002bb4b013a90 + org.junit.platform.launcher.EngineFilter%20SAHA/.m2/repository/org/junit/platform/junit-platform-launcher/1.14.0/junit-platform-launcher-1.14.0.jar + org.apache.maven.surefire.junitplatform.JUnitPlatformProvider$$Lambda$45/0x000002bb4b011000 + org.apache.maven.surefire.junitplatform.JUnitPlatformProvider$$Lambda$46/0x000002bb4b011238 + org.apache.maven.surefire.junitplatform.JUnitPlatformProvider$$Lambda$47/0x000002bb4b011468 + org.apache.maven.surefire.junitplatform.JUnitPlatformProvider$$Lambda$48/0x000002bb4b0116a0 + org.junit.platform.engine.ExecutionRequest%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + org.apache.maven.surefire.api.report.Stoppable%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-api/3.5.4/surefire-api-3.5.4.jar + java.lang.invoke.LambdaForm$DMH/0x000002bb4b018000 + org.apache.maven.surefire.api.report.Stoppable$$Lambda$49/0x000002bb4b01c000 + org.junit.platform.launcher.TestExecutionListener%20SAHA/.m2/repository/org/junit/platform/junit-platform-launcher/1.14.0/junit-platform-launcher-1.14.0.jar + org.apache.maven.surefire.report.RunModeSetter%20SAHA/.m2/repository/org/apache/maven/surefire/common-java5/3.5.4/common-java5-3.5.4.jar + org.apache.maven.surefire.junitplatform.RunListenerAdapter%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-junit-platform/3.5.4/surefire-junit-platform-3.5.4.jar + org.apache.maven.surefire.api.report.OutputReportEntry%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-api/3.5.4/surefire-api-3.5.4.jar + org.apache.maven.surefire.api.report.StackTraceWriter%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-api/3.5.4/surefire-api-3.5.4.jar + org.apache.maven.surefire.api.report.TestSetReportEntry%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-api/3.5.4/surefire-api-3.5.4.jar + org.apache.maven.surefire.report.ClassMethodIndexer%20SAHA/.m2/repository/org/apache/maven/surefire/common-java5/3.5.4/common-java5-3.5.4.jar + org.apache.maven.surefire.api.report.RunMode%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-api/3.5.4/surefire-api-3.5.4.jar + org.apache.maven.surefire.api.report.ConsoleOutputCapture%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-api/3.5.4/surefire-api-3.5.4.jar + org.apache.maven.surefire.api.report.ConsoleOutputCapture$ForwardingPrintStream%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-api/3.5.4/surefire-api-3.5.4.jar + org.apache.maven.surefire.api.report.ConsoleOutputCapture$NullOutputStream%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-api/3.5.4/surefire-api-3.5.4.jar + java.util.logging.Logger + java.util.logging.Handler + java.util.logging.Level + java.util.logging.Level$KnownLevel + java.util.logging.Level$KnownLevel$$Lambda$39/0x80000004d + java.util.logging.Level$KnownLevel$$Lambda$40/0x80000004e + java.util.logging.Logger$LoggerBundle + java.util.logging.Logger$ConfigurationData + java.util.logging.LogManager$1 + java.util.logging.LogManager$LoggerContext + java.util.logging.LogManager$SystemLoggerContext + java.util.logging.LogManager$LogNode + java.util.Collections$SynchronizedMap + java.util.logging.LogManager$Cleaner + java.util.logging.LoggingPermission + sun.util.logging.internal.LoggingProviderImpl$LogManagerAccess + java.util.logging.LogManager$LoggingProviderAccess + java.lang.System$LoggerFinder + jdk.internal.logger.DefaultLoggerFinder + sun.util.logging.internal.LoggingProviderImpl + java.util.logging.LogManager$2 + java.util.logging.LogManager$RootLogger + java.util.logging.LogManager$LoggerWeakRef + java.lang.invoke.MethodHandleImpl$AsVarargsCollector + java.lang.invoke.BoundMethodHandle$Species_LL + java.lang.invoke.LambdaForm$MH/0x000002bb4b018400 + java.util.logging.LogManager$VisitedLoggers + java.util.logging.LogManager$LoggerContext$1 + java.util.concurrent.ConcurrentHashMap$KeySetView + java.util.Collections$3 + java.util.concurrent.ConcurrentHashMap$KeyIterator + java.util.Hashtable$Enumerator + java.util.logging.Level$$Lambda$41/0x80000004f + java.util.ArrayList$ArrayListSpliterator + java.util.logging.Level$KnownLevel$$Lambda$42/0x800000050 + java.util.stream.ReferencePipeline$7 + java.util.stream.FindOps$FindSink$OfRef + java.util.stream.FindOps$FindSink$OfRef$$Lambda$13/0x80000001c + java.util.stream.FindOps$FindSink$OfRef$$Lambda$14/0x80000001d + java.util.stream.FindOps$FindSink$OfRef$$Lambda$11/0x80000001a + java.util.stream.FindOps$FindSink$OfRef$$Lambda$12/0x80000001b + java.util.stream.ReferencePipeline$7$1 + java.util.stream.Streams$AbstractStreamBuilderImpl + java.util.stream.Stream$Builder + java.util.stream.Streams$StreamBuilderImpl + java.util.stream.Streams + java.util.IdentityHashMap$Values + java.lang.System$Logger + sun.util.logging.PlatformLogger$Bridge + sun.util.logging.PlatformLogger$ConfigurableBridge + jdk.internal.logger.BootstrapLogger + jdk.internal.logger.BootstrapLogger$DetectBackend + jdk.internal.logger.BootstrapLogger$DetectBackend$1 + jdk.internal.logger.BootstrapLogger$LoggingBackend + jdk.internal.logger.BootstrapLogger$RedirectedLoggers + jdk.internal.logger.BootstrapLogger$BootstrapExecutors + java.util.logging.LogManager$4 + java.util.logging.Logger$SystemLoggerHelper + java.util.logging.Logger$SystemLoggerHelper$1 + jdk.internal.logger.DefaultLoggerFinder$1 + org.junit.platform.launcher.LauncherSession%20SAHA/.m2/repository/org/junit/platform/junit-platform-launcher/1.14.0/junit-platform-launcher-1.14.0.jar + org.junit.platform.launcher.core.LauncherFactory%20SAHA/.m2/repository/org/junit/platform/junit-platform-launcher/1.14.0/junit-platform-launcher-1.14.0.jar + org.junit.platform.launcher.Launcher%20SAHA/.m2/repository/org/junit/platform/junit-platform-launcher/1.14.0/junit-platform-launcher-1.14.0.jar + org.junit.platform.engine.ConfigurationParameters%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + org.junit.platform.launcher.core.LauncherConfig%20SAHA/.m2/repository/org/junit/platform/junit-platform-launcher/1.14.0/junit-platform-launcher-1.14.0.jar + org.junit.platform.launcher.core.LauncherConfig$Builder%20SAHA/.m2/repository/org/junit/platform/junit-platform-launcher/1.14.0/junit-platform-launcher-1.14.0.jar + org.junit.platform.launcher.core.DefaultLauncherConfig%20SAHA/.m2/repository/org/junit/platform/junit-platform-launcher/1.14.0/junit-platform-launcher-1.14.0.jar + org.junit.platform.commons.util.Preconditions%20SAHA/.m2/repository/org/junit/platform/junit-platform-commons/1.14.0/junit-platform-commons-1.14.0.jar + org.junit.platform.launcher.core.LauncherConfigurationParameters%20SAHA/.m2/repository/org/junit/platform/junit-platform-launcher/1.14.0/junit-platform-launcher-1.14.0.jar + org.junit.platform.commons.logging.LoggerFactory%20SAHA/.m2/repository/org/junit/platform/junit-platform-commons/1.14.0/junit-platform-commons-1.14.0.jar + org.junit.platform.commons.logging.Logger%20SAHA/.m2/repository/org/junit/platform/junit-platform-commons/1.14.0/junit-platform-commons-1.14.0.jar + org.junit.platform.commons.logging.LoggerFactory$DelegatingLogger%20SAHA/.m2/repository/org/junit/platform/junit-platform-commons/1.14.0/junit-platform-commons-1.14.0.jar + org.junit.platform.launcher.core.LauncherConfigurationParameters$Builder%20SAHA/.m2/repository/org/junit/platform/junit-platform-launcher/1.14.0/junit-platform-launcher-1.14.0.jar + java.lang.invoke.LambdaForm$DMH/0x000002bb4b018800 + org.junit.platform.launcher.core.LauncherConfigurationParameters$Builder$$Lambda$58/0x000002bb4b01f8c0 + org.junit.platform.commons.util.CollectionUtils%20SAHA/.m2/repository/org/junit/platform/junit-platform-commons/1.14.0/junit-platform-commons-1.14.0.jar + org.junit.platform.launcher.core.LauncherConfigurationParameters$ParameterProvider%20SAHA/.m2/repository/org/junit/platform/junit-platform-launcher/1.14.0/junit-platform-launcher-1.14.0.jar + org.junit.platform.launcher.core.LauncherConfigurationParameters$ParameterProvider$2%20SAHA/.m2/repository/org/junit/platform/junit-platform-launcher/1.14.0/junit-platform-launcher-1.14.0.jar + org.junit.platform.commons.util.StringUtils%20SAHA/.m2/repository/org/junit/platform/junit-platform-commons/1.14.0/junit-platform-commons-1.14.0.jar + org.junit.platform.commons.util.StringUtils$TwoPartSplitResult%20SAHA/.m2/repository/org/junit/platform/junit-platform-commons/1.14.0/junit-platform-commons-1.14.0.jar + java.util.regex.CharPredicates$$Lambda$59/0x000002bb4b060f18 + org.junit.platform.commons.util.ClassLoaderUtils%20SAHA/.m2/repository/org/junit/platform/junit-platform-commons/1.14.0/junit-platform-commons-1.14.0.jar + org.junit.platform.launcher.core.LauncherConfigurationParameters$ParameterProvider$3%20SAHA/.m2/repository/org/junit/platform/junit-platform-launcher/1.14.0/junit-platform-launcher-1.14.0.jar + org.junit.platform.launcher.core.DefaultLauncherSession%20SAHA/.m2/repository/org/junit/platform/junit-platform-launcher/1.14.0/junit-platform-launcher-1.14.0.jar + org.junit.platform.launcher.LauncherInterceptor%20SAHA/.m2/repository/org/junit/platform/junit-platform-launcher/1.14.0/junit-platform-launcher-1.14.0.jar + org.junit.platform.launcher.core.DefaultLauncherSession$1%20SAHA/.m2/repository/org/junit/platform/junit-platform-launcher/1.14.0/junit-platform-launcher-1.14.0.jar + org.junit.platform.launcher.core.LauncherConfigurationParameters$$Lambda$60/0x000002bb4b01b110 + org.junit.platform.launcher.core.LauncherConfigurationParameters$$Lambda$61/0x000002bb4b01b350 + org.junit.platform.launcher.core.LauncherConfigurationParameters$$Lambda$62/0x000002bb4b01b598 + org.junit.platform.launcher.core.ClasspathAlignmentCheckingLauncherInterceptor%20SAHA/.m2/repository/org/junit/platform/junit-platform-launcher/1.14.0/junit-platform-launcher-1.14.0.jar + org.junit.platform.launcher.LauncherSessionListener%20SAHA/.m2/repository/org/junit/platform/junit-platform-launcher/1.14.0/junit-platform-launcher-1.14.0.jar + org.junit.platform.launcher.core.LauncherFactory$$Lambda$63/0x000002bb4b01bbf8 + org.junit.platform.engine.support.store.NamespacedHierarchicalStore%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + org.junit.platform.launcher.core.LauncherFactory$$Lambda$64/0x000002bb4b019220 + org.junit.platform.engine.support.store.NamespacedHierarchicalStoreException%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + org.junit.platform.engine.support.store.NamespacedHierarchicalStore$CloseAction%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + java.lang.invoke.LambdaForm$DMH/0x000002bb4b018c00 + org.junit.platform.engine.support.store.NamespacedHierarchicalStore$CloseAction$$Lambda$65/0x000002bb4b0198b0 + java.util.stream.SliceOps + java.util.stream.ReferencePipeline$StatefulOp + java.util.stream.SliceOps$1 + org.junit.platform.launcher.core.DefaultLauncherSession$$Lambda$66/0x000002bb4b019ac8 + java.util.stream.ReduceOps$1 + java.util.stream.ReduceOps$1ReducingSink + java.util.stream.SliceOps$1$1 + org.junit.platform.launcher.LauncherInterceptor$Invocation%20SAHA/.m2/repository/org/junit/platform/junit-platform-launcher/1.14.0/junit-platform-launcher-1.14.0.jar + java.lang.invoke.LambdaForm$DMH/0x000002bb4b020000 + org.junit.platform.launcher.core.DefaultLauncherSession$$Lambda$67/0x000002bb4b024000 + org.junit.platform.launcher.core.ListenerRegistry%20SAHA/.m2/repository/org/junit/platform/junit-platform-launcher/1.14.0/junit-platform-launcher-1.14.0.jar + org.junit.platform.launcher.listeners.session.LauncherSessionListeners%20SAHA/.m2/repository/org/junit/platform/junit-platform-launcher/1.14.0/junit-platform-launcher-1.14.0.jar + org.junit.platform.launcher.core.ListenerRegistry$$Lambda$68/0x000002bb4b024648 + org.junit.platform.launcher.core.ServiceLoaderRegistry%20SAHA/.m2/repository/org/junit/platform/junit-platform-launcher/1.14.0/junit-platform-launcher-1.14.0.jar + org.junit.platform.launcher.core.ServiceLoaderRegistry$$Lambda$69/0x000002bb4b024a80 + org.junit.platform.launcher.core.ServiceLoaderRegistry$$Lambda$70/0x000002bb4b024cc8 + org.junit.platform.launcher.core.ServiceLoaderRegistry$$Lambda$71/0x000002bb4b024f08 + org.junit.platform.commons.util.ServiceLoaderUtils%20SAHA/.m2/repository/org/junit/platform/junit-platform-commons/1.14.0/junit-platform-commons-1.14.0.jar + java.util.ServiceLoader$ProviderSpliterator + org.junit.platform.commons.util.ServiceLoaderUtils$$Lambda$72/0x000002bb4b025358 + org.junit.platform.commons.util.ServiceLoaderUtils$$Lambda$73/0x000002bb4b0255a8 + org.junit.platform.launcher.core.ServiceLoaderRegistry$$Lambda$74/0x000002bb4b0257e0 + java.lang.invoke.LambdaForm$DMH/0x000002bb4b020400 + org.junit.platform.launcher.core.LauncherFactory$$Lambda$75/0x000002bb4b025a00 + org.junit.platform.launcher.core.LauncherFactory$$Lambda$76/0x000002bb4b025c30 + org.junit.platform.commons.util.Preconditions$$Lambda$77/0x000002bb4b025e60 + org.junit.platform.launcher.LauncherSessionListener$1%20SAHA/.m2/repository/org/junit/platform/junit-platform-launcher/1.14.0/junit-platform-launcher-1.14.0.jar + org.junit.platform.launcher.core.DelegatingLauncher%20SAHA/.m2/repository/org/junit/platform/junit-platform-launcher/1.14.0/junit-platform-launcher-1.14.0.jar + org.junit.platform.launcher.core.InterceptingLauncher%20SAHA/.m2/repository/org/junit/platform/junit-platform-launcher/1.14.0/junit-platform-launcher-1.14.0.jar + java.lang.invoke.DirectMethodHandle$Special + org.junit.platform.launcher.core.DefaultLauncherSession$$Lambda$78/0x000002bb4b026790 + org.junit.platform.launcher.core.ServiceLoaderTestEngineRegistry%20SAHA/.m2/repository/org/junit/platform/junit-platform-launcher/1.14.0/junit-platform-launcher-1.14.0.jar + org.junit.platform.engine.TestEngine%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + org.junit.platform.launcher.core.ServiceLoaderTestEngineRegistry$$Lambda$79/0x000002bb4b026da8 + org.junit.platform.launcher.core.LauncherFactory$$Lambda$80/0x000002bb4b026fc8 + org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + org.junit.jupiter.engine.JupiterTestEngine%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutorService%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + org.junit.jupiter.engine.config.JupiterConfiguration%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.platform.engine.TestDescriptor%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + org.junit.platform.engine.support.hierarchical.EngineExecutionContext%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + org.junit.platform.launcher.core.LauncherFactory$$Lambda$81/0x000002bb4b022000 + org.junit.platform.launcher.core.DefaultLauncher%20SAHA/.m2/repository/org/junit/platform/junit-platform-launcher/1.14.0/junit-platform-launcher-1.14.0.jar + org.junit.platform.launcher.TestPlan%20SAHA/.m2/repository/org/junit/platform/junit-platform-launcher/1.14.0/junit-platform-launcher-1.14.0.jar + org.junit.platform.launcher.core.InternalTestPlan%20SAHA/.m2/repository/org/junit/platform/junit-platform-launcher/1.14.0/junit-platform-launcher-1.14.0.jar + org.junit.platform.launcher.core.LauncherListenerRegistry%20SAHA/.m2/repository/org/junit/platform/junit-platform-launcher/1.14.0/junit-platform-launcher-1.14.0.jar + org.junit.platform.launcher.listeners.discovery.LauncherDiscoveryListeners%20SAHA/.m2/repository/org/junit/platform/junit-platform-launcher/1.14.0/junit-platform-launcher-1.14.0.jar + org.junit.platform.engine.EngineDiscoveryListener%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + org.junit.platform.launcher.LauncherDiscoveryListener%20SAHA/.m2/repository/org/junit/platform/junit-platform-launcher/1.14.0/junit-platform-launcher-1.14.0.jar + org.junit.platform.launcher.core.ListenerRegistry$$Lambda$82/0x000002bb4b0231b8 + org.junit.platform.launcher.core.CompositeTestExecutionListener%20SAHA/.m2/repository/org/junit/platform/junit-platform-launcher/1.14.0/junit-platform-launcher-1.14.0.jar + org.junit.platform.launcher.core.ListenerRegistry$$Lambda$83/0x000002bb4b023688 + org.junit.platform.launcher.core.EngineExecutionOrchestrator%20SAHA/.m2/repository/org/junit/platform/junit-platform-launcher/1.14.0/junit-platform-launcher-1.14.0.jar + org.junit.platform.engine.EngineExecutionListener%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + org.junit.platform.launcher.TestPlan$Visitor%20SAHA/.m2/repository/org/junit/platform/junit-platform-launcher/1.14.0/junit-platform-launcher-1.14.0.jar + org.junit.platform.launcher.core.DiscoveryIssueException%20SAHA/.m2/repository/org/junit/platform/junit-platform-launcher/1.14.0/junit-platform-launcher-1.14.0.jar + org.junit.platform.launcher.core.DefaultLauncher$$Lambda$84/0x000002bb4b021258 + org.junit.platform.launcher.core.EngineDiscoveryOrchestrator%20SAHA/.m2/repository/org/junit/platform/junit-platform-launcher/1.14.0/junit-platform-launcher-1.14.0.jar + org.junit.platform.engine.EngineDiscoveryRequest%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + org.junit.platform.launcher.LauncherDiscoveryRequest%20SAHA/.m2/repository/org/junit/platform/junit-platform-launcher/1.14.0/junit-platform-launcher-1.14.0.jar + org.junit.platform.launcher.core.EngineDiscoveryResultValidator%20SAHA/.m2/repository/org/junit/platform/junit-platform-launcher/1.14.0/junit-platform-launcher-1.14.0.jar + org.junit.platform.launcher.core.EngineIdValidator%20SAHA/.m2/repository/org/junit/platform/junit-platform-launcher/1.14.0/junit-platform-launcher-1.14.0.jar + org.junit.platform.launcher.core.EngineIdValidator$$Lambda$85/0x000002bb4b020800 + org.junit.platform.launcher.core.LauncherFactory$$Lambda$86/0x000002bb4b020a20 + org.junit.platform.launcher.core.LauncherFactory$$Lambda$87/0x000002bb4b020c50 + org.junit.platform.commons.util.ClassNamePatternFilterUtils%20SAHA/.m2/repository/org/junit/platform/junit-platform-commons/1.14.0/junit-platform-commons-1.14.0.jar + org.junit.platform.launcher.core.LauncherFactory$$Lambda$88/0x000002bb4b028200 + org.junit.platform.launcher.core.LauncherFactory$$Lambda$89/0x000002bb4b028438 + java.lang.invoke.LambdaForm$DMH/0x000002bb4b02c000 + org.junit.platform.launcher.core.ServiceLoaderRegistry$$Lambda$90/0x000002bb4b028680 + org.junit.platform.launcher.core.ServiceLoaderRegistry$$Lambda$91/0x000002bb4b0288d0 + org.junitpioneer.jupiter.issue.IssueExtensionExecutionListener%20SAHA/.m2/repository/org/junit-pioneer/junit-pioneer/2.3.0/junit-pioneer-2.3.0.jar + org.junitpioneer.jupiter.IssueProcessor%20SAHA/.m2/repository/org/junit-pioneer/junit-pioneer/2.3.0/junit-pioneer-2.3.0.jar + org.junit.platform.launcher.listeners.UniqueIdTrackingListener%20SAHA/.m2/repository/org/junit/platform/junit-platform-launcher/1.14.0/junit-platform-launcher-1.14.0.jar + org.junit.platform.launcher.core.LauncherFactory$$Lambda$92/0x000002bb4b029240 + org.junit.platform.launcher.core.LauncherFactory$$Lambda$93/0x000002bb4b029660 + org.apache.maven.surefire.junitplatform.LauncherAdapter%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-junit-platform/3.5.4/surefire-junit-platform-3.5.4.jar + org.apache.maven.surefire.junitplatform.TestPlanScannerFilter%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-junit-platform/3.5.4/surefire-junit-platform-3.5.4.jar + org.apache.maven.surefire.api.util.DefaultScanResult%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-api/3.5.4/surefire-api-3.5.4.jar + jdk.internal.loader.URLClassPath$FileLoader$1 + software.amazon.lambda.powertools.tracing.internal.LambdaTracingAspectTest + org.junit.platform.launcher.core.LauncherDiscoveryRequestBuilder%20SAHA/.m2/repository/org/junit/platform/junit-platform-launcher/1.14.0/junit-platform-launcher-1.14.0.jar + org.junit.platform.engine.OutputDirectoryCreator%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + org.junit.platform.engine.DiscoverySelector%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + org.junit.platform.engine.discovery.DiscoverySelectors%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + org.junit.platform.engine.discovery.ClassSelector%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + org.junit.platform.commons.util.Preconditions$$Lambda$94/0x000002bb4b02adf8 + java.lang.invoke.LambdaForm$DMH/0x000002bb4b02c400 + org.junit.platform.launcher.core.LauncherDiscoveryRequestBuilder$$Lambda$95/0x000002bb4b02b028 + org.junit.platform.launcher.listeners.discovery.LauncherDiscoveryListeners$LauncherDiscoveryListenerType%20SAHA/.m2/repository/org/junit/platform/junit-platform-launcher/1.14.0/junit-platform-launcher-1.14.0.jar + org.junit.platform.launcher.listeners.discovery.LauncherDiscoveryListeners$LauncherDiscoveryListenerType$$Lambda$96/0x000002bb4b02b498 + org.junit.platform.launcher.listeners.discovery.LauncherDiscoveryListeners$LauncherDiscoveryListenerType$$Lambda$97/0x000002bb4b02b6b0 + org.junit.platform.launcher.listeners.discovery.LauncherDiscoveryListeners$$Lambda$98/0x000002bb4b02bab8 + org.junit.platform.launcher.listeners.discovery.LauncherDiscoveryListeners$$Lambda$99/0x000002bb4b02bd08 + org.junit.platform.launcher.listeners.discovery.AbortOnFailureLauncherDiscoveryListener%20SAHA/.m2/repository/org/junit/platform/junit-platform-launcher/1.14.0/junit-platform-launcher-1.14.0.jar + org.junit.platform.engine.EngineDiscoveryListener$1%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + org.junit.platform.launcher.LauncherDiscoveryListener$1%20SAHA/.m2/repository/org/junit/platform/junit-platform-launcher/1.14.0/junit-platform-launcher-1.14.0.jar + org.junit.platform.launcher.listeners.discovery.LauncherDiscoveryListeners$$Lambda$100/0x000002bb4b02e730 + org.junit.platform.launcher.core.HierarchicalOutputDirectoryCreator%20SAHA/.m2/repository/org/junit/platform/junit-platform-launcher/1.14.0/junit-platform-launcher-1.14.0.jar + java.util.regex.Pattern$$Lambda$101/0x000002bb4b062980 + java.util.regex.Pattern$CharPredicate$$Lambda$102/0x000002bb4b062bd8 + java.util.regex.Pattern$CharPredicate$$Lambda$23/0x80000002d + org.junit.platform.launcher.core.LauncherDiscoveryRequestBuilder$$Lambda$104/0x000002bb4b02eb88 + org.junit.platform.launcher.core.DefaultDiscoveryRequest%20SAHA/.m2/repository/org/junit/platform/junit-platform-launcher/1.14.0/junit-platform-launcher-1.14.0.jar + org.junit.platform.launcher.core.InterceptingLauncher$$Lambda$105/0x000002bb4b02f040 + org.junit.platform.launcher.core.LauncherPhase%20SAHA/.m2/repository/org/junit/platform/junit-platform-launcher/1.14.0/junit-platform-launcher-1.14.0.jar + org.junit.platform.engine.UniqueId%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + org.junit.platform.launcher.core.EngineDiscoveryOrchestrator$$Lambda$106/0x000002bb4b02f8b8 + org.junit.platform.launcher.core.DiscoveryIssueCollector%20SAHA/.m2/repository/org/junit/platform/junit-platform-launcher/1.14.0/junit-platform-launcher-1.14.0.jar + org.junit.platform.engine.TestSource%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + org.junit.platform.launcher.listeners.discovery.CompositeLauncherDiscoveryListener%20SAHA/.m2/repository/org/junit/platform/junit-platform-launcher/1.14.0/junit-platform-launcher-1.14.0.jar + org.junit.platform.launcher.core.DelegatingLauncherDiscoveryRequest%20SAHA/.m2/repository/org/junit/platform/junit-platform-launcher/1.14.0/junit-platform-launcher-1.14.0.jar + org.junit.platform.launcher.core.EngineDiscoveryOrchestrator$1%20SAHA/.m2/repository/org/junit/platform/junit-platform-launcher/1.14.0/junit-platform-launcher-1.14.0.jar + org.junit.platform.launcher.listeners.discovery.CompositeLauncherDiscoveryListener$$Lambda$107/0x000002bb4b02d838 + org.junit.platform.launcher.core.EngineFilterer%20SAHA/.m2/repository/org/junit/platform/junit-platform-launcher/1.14.0/junit-platform-launcher-1.14.0.jar + org.junit.platform.engine.FilterResult%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + org.junit.platform.launcher.core.EngineFilterer$$Lambda$108/0x000002bb4b02c800 + java.lang.invoke.LambdaForm$DMH/0x000002bb4b030000 + org.junit.platform.launcher.core.EngineFilterer$$Lambda$109/0x000002bb4b02ca40 + java.util.stream.MatchOps$MatchKind + java.util.stream.MatchOps + java.util.stream.MatchOps$MatchOp + java.util.stream.MatchOps$BooleanTerminalSink + java.util.stream.MatchOps$$Lambda$110/0x000002bb4b063950 + java.util.stream.MatchOps$1MatchSink + org.junit.platform.launcher.core.EngineDiscoveryOrchestrator$$Lambda$111/0x000002bb4b02cc88 + org.junit.platform.engine.UniqueIdFormat%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + java.io.UnsupportedEncodingException + java.util.Formatter + java.util.regex.Pattern$$Lambda$21/0x80000002a + java.util.regex.Pattern$BmpCharPredicate$$Lambda$22/0x80000002b + java.util.Formatter$Conversion + java.util.Formatter$FormatString + java.util.Formatter$FormatSpecifier + java.util.Formatter$Flags + java.util.Formatter$FixedString + java.util.Formattable + java.util.regex.Pattern$$Lambda$114/0x000002bb4b0642c0 + java.lang.Character$CharacterCache + java.lang.invoke.LambdaForm$DMH/0x000002bb4b030400 + org.junit.platform.engine.UniqueIdFormat$$Lambda$115/0x000002bb4b034218 + java.net.URLEncoder + java.util.BitSet + java.io.CharArrayWriter + org.junit.platform.engine.UniqueIdFormat$$Lambda$116/0x000002bb4b034450 + org.junit.platform.engine.UniqueIdFormat$$Lambda$117/0x000002bb4b034688 + org.junit.platform.engine.UniqueIdFormat$$Lambda$118/0x000002bb4b0348c0 + org.junit.platform.engine.UniqueIdFormat$$Lambda$119/0x000002bb4b034af8 + org.junit.platform.engine.UniqueIdFormat$$Lambda$120/0x000002bb4b034d30 + org.junit.platform.engine.UniqueId$Segment%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + org.junit.platform.launcher.listeners.discovery.CompositeLauncherDiscoveryListener$$Lambda$121/0x000002bb4b035180 + org.junit.jupiter.engine.config.CachingJupiterConfiguration%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.jupiter.engine.config.DefaultJupiterConfiguration%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.jupiter.api.extension.TestInstantiationAwareExtension$ExtensionContextScope%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.14.0/junit-jupiter-api-5.14.0.jar + org.junit.jupiter.api.parallel.ExecutionMode%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.14.0/junit-jupiter-api-5.14.0.jar + org.junit.jupiter.api.TestInstance$Lifecycle%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.14.0/junit-jupiter-api-5.14.0.jar + org.junit.jupiter.api.io.CleanupMode%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.14.0/junit-jupiter-api-5.14.0.jar + org.junit.jupiter.engine.config.EnumConfigurationParameterConverter%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.jupiter.engine.config.InstantiatingConfigurationParameterConverter%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.jupiter.api.DisplayNameGenerator%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.14.0/junit-jupiter-api-5.14.0.jar + org.junit.jupiter.api.MethodOrderer%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.14.0/junit-jupiter-api-5.14.0.jar + org.junit.jupiter.api.ClassOrderer%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.14.0/junit-jupiter-api-5.14.0.jar + org.junit.jupiter.api.io.TempDirFactory%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.14.0/junit-jupiter-api-5.14.0.jar + org.junit.platform.engine.support.hierarchical.Node%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + org.junit.platform.engine.support.descriptor.AbstractTestDescriptor%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + org.junit.platform.engine.support.descriptor.EngineDescriptor%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + org.junit.jupiter.engine.descriptor.JupiterEngineDescriptor%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.jupiter.engine.extension.ExtensionRegistry%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.jupiter.api.extension.ExtensionContext%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.14.0/junit-jupiter-api-5.14.0.jar + org.junit.jupiter.engine.discovery.DiscoverySelectorResolver%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.platform.engine.support.discovery.SelectorResolver%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolver%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolver$InitializationContext%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolver$Builder%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + org.junit.jupiter.engine.discovery.DiscoverySelectorResolver$$Lambda$122/0x000002bb4b032a58 + org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolver$Builder$$Lambda$123/0x000002bb4b032c90 + org.junit.jupiter.engine.discovery.DiscoverySelectorResolver$$Lambda$124/0x000002bb4b032ed0 + org.junit.jupiter.engine.discovery.DiscoverySelectorResolver$$Lambda$125/0x000002bb4b033108 + org.junit.platform.engine.TestDescriptor$Visitor%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + org.junit.jupiter.engine.discovery.DiscoverySelectorResolver$$Lambda$126/0x000002bb4b033538 + org.junit.platform.engine.support.discovery.DiscoveryIssueReporter%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + org.junit.platform.engine.DiscoveryIssue%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + org.junit.platform.engine.support.discovery.DiscoveryIssueReporter$$Lambda$127/0x000002bb4b033b60 + java.lang.invoke.MethodHandle$1 + java.lang.invoke.LambdaForm$DMH/0x000002bb4b030800 + org.junit.platform.engine.support.discovery.DiscoveryIssueReporter$$Lambda$128/0x000002bb4b033da0 + org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolver$DefaultInitializationContext%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + org.junit.platform.engine.DiscoveryFilter%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + org.junit.platform.engine.discovery.ClassNameFilter%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + org.junit.platform.launcher.core.DefaultDiscoveryRequest$$Lambda$129/0x000002bb4b031658 + org.junit.platform.launcher.core.DefaultDiscoveryRequest$$Lambda$130/0x000002bb4b0318a8 + org.junit.platform.engine.discovery.PackageNameFilter%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + org.junit.platform.engine.CompositeFilter%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + org.junit.platform.engine.CompositeFilter$1%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + org.junit.platform.engine.CompositeFilter$1$$Lambda$131/0x000002bb4b038000 + org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolver$$Lambda$132/0x000002bb4b038248 + org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolver$$Lambda$133/0x000002bb4b038488 + java.util.stream.Collectors$$Lambda$134/0x000002bb4b065158 + java.util.stream.Collectors$$Lambda$135/0x000002bb4b065380 + org.junit.platform.engine.support.discovery.ClassContainerSelectorResolver%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + org.junit.jupiter.engine.discovery.predicates.TestClassPredicates%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.jupiter.engine.discovery.predicates.TestClassPredicates$$Lambda$136/0x000002bb4b038bc0 + org.junit.jupiter.engine.discovery.predicates.TestClassPredicates$$Lambda$137/0x000002bb4b038e08 + org.junit.jupiter.engine.discovery.predicates.TestClassPredicates$$Lambda$138/0x000002bb4b039050 + org.junit.jupiter.engine.discovery.predicates.TestClassPredicates$$Lambda$139/0x000002bb4b0392a0 + org.junit.jupiter.engine.discovery.predicates.IsTestableMethod%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.jupiter.engine.discovery.predicates.IsTestMethod%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.jupiter.api.Test%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.14.0/junit-jupiter-api-5.14.0.jar + org.junit.platform.engine.support.discovery.DiscoveryIssueReporter$Condition%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + org.junit.jupiter.engine.discovery.predicates.IsTestMethod$$Lambda$140/0x000002bb4b039da0 + org.junit.platform.commons.support.ModifierSupport%20SAHA/.m2/repository/org/junit/platform/junit-platform-commons/1.14.0/junit-platform-commons-1.14.0.jar + java.lang.invoke.LambdaForm$DMH/0x000002bb4b03c000 + org.junit.jupiter.engine.discovery.predicates.IsTestableMethod$$Lambda$141/0x000002bb4b03a1c8 + org.junit.jupiter.engine.discovery.predicates.IsTestableMethod$$Lambda$142/0x000002bb4b03a410 + java.lang.invoke.LambdaForm$DMH/0x000002bb4b03c400 + org.junit.platform.engine.support.discovery.DiscoveryIssueReporter$$Lambda$143/0x000002bb4b03a650 + org.junit.jupiter.engine.discovery.predicates.IsTestableMethod$$Lambda$144/0x000002bb4b03a8a0 + org.junit.jupiter.engine.discovery.predicates.IsTestableMethod$$Lambda$145/0x000002bb4b03aae8 + java.lang.invoke.LambdaForm$DMH/0x000002bb4b03c800 + org.junit.platform.engine.support.discovery.DiscoveryIssueReporter$Condition$$Lambda$146/0x000002bb4b03ad28 + org.junit.platform.commons.util.ReflectionUtils%20SAHA/.m2/repository/org/junit/platform/junit-platform-commons/1.14.0/junit-platform-commons-1.14.0.jar + org.junit.jupiter.engine.discovery.predicates.IsTestableMethod$$Lambda$147/0x000002bb4b03b178 + org.junit.jupiter.engine.discovery.predicates.IsTestableMethod$$Lambda$148/0x000002bb4b03b3c0 + org.junit.jupiter.engine.discovery.predicates.IsTestFactoryMethod%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.jupiter.api.DynamicNode%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.14.0/junit-jupiter-api-5.14.0.jar + java.util.regex.MatchResult + java.util.regex.Matcher + java.util.regex.IntHashSet + org.junit.jupiter.api.TestFactory%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.14.0/junit-jupiter-api-5.14.0.jar + org.junit.jupiter.engine.discovery.predicates.IsTestFactoryMethod$$Lambda$149/0x000002bb4b03bc70 + org.junit.jupiter.engine.discovery.predicates.IsTestFactoryMethod$$Lambda$150/0x000002bb4b03e000 + org.junit.jupiter.engine.discovery.predicates.IsTestFactoryMethod$$Lambda$151/0x000002bb4b03e250 + java.util.function.Predicate$$Lambda$152/0x000002bb4b0659a0 + org.junit.jupiter.engine.discovery.predicates.IsTestTemplateMethod%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.jupiter.api.TestTemplate%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.14.0/junit-jupiter-api-5.14.0.jar + org.junit.jupiter.engine.discovery.predicates.IsTestTemplateMethod$$Lambda$153/0x000002bb4b03e8e8 + org.junit.jupiter.engine.discovery.predicates.TestClassPredicates$$Lambda$154/0x000002bb4b03eb10 + org.junit.jupiter.engine.discovery.predicates.TestClassPredicates$$Lambda$155/0x000002bb4b03ed58 + org.junit.jupiter.engine.discovery.predicates.TestClassPredicates$$Lambda$156/0x000002bb4b03ef98 + org.junit.jupiter.engine.discovery.predicates.TestClassPredicates$$Lambda$157/0x000002bb4b03f1e0 + org.junit.jupiter.engine.discovery.predicates.TestClassPredicates$$Lambda$158/0x000002bb4b03f418 + org.junit.jupiter.engine.discovery.predicates.TestClassPredicates$$Lambda$159/0x000002bb4b03f660 + org.junit.jupiter.engine.discovery.predicates.TestClassPredicates$$Lambda$160/0x000002bb4b03f898 + org.junit.jupiter.engine.discovery.predicates.TestClassPredicates$$Lambda$161/0x000002bb4b03fae0 + org.junit.jupiter.engine.discovery.predicates.TestClassPredicates$$Lambda$162/0x000002bb4b03fd18 + org.junit.jupiter.engine.discovery.predicates.TestClassPredicates$$Lambda$163/0x000002bb4b03d000 + org.junit.jupiter.engine.discovery.ClassSelectorResolver%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.jupiter.engine.descriptor.ResourceLockAware%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.jupiter.engine.descriptor.TestClassAware%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.jupiter.engine.descriptor.Validatable%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.jupiter.engine.descriptor.JupiterTestDescriptor%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.jupiter.engine.descriptor.ClassTestDescriptor%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.jupiter.engine.descriptor.Filterable%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.jupiter.engine.descriptor.ClassTemplateTestDescriptor%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.jupiter.engine.descriptor.NestedClassTestDescriptor%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.jupiter.api.extension.ClassTemplateInvocationContext%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.14.0/junit-jupiter-api-5.14.0.jar + org.junit.jupiter.engine.discovery.MethodSelectorResolver%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.jupiter.engine.discovery.MethodFinder%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + java.util.regex.Pattern$$Lambda$164/0x000002bb4b065de0 + org.junit.jupiter.engine.discovery.MethodSelectorResolver$MethodType%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.jupiter.engine.discovery.MethodSelectorResolver$MethodType$TestDescriptorFactory%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.jupiter.engine.descriptor.MethodBasedTestDescriptor%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.jupiter.engine.extension.ExtensionRegistrar%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + java.lang.invoke.LambdaForm$DMH/0x000002bb4b03cc00 + org.junit.jupiter.engine.discovery.MethodSelectorResolver$MethodType$$Lambda$165/0x000002bb4b083178 + org.junit.jupiter.engine.descriptor.TestFactoryTestDescriptor%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.jupiter.engine.descriptor.DynamicNodeTestDescriptor%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.jupiter.engine.descriptor.DynamicContainerTestDescriptor%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.jupiter.engine.descriptor.DynamicTestTestDescriptor%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.jupiter.engine.discovery.MethodSelectorResolver$MethodType$$Lambda$166/0x000002bb4b084688 + org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.jupiter.engine.discovery.MethodSelectorResolver$MethodType$$Lambda$167/0x000002bb4b084e30 + org.junit.jupiter.engine.discovery.AbstractOrderingVisitor%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.jupiter.engine.discovery.ClassOrderingVisitor%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.jupiter.api.ClassOrdererContext%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.14.0/junit-jupiter-api-5.14.0.jar + org.junit.platform.commons.util.LruCache%20SAHA/.m2/repository/org/junit/platform/junit-platform-commons/1.14.0/junit-platform-commons-1.14.0.jar + org.junit.jupiter.engine.config.CachingJupiterConfiguration$$Lambda$168/0x000002bb4b085d00 + org.junit.jupiter.engine.config.InstantiatingConfigurationParameterConverter$$Lambda$169/0x000002bb4b085f40 + org.junit.jupiter.engine.config.InstantiatingConfigurationParameterConverter$$Lambda$170/0x000002bb4b086178 + org.junit.jupiter.engine.config.InstantiatingConfigurationParameterConverter$$Lambda$171/0x000002bb4b0863c0 + org.junit.jupiter.engine.config.InstantiatingConfigurationParameterConverter$$Lambda$172/0x000002bb4b086600 + org.junit.jupiter.engine.discovery.AbstractOrderingVisitor$DescriptorWrapperOrderer%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.jupiter.engine.discovery.AbstractOrderingVisitor$MessageGenerator%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.jupiter.engine.discovery.AbstractOrderingVisitor$DescriptorWrapperOrderer$$Lambda$173/0x000002bb4b086c20 + org.junit.jupiter.engine.discovery.AbstractOrderingVisitor$DescriptorWrapperOrderer$$Lambda$174/0x000002bb4b086e38 + org.junit.jupiter.engine.discovery.ClassOrderingVisitor$$Lambda$175/0x000002bb4b087050 + org.junit.jupiter.engine.discovery.ClassOrderingVisitor$$Lambda$176/0x000002bb4b087298 + org.junit.jupiter.engine.discovery.MethodOrderingVisitor%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.jupiter.api.MethodOrdererContext%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.14.0/junit-jupiter-api-5.14.0.jar + org.junit.jupiter.engine.discovery.MethodOrderingVisitor$$Lambda$177/0x000002bb4b087908 + org.junit.jupiter.engine.discovery.MethodOrderingVisitor$$Lambda$178/0x000002bb4b087b50 + org.junit.jupiter.engine.discovery.MethodOrderingVisitor$$Lambda$179/0x000002bb4b087d88 + java.lang.invoke.LambdaForm$MH/0x000002bb4b088000 + java.util.Comparator$$Lambda$180/0x000002bb4b066038 + java.util.Collections$ReverseComparator + java.util.Comparators$NaturalOrderComparator + java.util.Collections$ReverseComparator2 + java.util.function.UnaryOperator + org.junit.jupiter.engine.discovery.MethodOrderingVisitor$$Lambda$181/0x000002bb4b08c000 + org.junit.jupiter.engine.discovery.DiscoverySelectorResolver$$Lambda$182/0x000002bb4b08c258 + org.junit.platform.engine.CompositeTestDescriptorVisitor%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + org.junit.platform.engine.support.discovery.SelectorResolver$Context%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution$DefaultContext%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + org.junit.platform.engine.support.discovery.SelectorResolver$Match%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + org.junit.platform.engine.support.discovery.SelectorResolver$Match$$Lambda$183/0x000002bb4b08cf08 + org.junit.platform.engine.support.discovery.SelectorResolver$Match$Type%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + org.junit.platform.launcher.core.DefaultDiscoveryRequest$$Lambda$184/0x000002bb4b08d550 + org.junit.platform.launcher.core.DefaultDiscoveryRequest$$Lambda$185/0x000002bb4b08d7a0 + java.util.ArrayDeque$$Lambda$186/0x000002bb4b0670b0 + org.junit.platform.engine.discovery.UniqueIdSelector%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + org.junit.platform.engine.support.discovery.SelectorResolver$Resolution%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution$$Lambda$187/0x000002bb4b08de30 + org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution$$Lambda$188/0x000002bb4b08e070 + org.junit.platform.engine.discovery.ClasspathResourceSelector%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + org.junit.platform.engine.discovery.ClasspathRootSelector%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + org.junit.platform.commons.support.ReflectionSupport%20SAHA/.m2/repository/org/junit/platform/junit-platform-commons/1.14.0/junit-platform-commons-1.14.0.jar + org.junit.platform.commons.util.ClasspathScannerLoader%20SAHA/.m2/repository/org/junit/platform/junit-platform-commons/1.14.0/junit-platform-commons-1.14.0.jar + org.junit.platform.commons.support.scanning.ClasspathScanner%20SAHA/.m2/repository/org/junit/platform/junit-platform-commons/1.14.0/junit-platform-commons-1.14.0.jar + java.util.Spliterators$IteratorSpliterator + jdk.internal.misc.ScopedMemoryAccess$Scope + org.junit.platform.commons.util.DefaultClasspathScanner%20SAHA/.m2/repository/org/junit/platform/junit-platform-commons/1.14.0/junit-platform-commons-1.14.0.jar + java.nio.file.FileVisitor + org.junit.platform.commons.util.ClasspathScannerLoader$$Lambda$189/0x000002bb4b08efa0 + org.junit.platform.commons.function.Try%20SAHA/.m2/repository/org/junit/platform/junit-platform-commons/1.14.0/junit-platform-commons-1.14.0.jar + java.lang.invoke.LambdaForm$DMH/0x000002bb4b088400 + org.junit.platform.commons.util.ClasspathScannerLoader$$Lambda$190/0x000002bb4b08f400 + java.lang.invoke.LambdaForm$DMH/0x000002bb4b088800 + org.junit.platform.commons.util.ReflectionUtils$$Lambda$191/0x000002bb4b08f628 + org.junit.platform.commons.util.ReflectionUtils$$Lambda$192/0x000002bb4b08f858 + org.junit.platform.commons.function.Try$Failure%20SAHA/.m2/repository/org/junit/platform/junit-platform-commons/1.14.0/junit-platform-commons-1.14.0.jar + org.junit.platform.commons.function.Try$Success%20SAHA/.m2/repository/org/junit/platform/junit-platform-commons/1.14.0/junit-platform-commons-1.14.0.jar + org.junit.platform.commons.function.Try$$Lambda$193/0x000002bb4b08a000 + java.util.regex.Pattern$1 + org.junit.platform.engine.discovery.ClassSelector$$Lambda$194/0x000002bb4b08a220 + org.junit.jupiter.api.Nested%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.14.0/junit-jupiter-api-5.14.0.jar + org.junit.platform.commons.support.AnnotationSupport%20SAHA/.m2/repository/org/junit/platform/junit-platform-commons/1.14.0/junit-platform-commons-1.14.0.jar + org.junit.platform.commons.util.AnnotationUtils%20SAHA/.m2/repository/org/junit/platform/junit-platform-commons/1.14.0/junit-platform-commons-1.14.0.jar + java.lang.annotation.Inherited + sun.reflect.generics.parser.SignatureParser + sun.reflect.generics.tree.Tree + sun.reflect.generics.tree.TypeTree + sun.reflect.generics.tree.TypeArgument + sun.reflect.generics.tree.ReturnType + sun.reflect.generics.tree.TypeSignature + sun.reflect.generics.tree.BaseType + sun.reflect.generics.tree.FieldTypeSignature + sun.reflect.generics.tree.SimpleClassTypeSignature + sun.reflect.generics.tree.ClassTypeSignature + sun.reflect.generics.scope.Scope + sun.reflect.generics.scope.AbstractScope + sun.reflect.generics.scope.ClassScope + sun.reflect.generics.factory.GenericsFactory + sun.reflect.generics.factory.CoreReflectionFactory + sun.reflect.generics.visitor.TypeTreeVisitor + sun.reflect.generics.visitor.Reifier + java.lang.annotation.Target + java.lang.reflect.GenericArrayType + sun.reflect.annotation.AnnotationType + sun.reflect.annotation.AnnotationType$1 + java.lang.annotation.ElementType + java.lang.annotation.Retention + java.lang.annotation.Documented + java.lang.annotation.RetentionPolicy + sun.reflect.annotation.ExceptionProxy + sun.reflect.annotation.AnnotationTypeMismatchExceptionProxy + sun.reflect.annotation.AnnotationParser$1 + java.lang.reflect.InvocationHandler + sun.reflect.annotation.AnnotationInvocationHandler + java.lang.reflect.Proxy + java.lang.reflect.Proxy$1 + jdk.internal.loader.AbstractClassLoaderValue$Sub + java.lang.reflect.Proxy$$Lambda$195/0x000002bb4b06eae0 + java.lang.reflect.Proxy$ProxyBuilder + java.lang.PublicMethods + java.util.LinkedHashMap$LinkedValues + java.util.LinkedHashMap$LinkedValueIterator + java.lang.reflect.Proxy$ProxyBuilder$$Lambda$196/0x000002bb4b06f6d0 + java.lang.module.ModuleDescriptor$Builder + jdk.internal.module.Checks + java.lang.module.ModuleDescriptor$Builder$$Lambda$34/0x80000003a + java.lang.reflect.Proxy$$Lambda$198/0x000002bb4b06f8f8 + java.lang.reflect.ProxyGenerator + java.lang.reflect.ProxyGenerator$ProxyMethod + java.util.StringJoiner + java.lang.reflect.ProxyGenerator$$Lambda$199/0x000002bb4b070030 + java.lang.reflect.ProxyGenerator$$Lambda$200/0x000002bb4b070268 + java.lang.reflect.ProxyGenerator$PrimitiveTypeInfo + jdk.internal.org.objectweb.asm.Edge + jdk.proxy1.$Proxy0 + java.lang.reflect.Proxy$ProxyBuilder$1 + sun.reflect.annotation.AnnotationParser$$Lambda$201/0x000002bb4b070d30 + java.lang.invoke.LambdaForm$DMH/0x000002bb4b088c00 + jdk.proxy1.$Proxy1 + jdk.proxy1.$Proxy2 + org.apiguardian.api.API%20SAHA/.m2/repository/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar + org.apiguardian.api.API$Status%20SAHA/.m2/repository/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar + jdk.proxy2.$Proxy3 + java.lang.reflect.UndeclaredThrowableException + java.lang.Class$AnnotationData + org.junitpioneer.jupiter.SetEnvironmentVariable$SetEnvironmentVariables%20SAHA/.m2/repository/org/junit-pioneer/junit-pioneer/2.3.0/junit-pioneer-2.3.0.jar + org.junitpioneer.jupiter.SetEnvironmentVariable%20SAHA/.m2/repository/org/junit-pioneer/junit-pioneer/2.3.0/junit-pioneer-2.3.0.jar + jdk.proxy1.$Proxy4 + org.junitpioneer.jupiter.WritesEnvironmentVariable%20SAHA/.m2/repository/org/junit-pioneer/junit-pioneer/2.3.0/junit-pioneer-2.3.0.jar + org.junit.jupiter.api.extension.ExtendWith%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.14.0/junit-jupiter-api-5.14.0.jar + sun.reflect.annotation.AnnotationParser$$Lambda$202/0x000002bb4b071e78 + java.lang.annotation.Repeatable + jdk.proxy2.$Proxy5 + jdk.proxy2.$Proxy6 + java.util.LinkedHashMap$LinkedEntrySet + java.util.LinkedHashMap$LinkedEntryIterator + org.junit.jupiter.api.parallel.ResourceLock%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.14.0/junit-jupiter-api-5.14.0.jar + jdk.proxy2.$Proxy7 + sun.reflect.annotation.AnnotationParser$$Lambda$203/0x000002bb4b072290 + org.junit.jupiter.api.extension.Extension%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.14.0/junit-jupiter-api-5.14.0.jar + org.junit.jupiter.api.extension.BeforeEachCallback%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.14.0/junit-jupiter-api-5.14.0.jar + org.junit.jupiter.api.extension.AfterEachCallback%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.14.0/junit-jupiter-api-5.14.0.jar + org.junit.jupiter.api.extension.BeforeAllCallback%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.14.0/junit-jupiter-api-5.14.0.jar + org.junit.jupiter.api.extension.AfterAllCallback%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.14.0/junit-jupiter-api-5.14.0.jar + org.junitpioneer.jupiter.AbstractEntryBasedExtension%20SAHA/.m2/repository/org/junit-pioneer/junit-pioneer/2.3.0/junit-pioneer-2.3.0.jar + org.junitpioneer.jupiter.EnvironmentVariableExtension%20SAHA/.m2/repository/org/junit-pioneer/junit-pioneer/2.3.0/junit-pioneer-2.3.0.jar + jdk.proxy2.$Proxy8 + org.junit.jupiter.api.parallel.ResourceLockTarget%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.14.0/junit-jupiter-api-5.14.0.jar + org.junit.jupiter.api.parallel.ResourceAccessMode%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.14.0/junit-jupiter-api-5.14.0.jar + jdk.proxy2.$Proxy9 + org.junit.jupiter.api.parallel.ResourceLocks%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.14.0/junit-jupiter-api-5.14.0.jar + jdk.proxy1.$Proxy10 + org.junit.jupiter.api.extension.Extensions%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.14.0/junit-jupiter-api-5.14.0.jar + org.junit.platform.commons.util.KotlinReflectionUtils%20SAHA/.m2/repository/org/junit/platform/junit-platform-commons/1.14.0/junit-platform-commons-1.14.0.jar + org.junit.platform.commons.function.Try$Transformer%20SAHA/.m2/repository/org/junit/platform/junit-platform-commons/1.14.0/junit-platform-commons-1.14.0.jar + org.junit.platform.commons.util.KotlinReflectionUtils$$Lambda$204/0x000002bb4b091ca0 + org.junit.jupiter.api.ClassTemplate%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.14.0/junit-jupiter-api-5.14.0.jar + jdk.internal.reflect.ClassFileConstants + jdk.internal.reflect.AccessorGenerator + jdk.internal.reflect.MethodAccessorGenerator + jdk.internal.reflect.ByteVectorFactory + jdk.internal.reflect.ByteVector + jdk.internal.reflect.ByteVectorImpl + jdk.internal.reflect.ClassFileAssembler + jdk.internal.reflect.UTF8 + jdk.internal.reflect.Label + jdk.internal.reflect.Label$PatchInfo + jdk.internal.reflect.MethodAccessorGenerator$1 + jdk.internal.reflect.ClassDefiner + jdk.internal.reflect.ClassDefiner$1 + jdk.internal.reflect.GeneratedConstructorAccessor1 + jdk.internal.reflect.BootstrapConstructorAccessorImpl + org.junit.platform.commons.annotation.Testable%20SAHA/.m2/repository/org/junit/platform/junit-platform-commons/1.14.0/junit-platform-commons-1.14.0.jar + jdk.proxy2.$Proxy11 + org.junit.platform.commons.util.ReflectionUtils$HierarchyTraversalMode%20SAHA/.m2/repository/org/junit/platform/junit-platform-commons/1.14.0/junit-platform-commons-1.14.0.jar + com.amazonaws.services.lambda.runtime.RequestHandler%20SAHA/.m2/repository/com/amazonaws/aws-lambda-java-core/1.4.0/aws-lambda-java-core-1.4.0.jar + com.amazonaws.services.lambda.runtime.Context%20SAHA/.m2/repository/com/amazonaws/aws-lambda-java-core/1.4.0/aws-lambda-java-core-1.4.0.jar + com.amazonaws.services.lambda.runtime.RequestStreamHandler%20SAHA/.m2/repository/com/amazonaws/aws-lambda-java-core/1.4.0/aws-lambda-java-core-1.4.0.jar + org.junit.platform.commons.util.ReflectionUtils$$Lambda$205/0x000002bb4b092f08 + org.junit.platform.commons.util.ReflectionUtils$$Lambda$206/0x000002bb4b093150 + com.amazonaws.xray.entities.Entity%20SAHA/.m2/repository/com/amazonaws/aws-xray-recorder-sdk-core/2.20.0/aws-xray-recorder-sdk-core-2.20.0.jar + com.amazonaws.xray.entities.Subsegment%20SAHA/.m2/repository/com/amazonaws/aws-xray-recorder-sdk-core/2.20.0/aws-xray-recorder-sdk-core-2.20.0.jar + org.junit.platform.commons.util.ReflectionUtils$$Lambda$207/0x000002bb4b093758 + java.util.Arrays$LegacyMergeSort + java.util.TimSort + jdk.proxy2.$Proxy12 + org.junit.jupiter.engine.discovery.ClassSelectorResolver$$Lambda$208/0x000002bb4b093c30 + org.junit.jupiter.api.extension.ExtensionConfigurationException%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.14.0/junit-jupiter-api-5.14.0.jar + org.junit.jupiter.api.extension.TestInstanceFactoryContext%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.14.0/junit-jupiter-api-5.14.0.jar + org.junit.jupiter.api.extension.TestInstantiationAwareExtension%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.14.0/junit-jupiter-api-5.14.0.jar + org.junit.jupiter.api.extension.TestInstantiationException%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.14.0/junit-jupiter-api-5.14.0.jar + org.junit.jupiter.engine.execution.ConditionEvaluator%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.jupiter.engine.execution.ConditionEvaluationException%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.jupiter.api.extension.ConditionEvaluationResult%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.14.0/junit-jupiter-api-5.14.0.jar + org.junit.jupiter.engine.execution.InterceptingExecutableInvoker%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.jupiter.api.extension.ReflectiveInvocationContext%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.14.0/junit-jupiter-api-5.14.0.jar + org.junit.jupiter.api.extension.InvocationInterceptor$Invocation%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.14.0/junit-jupiter-api-5.14.0.jar + org.junit.jupiter.engine.execution.InvocationInterceptorChain%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.jupiter.engine.descriptor.DisplayNameUtils%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.jupiter.api.DisplayNameGenerator$Standard%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.14.0/junit-jupiter-api-5.14.0.jar + org.junit.jupiter.api.DisplayNameGenerator$Simple%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.14.0/junit-jupiter-api-5.14.0.jar + org.junit.jupiter.api.DisplayNameGenerator$ReplaceUnderscores%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.14.0/junit-jupiter-api-5.14.0.jar + org.junit.jupiter.api.DisplayNameGenerator$IndicativeSentences%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.14.0/junit-jupiter-api-5.14.0.jar + org.junit.jupiter.api.DisplayNameGenerator$IndicativeSentences$$Lambda$209/0x000002bb4b0954c0 + org.junit.jupiter.engine.descriptor.DisplayNameUtils$$Lambda$210/0x000002bb4b097de0 + org.junit.jupiter.engine.descriptor.DisplayNameUtils$$Lambda$211/0x000002bb4b095708 + org.junit.jupiter.engine.descriptor.DisplayNameUtils$$Lambda$212/0x000002bb4b095938 + org.junit.platform.engine.support.descriptor.ClassSource%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + org.junit.jupiter.api.DisplayName%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.14.0/junit-jupiter-api-5.14.0.jar + org.junit.jupiter.engine.descriptor.DisplayNameUtils$$Lambda$213/0x000002bb4b094800 + org.junit.jupiter.engine.descriptor.DisplayNameUtils$$Lambda$214/0x000002bb4b094a38 + org.junit.jupiter.engine.descriptor.DisplayNameUtils$$Lambda$215/0x000002bb4b094c80 + org.junit.jupiter.api.DisplayNameGeneration%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.14.0/junit-jupiter-api-5.14.0.jar + java.util.AbstractList$Itr + java.util.AbstractList$ListItr + org.junit.jupiter.engine.descriptor.DisplayNameUtils$$Lambda$216/0x000002bb4b098000 + org.junit.jupiter.engine.descriptor.DisplayNameUtils$$Lambda$217/0x000002bb4b098238 + org.junit.jupiter.engine.descriptor.DisplayNameUtils$$Lambda$218/0x000002bb4b098470 + org.junit.jupiter.engine.descriptor.DisplayNameUtils$$Lambda$219/0x000002bb4b0986b0 + org.junit.jupiter.engine.config.CachingJupiterConfiguration$$Lambda$220/0x000002bb4b0988d0 + org.junit.jupiter.engine.config.DefaultJupiterConfiguration$$Lambda$221/0x000002bb4b098b10 + org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor$ClassInfo%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor$ClassInfo$$Lambda$222/0x000002bb4b098d28 + org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor$ClassInfo$$Lambda$223/0x000002bb4b098f48 + org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor$ClassInfo$$Lambda$224/0x000002bb4b099168 + org.junit.jupiter.api.Tag%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.14.0/junit-jupiter-api-5.14.0.jar + org.junit.jupiter.api.Tags%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.14.0/junit-jupiter-api-5.14.0.jar + org.junit.platform.commons.util.AnnotationUtils$$Lambda$225/0x000002bb4b099788 + org.junit.platform.commons.util.AnnotationUtils$$Lambda$226/0x000002bb4b0999a8 + org.junit.platform.commons.util.AnnotationUtils$$Lambda$227/0x000002bb4b099be0 + org.junit.platform.commons.util.AnnotationUtils$$Lambda$228/0x000002bb4b099e28 + org.junit.platform.commons.util.ReflectionUtils$$Lambda$229/0x000002bb4b09a060 + org.junit.platform.commons.util.ReflectionUtils$$Lambda$230/0x000002bb4b09a280 + org.junit.jupiter.engine.descriptor.JupiterTestDescriptor$$Lambda$231/0x000002bb4b09a4a0 + java.lang.invoke.LambdaForm$DMH/0x000002bb4b09c000 + org.junit.jupiter.engine.descriptor.JupiterTestDescriptor$$Lambda$232/0x000002bb4b09a6d8 + org.junit.platform.engine.TestTag%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + org.junit.jupiter.engine.descriptor.JupiterTestDescriptor$$Lambda$233/0x000002bb4b09ab30 + org.junit.jupiter.engine.descriptor.JupiterTestDescriptor$$Lambda$234/0x000002bb4b09ad68 + org.junit.jupiter.engine.descriptor.JupiterTestDescriptor$$Lambda$235/0x000002bb4b09af80 + java.lang.invoke.LambdaForm$DMH/0x000002bb4b09c400 + java.util.function.Function$$Lambda$236/0x000002bb4b074cf8 + org.junit.jupiter.engine.descriptor.TestInstanceLifecycleUtils%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.jupiter.api.TestInstance%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.14.0/junit-jupiter-api-5.14.0.jar + jdk.internal.reflect.GeneratedConstructorAccessor2 + org.junit.jupiter.engine.descriptor.TestInstanceLifecycleUtils$$Lambda$237/0x000002bb4b09b5b0 + org.junit.jupiter.engine.descriptor.TestInstanceLifecycleUtils$$Lambda$238/0x000002bb4b09b7e8 + org.junit.jupiter.engine.config.CachingJupiterConfiguration$$Lambda$239/0x000002bb4b09ba08 + java.lang.invoke.LambdaForm$DMH/0x000002bb4b09cc00 + org.junit.jupiter.engine.config.EnumConfigurationParameterConverter$$Lambda$240/0x000002bb4b09e000 + org.junit.jupiter.engine.descriptor.ExclusiveResourceCollector%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.jupiter.engine.descriptor.ExclusiveResourceCollector$1%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.jupiter.engine.descriptor.ExclusiveResourceCollector$DefaultExclusiveResourceCollector%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor$LifecycleMethods%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.platform.engine.support.discovery.DiscoveryIssueReporter$$Lambda$241/0x000002bb4b09eac0 + java.lang.invoke.LambdaForm$DMH/0x000002bb4b09d000 + org.junit.platform.engine.support.discovery.DiscoveryIssueReporter$$Lambda$242/0x000002bb4b09ecf0 + org.junit.jupiter.engine.descriptor.LifecycleMethodUtils%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.jupiter.api.BeforeAll%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.14.0/junit-jupiter-api-5.14.0.jar + org.junit.platform.commons.support.HierarchyTraversalMode%20SAHA/.m2/repository/org/junit/platform/junit-platform-commons/1.14.0/junit-platform-commons-1.14.0.jar + org.junit.jupiter.engine.descriptor.LifecycleMethodUtils$$Lambda$243/0x000002bb4b09f758 + org.junit.jupiter.engine.descriptor.LifecycleMethodUtils$$Lambda$244/0x000002bb4b09f998 + org.junit.jupiter.engine.descriptor.LifecycleMethodUtils$$Lambda$245/0x000002bb4b09fbe0 + org.junit.platform.commons.util.AnnotationUtils$$Lambda$246/0x000002bb4b09d800 + org.junit.platform.commons.util.ReflectionUtils$$Lambda$247/0x000002bb4b09da50 + java.util.function.IntFunction + org.junit.platform.commons.util.ReflectionUtils$$Lambda$248/0x000002bb4b09dc98 + java.util.stream.Nodes + java.util.stream.Node + java.util.stream.Nodes$EmptyNode + java.util.stream.Nodes$EmptyNode$OfRef + java.util.stream.Node$OfPrimitive + java.util.stream.Node$OfInt + java.util.stream.Nodes$EmptyNode$OfInt + java.util.stream.Node$OfLong + java.util.stream.Nodes$EmptyNode$OfLong + java.util.stream.Node$OfDouble + java.util.stream.Nodes$EmptyNode$OfDouble + java.util.stream.Node$Builder + java.util.stream.AbstractSpinedBuffer + java.util.stream.SpinedBuffer + java.util.stream.Nodes$SpinedNodeBuilder + org.junit.platform.commons.util.ReflectionUtils$$Lambda$249/0x000002bb4b09d400 + org.junit.platform.commons.util.ReflectionUtils$$Lambda$250/0x000002bb4b0a0000 + org.junit.platform.commons.util.ReflectionUtils$$Lambda$251/0x000002bb4b0a0218 + org.junit.platform.commons.util.ReflectionUtils$$Lambda$252/0x000002bb4b0a0468 + java.util.stream.DistinctOps + java.util.stream.DistinctOps$1 + org.junit.platform.commons.util.CollectionUtils$$Lambda$253/0x000002bb4b0a0680 + java.util.stream.DistinctOps$1$2 + jdk.internal.reflect.GeneratedConstructorAccessor3 + sun.reflect.annotation.AnnotationInvocationHandler$1 + org.junit.jupiter.api.AfterEach%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.14.0/junit-jupiter-api-5.14.0.jar + jdk.proxy2.$Proxy13 + org.junit.jupiter.api.BeforeEach%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.14.0/junit-jupiter-api-5.14.0.jar + jdk.proxy2.$Proxy14 + jdk.internal.reflect.GeneratedConstructorAccessor4 + org.junit.jupiter.engine.descriptor.LifecycleMethodUtils$$Lambda$254/0x000002bb4b0a1138 + org.junit.jupiter.engine.descriptor.LifecycleMethodUtils$$Lambda$255/0x000002bb4b0a1358 + org.junit.jupiter.engine.descriptor.LifecycleMethodUtils$$Lambda$256/0x000002bb4b0a15a0 + org.junit.platform.engine.support.discovery.DiscoveryIssueReporter$Condition$$Lambda$257/0x000002bb4b0a17e0 + java.util.stream.ReferencePipeline$15 + org.junit.jupiter.engine.descriptor.LifecycleMethodUtils$$Lambda$258/0x000002bb4b0a1a10 + org.junit.jupiter.engine.descriptor.LifecycleMethodUtils$$Lambda$259/0x000002bb4b0a1c50 + org.junit.jupiter.engine.descriptor.LifecycleMethodUtils$$Lambda$260/0x000002bb4b0a1e98 + org.junit.platform.engine.support.discovery.DiscoveryIssueReporter$Condition$$Lambda$261/0x000002bb4b0a20d8 + java.util.stream.ReferencePipeline$15$1 + org.junit.jupiter.api.AfterAll%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.14.0/junit-jupiter-api-5.14.0.jar + jdk.internal.reflect.GeneratedConstructorAccessor5 + org.junit.jupiter.engine.descriptor.LifecycleMethodUtils$$Lambda$262/0x000002bb4b0a2520 + org.junit.jupiter.engine.descriptor.LifecycleMethodUtils$$Lambda$263/0x000002bb4b0a2760 + org.junit.jupiter.engine.descriptor.LifecycleMethodUtils$$Lambda$264/0x000002bb4b0a29a8 + org.junit.jupiter.engine.discovery.ClassSelectorResolver$$Lambda$265/0x000002bb4b0a2be8 + org.junit.jupiter.engine.discovery.ClassSelectorResolver$$Lambda$266/0x000002bb4b0a2e28 + org.junit.jupiter.engine.discovery.ClassSelectorResolver$$Lambda$267/0x000002bb4b0a3048 + org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution$$Lambda$268/0x000002bb4b0a3268 + org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution$$Lambda$269/0x000002bb4b0a34a8 + org.junit.platform.engine.SelectorResolutionResult%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + org.junit.platform.engine.SelectorResolutionResult$Status%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + org.junit.platform.launcher.listeners.discovery.CompositeLauncherDiscoveryListener$$Lambda$270/0x000002bb4b0a3d20 + org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution$$Lambda$271/0x000002bb4b0a6000 + org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution$$Lambda$272/0x000002bb4b0a6248 + java.util.stream.ForEachOps + java.util.stream.ForEachOps$ForEachOp + java.util.stream.ForEachOps$ForEachOp$OfRef + jdk.internal.reflect.GeneratedConstructorAccessor6 + org.junit.jupiter.engine.discovery.ClassSelectorResolver$$Lambda$273/0x000002bb4b0a6478 + org.junit.platform.commons.util.ReflectionUtils$CycleErrorHandling%20SAHA/.m2/repository/org/junit/platform/junit-platform-commons/1.14.0/junit-platform-commons-1.14.0.jar + org.junit.platform.commons.util.ReflectionUtils$CycleErrorHandling$1%20SAHA/.m2/repository/org/junit/platform/junit-platform-commons/1.14.0/junit-platform-commons-1.14.0.jar + org.junit.platform.commons.util.ReflectionUtils$CycleErrorHandling$2%20SAHA/.m2/repository/org/junit/platform/junit-platform-commons/1.14.0/junit-platform-commons-1.14.0.jar + org.junit.platform.commons.util.ReflectionUtils$$Lambda$274/0x000002bb4b0a6f80 + java.lang.invoke.LambdaForm$DMH/0x000002bb4b0a5000 + java.util.function.Predicate$$Lambda$275/0x000002bb4b078080 + org.junit.jupiter.engine.discovery.ClassSelectorResolver$$Lambda$276/0x000002bb4b0a71b0 + java.util.function.Predicate$$Lambda$277/0x000002bb4b0782d0 + java.util.stream.Streams$ConcatSpliterator + java.util.stream.Streams$ConcatSpliterator$OfRef + java.util.stream.Streams$2 + org.junit.platform.engine.discovery.NestedClassSelector%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + org.junit.jupiter.engine.discovery.ClassSelectorResolver$$Lambda$278/0x000002bb4b0a7648 + java.util.stream.AbstractPipeline$$Lambda$279/0x000002bb4b078c78 + java.util.stream.StreamSpliterators$AbstractWrappingSpliterator + java.util.stream.StreamSpliterators$WrappingSpliterator + org.junit.jupiter.engine.discovery.ClassSelectorResolver$$Lambda$280/0x000002bb4b0a7888 + java.util.stream.StreamSpliterators + java.util.stream.StreamSpliterators$WrappingSpliterator$$Lambda$281/0x000002bb4b0795b8 + org.junit.platform.engine.discovery.MethodSelector%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + org.junit.platform.engine.discovery.MethodSelector$$Lambda$282/0x000002bb4b0a7d08 + org.junit.platform.commons.util.ClassUtils%20SAHA/.m2/repository/org/junit/platform/junit-platform-commons/1.14.0/junit-platform-commons-1.14.0.jar + org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution$$Lambda$283/0x000002bb4b0a5a00 + org.junit.platform.engine.discovery.IterationSelector%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + org.junit.platform.engine.discovery.DirectorySelector%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + org.junit.platform.engine.discovery.FileSelector%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + org.junit.jupiter.engine.discovery.MethodSelectorResolver$$Lambda$284/0x000002bb4b0a8248 + org.junit.jupiter.engine.discovery.MethodSelectorResolver$$Lambda$285/0x000002bb4b0a8468 + org.junit.jupiter.engine.discovery.MethodSelectorResolver$$Lambda$286/0x000002bb4b0a8690 + org.junit.jupiter.engine.discovery.MethodSelectorResolver$$Lambda$287/0x000002bb4b0a88d0 + org.junit.jupiter.engine.discovery.MethodSelectorResolver$$Lambda$288/0x000002bb4b0a8b18 + org.junit.jupiter.engine.discovery.MethodSelectorResolver$$Lambda$289/0x000002bb4b0a8d50 + org.junit.jupiter.engine.discovery.MethodSelectorResolver$MethodType$$Lambda$290/0x000002bb4b0a8f90 + org.junit.jupiter.engine.discovery.MethodSelectorResolver$MethodType$$Lambda$291/0x000002bb4b0a91b0 + org.junit.platform.commons.util.ClassUtils$$Lambda$292/0x000002bb4b0a93f0 + org.junit.jupiter.engine.discovery.MethodSelectorResolver$MethodType$$Lambda$293/0x000002bb4b0a9628 + org.junit.jupiter.engine.execution.InterceptingExecutableInvoker$ReflectiveInterceptorCall$VoidMethodInterceptorCall%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.jupiter.api.extension.InvocationInterceptor%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.14.0/junit-jupiter-api-5.14.0.jar + java.lang.invoke.LambdaForm$DMH/0x000002bb4b0ac000 + org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor$$Lambda$294/0x000002bb4b0a9c38 + org.junit.jupiter.engine.execution.InterceptingExecutableInvoker$ReflectiveInterceptorCall%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.jupiter.engine.execution.InterceptingExecutableInvoker$ReflectiveInterceptorCall$$Lambda$295/0x000002bb4b0aa048 + org.junit.jupiter.engine.descriptor.DisplayNameUtils$$Lambda$296/0x000002bb4b0aa268 + org.junit.jupiter.api.DisplayNameGenerator$$Lambda$297/0x000002bb4b0aa498 + org.junit.platform.engine.support.descriptor.MethodSource%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + org.junit.jupiter.engine.descriptor.MethodBasedTestDescriptor$MethodInfo%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.jupiter.engine.descriptor.MethodBasedTestDescriptor$MethodInfo$$Lambda$298/0x000002bb4b0aaaf8 + org.junit.jupiter.engine.descriptor.MethodBasedTestDescriptor$MethodInfo$$Lambda$299/0x000002bb4b0aad18 + org.junit.jupiter.engine.descriptor.MethodBasedTestDescriptor$MethodInfo$$Lambda$300/0x000002bb4b0aaf38 + org.junit.jupiter.engine.discovery.MethodSelectorResolver$$Lambda$301/0x000002bb4b0ab168 + java.util.HashMap$KeySpliterator + org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution$$Lambda$302/0x000002bb4b0ab388 + org.junit.jupiter.engine.discovery.ClassOrderingVisitor$$Lambda$303/0x000002bb4b0ab5b8 + org.junit.jupiter.engine.discovery.ClassOrderingVisitor$$Lambda$304/0x000002bb4b0ab7e8 + org.junit.jupiter.engine.discovery.ClassOrderingVisitor$$Lambda$305/0x000002bb4b0aba20 + org.junit.jupiter.api.ClassDescriptor%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.14.0/junit-jupiter-api-5.14.0.jar + org.junit.jupiter.engine.discovery.AbstractAnnotatedDescriptorWrapper%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.jupiter.engine.discovery.DefaultClassDescriptor%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.jupiter.engine.discovery.ClassOrderingVisitor$$Lambda$306/0x000002bb4b0ae468 + org.junit.jupiter.engine.discovery.AbstractOrderingVisitor$$Lambda$307/0x000002bb4b0ae6a0 + org.junit.jupiter.engine.discovery.AbstractOrderingVisitor$$Lambda$308/0x000002bb4b0ae8f0 + org.junit.jupiter.engine.discovery.AbstractOrderingVisitor$$Lambda$309/0x000002bb4b0aeb30 + org.junit.jupiter.api.Order%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.14.0/junit-jupiter-api-5.14.0.jar + org.junit.jupiter.engine.discovery.ClassOrderingVisitor$$Lambda$310/0x000002bb4b0aef58 + org.junit.jupiter.engine.discovery.ClassOrderingVisitor$$Lambda$311/0x000002bb4b0af188 + org.junit.jupiter.engine.discovery.MethodOrderingVisitor$$Lambda$312/0x000002bb4b0af3c0 + org.junit.jupiter.engine.discovery.MethodOrderingVisitor$$Lambda$313/0x000002bb4b0af5f0 + org.junit.platform.engine.TestDescriptor$$Lambda$314/0x000002bb4b0af828 + org.junit.jupiter.api.TestClassOrder%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.14.0/junit-jupiter-api-5.14.0.jar + org.junit.jupiter.engine.discovery.ClassOrderingVisitor$$Lambda$315/0x000002bb4b0afc50 + org.junit.jupiter.engine.discovery.ClassOrderingVisitor$$Lambda$316/0x000002bb4b0ad000 + org.junit.jupiter.engine.discovery.ClassOrderingVisitor$$Lambda$317/0x000002bb4b0ad238 + org.junit.jupiter.engine.discovery.ClassOrderingVisitor$$Lambda$318/0x000002bb4b0ad478 + org.junit.jupiter.engine.discovery.ClassOrderingVisitor$$Lambda$319/0x000002bb4b0ad698 + org.junit.jupiter.api.TestMethodOrder%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.14.0/junit-jupiter-api-5.14.0.jar + org.junit.jupiter.engine.discovery.MethodOrderingVisitor$$Lambda$320/0x000002bb4b0adac8 + org.junit.jupiter.engine.discovery.MethodOrderingVisitor$$Lambda$321/0x000002bb4b0add00 + org.junit.jupiter.engine.discovery.MethodOrderingVisitor$$Lambda$322/0x000002bb4b0ac800 + org.junit.jupiter.engine.discovery.MethodOrderingVisitor$$Lambda$323/0x000002bb4b0aca38 + org.junit.jupiter.engine.config.CachingJupiterConfiguration$$Lambda$324/0x000002bb4b0acc58 + org.junit.jupiter.engine.discovery.MethodOrderingVisitor$$Lambda$325/0x000002bb4b0ac400 + org.junit.jupiter.engine.discovery.MethodOrderingVisitor$$Lambda$326/0x000002bb4b0b0000 + org.junit.jupiter.engine.discovery.MethodOrderingVisitor$$Lambda$327/0x000002bb4b0b0218 + org.junit.jupiter.api.MethodDescriptor%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.14.0/junit-jupiter-api-5.14.0.jar + org.junit.jupiter.engine.discovery.DefaultMethodDescriptor%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.jupiter.engine.discovery.MethodOrderingVisitor$$Lambda$328/0x000002bb4b0b0890 + org.junit.jupiter.engine.discovery.MethodOrderingVisitor$$Lambda$329/0x000002bb4b0b0ac8 + org.junit.platform.engine.support.hierarchical.Node$ExecutionMode%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + org.junit.jupiter.engine.discovery.MethodOrderingVisitor$$Lambda$330/0x000002bb4b0b0f40 + org.junit.jupiter.engine.descriptor.Validatable$$Lambda$331/0x000002bb4b0b1170 + org.junit.jupiter.api.extension.ClassTemplateInvocationLifecycleMethod%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.14.0/junit-jupiter-api-5.14.0.jar + org.junit.jupiter.engine.descriptor.LifecycleMethodUtils$$Lambda$332/0x000002bb4b0b1598 + org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor$$Lambda$333/0x000002bb4b0b17c8 + org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor$$Lambda$334/0x000002bb4b0b19e8 + org.junit.jupiter.engine.descriptor.DisplayNameUtils$$Lambda$335/0x000002bb4b0b1c08 + org.junit.jupiter.engine.descriptor.DisplayNameUtils$$Lambda$336/0x000002bb4b0b1e40 + org.junit.jupiter.engine.descriptor.DisplayNameUtils$$Lambda$337/0x000002bb4b0b2088 + org.junit.jupiter.engine.descriptor.MethodBasedTestDescriptor$$Lambda$338/0x000002bb4b0b22b8 + org.junit.jupiter.engine.descriptor.MethodBasedTestDescriptor$$Lambda$339/0x000002bb4b0b24d8 + org.junit.platform.launcher.core.EngineDiscoveryResultValidator$$Lambda$340/0x000002bb4b0b26f8 + org.junit.platform.engine.TestDescriptor$Type%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + org.junit.platform.launcher.core.EngineDiscoveryResultValidator$$Lambda$341/0x000002bb4b0b2d48 + org.junit.platform.launcher.EngineDiscoveryResult%20SAHA/.m2/repository/org/junit/platform/junit-platform-launcher/1.14.0/junit-platform-launcher-1.14.0.jar + org.junit.platform.launcher.EngineDiscoveryResult$Status%20SAHA/.m2/repository/org/junit/platform/junit-platform-launcher/1.14.0/junit-platform-launcher-1.14.0.jar + org.junit.platform.launcher.listeners.discovery.CompositeLauncherDiscoveryListener$$Lambda$342/0x000002bb4b0b35b0 + java.util.Collections$UnmodifiableList$1 + java.util.ArrayList$ListItr + org.junit.platform.commons.util.ExceptionUtils%20SAHA/.m2/repository/org/junit/platform/junit-platform-commons/1.14.0/junit-platform-commons-1.14.0.jar + java.io.StringWriter + org.junit.platform.launcher.listeners.discovery.AbortOnFailureLauncherDiscoveryListener$$Lambda$343/0x000002bb4b0b39e0 + org.junit.platform.launcher.core.DiscoveryIssueNotifier%20SAHA/.m2/repository/org/junit/platform/junit-platform-launcher/1.14.0/junit-platform-launcher-1.14.0.jar + org.junit.platform.engine.DiscoveryIssue$Severity%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + org.junit.platform.launcher.core.LauncherDiscoveryResult$EngineResultInfo%20SAHA/.m2/repository/org/junit/platform/junit-platform-launcher/1.14.0/junit-platform-launcher-1.14.0.jar + org.junit.platform.launcher.core.EngineFilterer$$Lambda$344/0x000002bb4b0b42a0 + org.junit.platform.launcher.core.EngineFilterer$$Lambda$345/0x000002bb4b0b44d8 + org.junit.platform.launcher.core.EngineFilterer$$Lambda$346/0x000002bb4b0b4720 + org.junit.platform.launcher.core.EngineFilterer$$Lambda$347/0x000002bb4b0b4958 + org.junit.platform.launcher.core.EngineFilterer$$Lambda$348/0x000002bb4b0b4b90 + org.junit.platform.launcher.core.EngineFilterer$$Lambda$349/0x000002bb4b0b4de0 + org.junit.platform.launcher.core.EngineFilterer$$Lambda$350/0x000002bb4b0b4ff8 + java.lang.invoke.LambdaForm$DMH/0x000002bb4b0b8000 + org.junit.platform.launcher.core.EngineDiscoveryOrchestrator$$Lambda$351/0x000002bb4b0b5240 + org.junit.platform.launcher.core.EngineDiscoveryOrchestrator$$Lambda$352/0x000002bb4b0b5460 + org.junit.platform.launcher.core.EngineDiscoveryOrchestrator$$Lambda$353/0x000002bb4b0b5690 + java.lang.invoke.LambdaForm$DMH/0x000002bb4b0b8400 + org.junit.platform.launcher.core.EngineDiscoveryOrchestrator$$Lambda$354/0x000002bb4b0b58b8 + org.junit.platform.engine.TestDescriptor$$Lambda$355/0x000002bb4b0b5ad0 + org.junit.platform.launcher.core.LauncherDiscoveryResult%20SAHA/.m2/repository/org/junit/platform/junit-platform-launcher/1.14.0/junit-platform-launcher-1.14.0.jar + org.junit.platform.launcher.listeners.discovery.CompositeLauncherDiscoveryListener$$Lambda$356/0x000002bb4b0b5f68 + org.junit.platform.launcher.core.LauncherPhase$$Lambda$357/0x000002bb4b0b6198 + org.junit.platform.engine.ConfigurationParameters$$Lambda$358/0x000002bb4b0b63d0 + org.junit.platform.launcher.core.LauncherDiscoveryResult$$Lambda$359/0x000002bb4b0b6610 + org.junit.platform.launcher.core.LauncherDiscoveryResult$$Lambda$360/0x000002bb4b0b6858 + org.junit.platform.launcher.TestPlan$$Lambda$361/0x000002bb4b0b6a90 + org.junit.platform.launcher.TestPlan$$Lambda$362/0x000002bb4b0b6cb0 + org.junit.platform.launcher.TestIdentifier%20SAHA/.m2/repository/org/junit/platform/junit-platform-launcher/1.14.0/junit-platform-launcher-1.14.0.jar + org.junit.platform.launcher.TestIdentifier$SerializedForm%20SAHA/.m2/repository/org/junit/platform/junit-platform-launcher/1.14.0/junit-platform-launcher-1.14.0.jar + java.io.ObjectStreamClass + java.io.ObjectStreamClass$Caches + java.io.ClassCache + java.io.ObjectStreamClass$Caches$1 + java.io.ClassCache$1 + java.io.ObjectStreamClass$Caches$2 + java.lang.ClassValue$ClassValueMap + java.io.ClassCache$CacheRef + java.io.Externalizable + java.io.ObjectStreamClass$2 + jdk.internal.reflect.UnsafeFieldAccessorFactory + jdk.internal.reflect.UnsafeQualifiedStaticFieldAccessorImpl + jdk.internal.reflect.UnsafeQualifiedStaticLongFieldAccessorImpl + java.util.ComparableTimSort + jdk.internal.reflect.SerializationConstructorAccessorImpl + jdk.internal.reflect.GeneratedSerializationConstructorAccessor1 + java.io.ObjectOutput + java.io.ObjectStreamConstants + java.io.ObjectOutputStream + java.io.ObjectInput + java.io.ObjectInputStream + java.lang.Class$$Lambda$363/0x000002bb4b07d470 + java.util.stream.Collectors$$Lambda$43/0x800000051 + java.util.stream.Collectors$$Lambda$44/0x800000052 + java.util.stream.Collectors$$Lambda$45/0x800000053 + java.util.stream.Collectors$$Lambda$46/0x800000054 + java.lang.CloneNotSupportedException + java.io.ObjectStreamClass$FieldReflectorKey + java.io.ObjectStreamClass$FieldReflector + org.junit.platform.launcher.TestIdentifier$$Lambda$368/0x000002bb4b0b72f8 + org.junit.platform.launcher.TestPlan$$Lambda$369/0x000002bb4b0b7530 + org.junit.jupiter.engine.descriptor.MethodBasedTestDescriptor$$Lambda$370/0x000002bb4b0b7768 + org.junit.jupiter.engine.descriptor.MethodBasedTestDescriptor$$Lambda$371/0x000002bb4b0b7998 + software.amazon.lambda.powertools.tracing.internal.TracingUserAgentInterceptorTest + software.amazon.lambda.powertools.tracing.TracingUtilsTest + org.apache.maven.surefire.api.util.TestsToRun%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-api/3.5.4/surefire-api-3.5.4.jar + org.apache.maven.surefire.api.util.DefaultRunOrderCalculator%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-api/3.5.4/surefire-api-3.5.4.jar + java.util.random.RandomGenerator + java.util.Random + org.apache.maven.surefire.api.util.CloseableIterator%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-api/3.5.4/surefire-api-3.5.4.jar + org.apache.maven.surefire.api.util.TestsToRun$ClassesIterator%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-api/3.5.4/surefire-api-3.5.4.jar + java.util.NoSuchElementException + org.apache.maven.surefire.junitplatform.JUnitPlatformProvider$$Lambda$372/0x000002bb4b0bc9d0 + org.apache.maven.surefire.junitplatform.JUnitPlatformProvider$$Lambda$373/0x000002bb4b0bcbf0 + org.junit.platform.launcher.core.LauncherDiscoveryRequestBuilder$$Lambda$374/0x000002bb4b0bce20 + org.junit.platform.launcher.core.InterceptingLauncher$$Lambda$375/0x000002bb4b0bd050 + org.junit.platform.launcher.core.EngineExecutionOrchestrator$$Lambda$376/0x000002bb4b0bd270 + org.junit.platform.launcher.core.CompositeTestExecutionListener$EagerTestExecutionListener%20SAHA/.m2/repository/org/junit/platform/junit-platform-launcher/1.14.0/junit-platform-launcher-1.14.0.jar + org.junit.platform.launcher.core.CompositeTestExecutionListener$$Lambda$377/0x000002bb4b0bd698 + org.junit.platform.launcher.core.CompositeTestExecutionListener$$Lambda$378/0x000002bb4b0bd8e8 + org.junit.platform.engine.reporting.ReportEntry%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + java.lang.invoke.LambdaForm$DMH/0x000002bb4b0b8c00 + org.junit.platform.launcher.core.EngineExecutionOrchestrator$$Lambda$379/0x000002bb4b0bdd30 + org.junit.platform.launcher.core.StreamInterceptingTestExecutionListener%20SAHA/.m2/repository/org/junit/platform/junit-platform-launcher/1.14.0/junit-platform-launcher-1.14.0.jar + org.junit.platform.launcher.core.EngineExecutionOrchestrator$$Lambda$380/0x000002bb4b0be230 + org.junit.platform.engine.EngineExecutionListener$1%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + org.junit.platform.launcher.core.IterationOrder%20SAHA/.m2/repository/org/junit/platform/junit-platform-launcher/1.14.0/junit-platform-launcher-1.14.0.jar + org.junit.platform.launcher.core.IterationOrder$1%20SAHA/.m2/repository/org/junit/platform/junit-platform-launcher/1.14.0/junit-platform-launcher-1.14.0.jar + org.junit.platform.launcher.core.IterationOrder$2%20SAHA/.m2/repository/org/junit/platform/junit-platform-launcher/1.14.0/junit-platform-launcher-1.14.0.jar + org.junit.platform.launcher.core.CompositeTestExecutionListener$$Lambda$381/0x000002bb4b0bef98 + org.junit.platform.launcher.core.CompositeTestExecutionListener$$Lambda$382/0x000002bb4b0bf1c8 + org.junit.platform.launcher.core.CompositeTestExecutionListener$$Lambda$383/0x000002bb4b0bf3e8 + org.junit.platform.launcher.core.CompositeEngineExecutionListener%20SAHA/.m2/repository/org/junit/platform/junit-platform-launcher/1.14.0/junit-platform-launcher-1.14.0.jar + org.junit.platform.launcher.core.ListenerRegistry$$Lambda$384/0x000002bb4b0bf890 + org.junit.platform.launcher.core.ExecutionListenerAdapter%20SAHA/.m2/repository/org/junit/platform/junit-platform-launcher/1.14.0/junit-platform-launcher-1.14.0.jar + org.junit.platform.launcher.core.DelegatingEngineExecutionListener%20SAHA/.m2/repository/org/junit/platform/junit-platform-launcher/1.14.0/junit-platform-launcher-1.14.0.jar + org.junit.platform.launcher.core.StackTracePruningEngineExecutionListener%20SAHA/.m2/repository/org/junit/platform/junit-platform-launcher/1.14.0/junit-platform-launcher-1.14.0.jar + org.junit.platform.launcher.core.EngineExecutionOrchestrator$$Lambda$385/0x000002bb4b0ba278 + org.junit.platform.launcher.core.OutcomeDelayingEngineExecutionListener%20SAHA/.m2/repository/org/junit/platform/junit-platform-launcher/1.14.0/junit-platform-launcher-1.14.0.jar + org.junit.jupiter.engine.config.CachingJupiterConfiguration$$Lambda$386/0x000002bb4b0ba730 + org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + org.junit.jupiter.engine.execution.JupiterEngineExecutionContext%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.jupiter.engine.execution.LauncherStoreFacade%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.jupiter.api.extension.ExtensionContext$Store%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.14.0/junit-jupiter-api-5.14.0.jar + org.junit.jupiter.engine.execution.LauncherStoreFacade$$Lambda$387/0x000002bb4b0bb258 + org.junit.jupiter.engine.execution.JupiterEngineExecutionContext$State%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.platform.engine.support.hierarchical.ThrowableCollector$Factory%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + org.junit.platform.engine.support.hierarchical.ThrowableCollector%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + org.junit.jupiter.engine.support.JupiterThrowableCollectorFactory%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.jupiter.engine.support.OpenTest4JAndJUnit4AwareThrowableCollector%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.jupiter.engine.JupiterTestEngine$$Lambda$388/0x000002bb4b0b9000 + org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutorService$TestTask%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + org.junit.platform.engine.support.hierarchical.NodeTreeWalker%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + org.junit.platform.engine.support.hierarchical.LockManager%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + java.util.concurrent.locks.ReadWriteLock + org.junit.platform.engine.support.hierarchical.ResourceLock%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + org.junit.platform.engine.support.hierarchical.SingleLock%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + org.junit.platform.engine.support.hierarchical.ExclusiveResource%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + org.junit.platform.engine.support.hierarchical.ExclusiveResource$LockMode%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + org.junit.platform.engine.support.hierarchical.ExclusiveResource$$Lambda$389/0x000002bb4b0c0648 + org.junit.platform.engine.support.hierarchical.ExclusiveResource$$Lambda$390/0x000002bb4b0c0880 + java.util.Comparator$$Lambda$391/0x000002bb4b07e190 + java.lang.invoke.LambdaForm$DMH/0x000002bb4b0c4000 + java.util.Comparator$$Lambda$392/0x000002bb4b07e428 + org.junit.platform.engine.support.hierarchical.ExclusiveResource$$Lambda$393/0x000002bb4b0c0ab8 + org.junit.platform.engine.support.hierarchical.LockManager$$Lambda$394/0x000002bb4b0c0cf0 + java.util.concurrent.locks.ReentrantReadWriteLock + java.util.concurrent.locks.ReentrantReadWriteLock$Sync + java.util.concurrent.locks.ReentrantReadWriteLock$NonfairSync + java.util.concurrent.locks.ReentrantReadWriteLock$Sync$ThreadLocalHoldCounter + java.util.concurrent.locks.ReentrantReadWriteLock$ReadLock + java.util.concurrent.locks.ReentrantReadWriteLock$WriteLock + org.junit.platform.commons.util.CollectionUtils$$Lambda$395/0x000002bb4b0c0f28 + org.junit.platform.engine.support.hierarchical.NodeUtils%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + org.junit.platform.engine.support.hierarchical.NodeUtils$1%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + org.junit.platform.engine.support.hierarchical.NodeExecutionAdvisor%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + org.junit.platform.engine.support.hierarchical.NodeTreeWalker$$Lambda$396/0x000002bb4b0c1838 + org.junit.platform.engine.support.hierarchical.NopLock%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + org.junit.jupiter.api.parallel.ResourceLocksProvider%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.14.0/junit-jupiter-api-5.14.0.jar + org.junit.jupiter.engine.descriptor.ClassTestDescriptor$$Lambda$397/0x000002bb4b0c1ee8 + org.junit.jupiter.engine.descriptor.ExclusiveResourceCollector$DefaultExclusiveResourceCollector$$Lambda$398/0x000002bb4b0c2128 + org.junit.jupiter.engine.descriptor.ExclusiveResourceCollector$DefaultExclusiveResourceCollector$$Lambda$399/0x000002bb4b0c2370 + org.junit.jupiter.engine.descriptor.ExclusiveResourceCollector$DefaultExclusiveResourceCollector$$Lambda$400/0x000002bb4b0c25c0 + org.junit.jupiter.engine.descriptor.ExclusiveResourceCollector$DefaultExclusiveResourceCollector$$Lambda$401/0x000002bb4b0c27f8 + org.junit.jupiter.engine.descriptor.ExclusiveResourceCollector$DefaultExclusiveResourceCollector$$Lambda$402/0x000002bb4b0c2a30 + org.junit.jupiter.engine.descriptor.ExclusiveResourceCollector$2%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.platform.engine.support.hierarchical.NodeTreeWalker$$Lambda$403/0x000002bb4b0c2e68 + org.junit.platform.engine.support.hierarchical.NodeTreeWalker$$Lambda$404/0x000002bb4b0c32a0 + org.junit.platform.engine.support.hierarchical.NodeTreeWalker$$Lambda$405/0x000002bb4b0c34d0 + org.junit.jupiter.engine.descriptor.MethodBasedTestDescriptor$$Lambda$406/0x000002bb4b0c3700 + org.junit.jupiter.engine.descriptor.MethodBasedTestDescriptor$$Lambda$407/0x000002bb4b0c3920 + org.junit.jupiter.engine.descriptor.ResourceLockAware$1%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + java.util.ArrayDeque$DeqSpliterator + org.junit.jupiter.engine.descriptor.ResourceLockAware$$Lambda$408/0x000002bb4b0c3da0 + org.junit.jupiter.engine.descriptor.ResourceLockAware$$Lambda$409/0x000002bb4b0c6000 + org.junit.jupiter.engine.descriptor.ResourceLockAware$$Lambda$410/0x000002bb4b0c6240 + java.util.stream.SortedOps + java.util.stream.SortedOps$OfRef + org.junit.platform.engine.support.hierarchical.LockManager$$Lambda$411/0x000002bb4b0c6478 + org.junit.platform.engine.support.hierarchical.LockManager$$Lambda$412/0x000002bb4b0c66b0 + java.lang.invoke.LambdaForm$DMH/0x000002bb4b0c4400 + java.util.stream.Collectors$$Lambda$413/0x000002bb4b07fd98 + java.util.stream.Collectors$$Lambda$414/0x000002bb4b0e04f0 + java.util.stream.SortedOps$AbstractRefSortingSink + java.util.stream.SortedOps$SizedRefSortingSink + java.util.stream.Collectors$$Lambda$415/0x000002bb4b0e0cb0 + org.junit.platform.engine.support.hierarchical.LockManager$$Lambda$416/0x000002bb4b0c68c8 + org.junit.platform.engine.support.hierarchical.CompositeLock%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + org.junit.platform.engine.support.hierarchical.LockManager$$Lambda$417/0x000002bb4b0c6d98 + org.junit.platform.engine.support.hierarchical.CompositeLock$$Lambda$418/0x000002bb4b0c6fd8 + org.junit.platform.engine.support.hierarchical.NodeTreeWalker$$Lambda$419/0x000002bb4b0c7220 + org.junit.platform.engine.support.hierarchical.NodeTestTaskContext%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + org.junit.platform.engine.support.hierarchical.NodeTestTask%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + org.junit.platform.engine.support.hierarchical.Node$DynamicTestExecutor%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + org.junit.platform.engine.support.hierarchical.NodeTestTask$$Lambda$420/0x000002bb4b0c7ac8 + org.opentest4j.IncompleteExecutionException%20SAHA/.m2/repository/org/opentest4j/opentest4j/1.3.0/opentest4j-1.3.0.jar + org.opentest4j.TestAbortedException%20SAHA/.m2/repository/org/opentest4j/opentest4j/1.3.0/opentest4j-1.3.0.jar + org.junit.jupiter.engine.support.OpenTest4JAndJUnit4AwareThrowableCollector$$Lambda$421/0x000002bb4b0c5258 + org.junit.platform.commons.util.UnrecoverableExceptions%20SAHA/.m2/repository/org/junit/platform/junit-platform-commons/1.14.0/junit-platform-commons-1.14.0.jar + org.junit.jupiter.engine.support.OpenTest4JAndJUnit4AwareThrowableCollector$$Lambda$422/0x000002bb4b0c56a8 + org.junit.platform.engine.support.hierarchical.ThrowableCollector$Executable%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + org.junit.platform.engine.support.hierarchical.NodeTestTask$$Lambda$423/0x000002bb4b0c5ab8 + org.junit.jupiter.engine.extension.MutableExtensionRegistry%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.jupiter.engine.extension.MutableExtensionRegistry$Entry%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.jupiter.api.extension.ExecutionCondition%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.14.0/junit-jupiter-api-5.14.0.jar + org.junit.jupiter.engine.extension.DisabledCondition%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.jupiter.api.extension.TestInstancePreDestroyCallback%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.14.0/junit-jupiter-api-5.14.0.jar + org.junit.jupiter.engine.extension.AutoCloseExtension%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.jupiter.engine.extension.TimeoutExtension%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.jupiter.api.Timeout%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.14.0/junit-jupiter-api-5.14.0.jar + org.junit.jupiter.api.extension.ExtensionContext$Namespace%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.14.0/junit-jupiter-api-5.14.0.jar + org.junit.jupiter.api.extension.TestTemplateInvocationContextProvider%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.14.0/junit-jupiter-api-5.14.0.jar + org.junit.jupiter.engine.extension.RepeatedTestExtension%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.jupiter.api.extension.TestTemplateInvocationContext%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.14.0/junit-jupiter-api-5.14.0.jar + org.junit.jupiter.api.extension.ParameterResolver%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.14.0/junit-jupiter-api-5.14.0.jar + org.junit.jupiter.engine.extension.TestInfoParameterResolver%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.jupiter.api.TestInfo%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.14.0/junit-jupiter-api-5.14.0.jar + org.junit.jupiter.engine.extension.TestReporterParameterResolver%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.jupiter.api.TestReporter%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.14.0/junit-jupiter-api-5.14.0.jar + org.junit.jupiter.engine.extension.MutableExtensionRegistry$$Lambda$424/0x000002bb4b0c9c20 + org.junit.jupiter.engine.extension.MutableExtensionRegistry$$Lambda$425/0x000002bb4b0c9e50 + org.junit.jupiter.engine.extension.MutableExtensionRegistry$$Lambda$426/0x000002bb4b0ca080 + org.junit.jupiter.engine.extension.MutableExtensionRegistry$Entry$$Lambda$427/0x000002bb4b0ca2a0 + org.junit.jupiter.engine.extension.TempDirectory%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.jupiter.engine.extension.TempDirectory$Scope%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.jupiter.api.extension.AnnotatedElementContext%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.14.0/junit-jupiter-api-5.14.0.jar + org.junit.jupiter.engine.config.CachingJupiterConfiguration$$Lambda$428/0x000002bb4b0cab90 + org.junit.jupiter.engine.config.CachingJupiterConfiguration$$Lambda$429/0x000002bb4b0cadd0 + org.junit.jupiter.engine.extension.ExtensionContextInternal%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.jupiter.engine.descriptor.AbstractExtensionContext%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.jupiter.engine.descriptor.JupiterEngineExtensionContext%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.jupiter.api.extension.ExecutableInvoker%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.14.0/junit-jupiter-api-5.14.0.jar + org.junit.jupiter.engine.execution.DefaultExecutableInvoker%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.jupiter.engine.descriptor.AbstractExtensionContext$$Lambda$430/0x000002bb4b0cc028 + org.junit.jupiter.engine.descriptor.AbstractExtensionContext$$Lambda$431/0x000002bb4b0cc260 + org.junit.jupiter.engine.descriptor.AbstractExtensionContext$$Lambda$432/0x000002bb4b0cc478 + org.junit.jupiter.engine.execution.NamespaceAwareStore%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.jupiter.api.extension.ExtensionContextException%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.14.0/junit-jupiter-api-5.14.0.jar + org.junit.platform.engine.support.store.Namespace%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + java.lang.invoke.LambdaForm$DMH/0x000002bb4b0d0000 + org.junit.jupiter.engine.descriptor.AbstractExtensionContext$$Lambda$433/0x000002bb4b0ccdc0 + org.junit.jupiter.engine.execution.JupiterEngineExecutionContext$Builder%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.platform.engine.support.hierarchical.NodeTestTask$$Lambda$434/0x000002bb4b0cd210 + org.junit.platform.engine.support.hierarchical.Node$SkipResult%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + org.junit.platform.launcher.core.CompositeEngineExecutionListener$$Lambda$435/0x000002bb4b0cd648 + org.junit.platform.launcher.core.CompositeEngineExecutionListener$$Lambda$436/0x000002bb4b0cd878 + org.junit.platform.launcher.core.CompositeEngineExecutionListener$$Lambda$437/0x000002bb4b0cda98 + org.junit.platform.launcher.TestPlan$$Lambda$438/0x000002bb4b0cdcc8 + org.junit.platform.launcher.TestPlan$$Lambda$439/0x000002bb4b0cdee0 + org.junit.platform.launcher.core.CompositeTestExecutionListener$$Lambda$440/0x000002bb4b0ce100 + org.junit.platform.launcher.core.CompositeTestExecutionListener$$Lambda$441/0x000002bb4b0ce330 + org.junit.platform.launcher.core.CompositeTestExecutionListener$$Lambda$442/0x000002bb4b0ce550 + org.junit.platform.launcher.core.CompositeTestExecutionListener$$Lambda$443/0x000002bb4b0ce780 + org.junit.platform.engine.UniqueIdFormat$$Lambda$444/0x000002bb4b0ce9a0 + org.apache.maven.surefire.junitplatform.RunListenerAdapter$$Lambda$445/0x000002bb4b0cebe0 + org.junit.platform.engine.support.hierarchical.NodeTestTask$$Lambda$446/0x000002bb4b0cee30 + org.junit.platform.engine.support.hierarchical.Node$Invocation%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + org.junit.platform.engine.support.hierarchical.NodeTestTask$$Lambda$447/0x000002bb4b0cf248 + org.junit.platform.engine.support.hierarchical.NodeTestTask$$Lambda$448/0x000002bb4b0cf468 + org.junit.platform.engine.support.hierarchical.NodeTestTask$$Lambda$449/0x000002bb4b0cf688 + org.junit.platform.engine.support.hierarchical.NodeTestTask$$Lambda$450/0x000002bb4b0cf8c8 + org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + java.util.concurrent.CancellationException + org.junit.platform.engine.support.hierarchical.NodeTestTask$$Lambda$451/0x000002bb4b0cfd28 + org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService$$Lambda$452/0x000002bb4b0d4000 + org.junit.jupiter.engine.descriptor.ExtensionUtils%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + java.util.function.ToIntFunction + org.junit.jupiter.engine.descriptor.ExtensionUtils$$Lambda$453/0x000002bb4b0d4428 + java.util.Comparator$$Lambda$454/0x000002bb4b0e1148 + org.junit.jupiter.engine.descriptor.ExtensionUtils$$Lambda$455/0x000002bb4b0d4640 + org.junit.jupiter.engine.descriptor.ExtensionUtils$$Lambda$456/0x000002bb4b0d4888 + org.junit.jupiter.engine.descriptor.ExtensionUtils$$Lambda$457/0x000002bb4b0d4ac0 + org.junit.jupiter.engine.extension.MutableExtensionRegistry$LateInitEntry%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.jupiter.engine.extension.MutableExtensionRegistry$$Lambda$458/0x000002bb4b0d4f38 + org.junit.platform.commons.util.ReflectionUtils$$Lambda$459/0x000002bb4b0d5168 + org.junit.platform.commons.util.ReflectionUtils$$Lambda$460/0x000002bb4b0d53a0 + java.util.stream.Nodes$ArrayNode + java.util.stream.Nodes$FixedNodeBuilder + org.junit.jupiter.engine.descriptor.ExtensionUtils$$Lambda$461/0x000002bb4b0d55b8 + software.amazon.lambda.powertools.tracing.nonhandler.PowerToolNonHandler + org.junit.platform.commons.util.ReflectionUtils$$Lambda$462/0x000002bb4b0d5a10 + org.junit.platform.commons.util.ReflectionUtils$$Lambda$463/0x000002bb4b0d5ca0 + org.junit.platform.commons.util.ReflectionUtils$$Lambda$464/0x000002bb4b0d5ee8 + org.junit.platform.commons.util.ReflectionUtils$$Lambda$465/0x000002bb4b0d6100 + org.junit.platform.commons.util.ReflectionUtils$$Lambda$466/0x000002bb4b0d6350 + org.junit.platform.commons.util.ReflectionUtils$$Lambda$467/0x000002bb4b0d6568 + org.junit.platform.commons.util.ReflectionUtils$$Lambda$468/0x000002bb4b0d67b8 + org.junit.jupiter.engine.descriptor.ExtensionUtils$$Lambda$469/0x000002bb4b0d69d0 + java.util.stream.SortedOps$RefSortingSink + java.util.stream.SortedOps$RefSortingSink$$Lambda$470/0x000002bb4b0e1c98 + org.junit.jupiter.api.extension.TestInstanceFactory%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.14.0/junit-jupiter-api-5.14.0.jar + org.junit.jupiter.engine.extension.MutableExtensionRegistry$$Lambda$471/0x000002bb4b0d6df8 + org.junit.jupiter.engine.extension.MutableExtensionRegistry$$Lambda$472/0x000002bb4b0d7030 + org.junit.jupiter.engine.extension.MutableExtensionRegistry$$Lambda$473/0x000002bb4b0d7280 + org.junit.jupiter.engine.extension.ExtensionRegistry$$Lambda$474/0x000002bb4b0d74c0 + org.junit.platform.commons.util.ReflectionUtils$$Lambda$475/0x000002bb4b0d76d8 + org.junit.platform.commons.util.ReflectionUtils$$Lambda$476/0x000002bb4b0d7920 + org.junit.platform.commons.util.ReflectionUtils$$Lambda$477/0x000002bb4b0d7b38 + org.junit.jupiter.engine.descriptor.ExtensionUtils$$Lambda$478/0x000002bb4b0d7d58 + org.junit.jupiter.engine.descriptor.ExtensionUtils$$Lambda$479/0x000002bb4b0d2000 + org.junit.jupiter.engine.descriptor.ExtensionUtils$$Lambda$480/0x000002bb4b0d2238 + org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor$$Lambda$481/0x000002bb4b0d2468 + org.junit.jupiter.engine.execution.BeforeEachMethodAdapter%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor$$Lambda$482/0x000002bb4b0d2890 + org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor$$Lambda$483/0x000002bb4b0d2ad0 + org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor$$Lambda$484/0x000002bb4b0d2d00 + org.junit.jupiter.engine.execution.AfterEachMethodAdapter%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor$$Lambda$485/0x000002bb4b0d3118 + org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor$$Lambda$486/0x000002bb4b0d3358 + org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor$$Lambda$487/0x000002bb4b0d3578 + org.junit.jupiter.engine.descriptor.ExtensionUtils$$Lambda$488/0x000002bb4b0d37a8 + org.junit.jupiter.engine.descriptor.ExtensionUtils$$Lambda$489/0x000002bb4b0d39f0 + org.junit.jupiter.api.extension.RegisterExtension%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.14.0/junit-jupiter-api-5.14.0.jar + org.junit.jupiter.engine.descriptor.ClassExtensionContext%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.jupiter.engine.execution.TestInstancesProvider%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.jupiter.api.extension.TestInstances%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.14.0/junit-jupiter-api-5.14.0.jar + org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor$$Lambda$490/0x000002bb4b0d18d8 + org.junit.jupiter.engine.config.CachingJupiterConfiguration$$Lambda$491/0x000002bb4b0d1b08 + org.junit.platform.commons.util.ClassNamePatternFilterUtils$$Lambda$492/0x000002bb4b0d1d48 + org.junit.platform.commons.util.ClassNamePatternFilterUtils$FilterType%20SAHA/.m2/repository/org/junit/platform/junit-platform-commons/1.14.0/junit-platform-commons-1.14.0.jar + org.junit.platform.commons.util.ClassNamePatternFilterUtils$$Lambda$493/0x000002bb4b0d0c30 + org.junit.platform.commons.util.ClassNamePatternFilterUtils$$Lambda$494/0x000002bb4b0d0400 + org.junit.platform.commons.util.ClassNamePatternFilterUtils$$Lambda$495/0x000002bb4b0d8000 + org.junit.platform.commons.util.ClassNamePatternFilterUtils$$Lambda$496/0x000002bb4b0d8240 + org.junit.jupiter.engine.execution.ConditionEvaluator$$Lambda$497/0x000002bb4b0d8488 + org.junit.jupiter.engine.execution.ConditionEvaluator$$Lambda$498/0x000002bb4b0d86c8 + org.junit.jupiter.api.Disabled%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.14.0/junit-jupiter-api-5.14.0.jar + org.junit.jupiter.engine.extension.DisabledCondition$$Lambda$499/0x000002bb4b0d8b08 + org.junit.jupiter.engine.execution.ConditionEvaluator$$Lambda$500/0x000002bb4b0d8d48 + org.junit.platform.engine.UniqueIdFormat$$Lambda$501/0x000002bb4b0d8f68 + java.lang.invoke.LambdaForm$DMH/0x000002bb4b0dc000 + org.junit.platform.engine.UniqueIdFormat$$Lambda$502/0x000002bb4b0d91a8 + java.lang.invoke.LambdaForm$DMH/0x000002bb4b0dc400 + java.net.URLDecoder + org.apache.maven.surefire.junitplatform.RunListenerAdapter$$Lambda$503/0x000002bb4b0d93c8 + org.apache.maven.surefire.junitplatform.RunListenerAdapter$$Lambda$504/0x000002bb4b0d9618 + org.apache.maven.surefire.junitplatform.RunListenerAdapter$$Lambda$505/0x000002bb4b0d9868 + org.apache.maven.surefire.junitplatform.RunListenerAdapter$$Lambda$506/0x000002bb4b0d9ab8 + org.apache.maven.surefire.junitplatform.RunListenerAdapter$$Lambda$507/0x000002bb4b0d9cf8 + org.apache.maven.surefire.junitplatform.RunListenerAdapter$$Lambda$508/0x000002bb4b0d9f48 + org.apache.maven.surefire.junitplatform.RunListenerAdapter$$Lambda$509/0x000002bb4b0da180 + org.apache.maven.surefire.junitplatform.RunListenerAdapter$$Lambda$510/0x000002bb4b0da3d0 + org.apache.maven.surefire.junitplatform.RunListenerAdapter$$Lambda$511/0x000002bb4b0da610 + org.apache.maven.surefire.junitplatform.RunListenerAdapter$ResultDisplay%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-junit-platform/3.5.4/surefire-junit-platform-3.5.4.jar + org.apache.maven.surefire.api.report.SimpleReportEntry%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-api/3.5.4/surefire-api-3.5.4.jar + org.apache.maven.surefire.api.util.internal.ClassMethod%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-api/3.5.4/surefire-api-3.5.4.jar + org.apache.maven.surefire.report.ClassMethodIndexer$$Lambda$512/0x000002bb4b0daf80 + org.apache.maven.surefire.api.util.internal.ImmutableMap%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-api/3.5.4/surefire-api-3.5.4.jar + org.apache.maven.surefire.booter.spi.EventChannelEncoder$StackTrace%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-booter/3.5.4/surefire-booter-3.5.4.jar + sun.nio.cs.UTF_8$Encoder + java.lang.StrictMath + java.nio.StringCharBuffer + org.junit.jupiter.engine.descriptor.CallbackSupport$CallbackInvoker%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor$$Lambda$513/0x000002bb4b0dbb48 + org.junit.jupiter.engine.descriptor.CallbackSupport%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.jupiter.engine.descriptor.CallbackSupport$$Lambda$514/0x000002bb4b0de000 + org.junit.jupiter.engine.extension.TimeoutDuration%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.jupiter.engine.extension.TimeoutExtension$$Lambda$515/0x000002bb4b0de440 + org.junit.jupiter.engine.extension.TimeoutExtension$$Lambda$516/0x000002bb4b0de678 + org.junit.jupiter.api.Timeout$ThreadMode%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.14.0/junit-jupiter-api-5.14.0.jar + org.junit.jupiter.engine.extension.TimeoutExtension$$Lambda$517/0x000002bb4b0deae8 + org.junit.jupiter.engine.extension.TimeoutExtension$$Lambda$518/0x000002bb4b0ded20 + org.junit.jupiter.engine.extension.TempDirectory$$Lambda$519/0x000002bb4b0def50 + org.junit.jupiter.engine.extension.TempDirectory$$Lambda$520/0x000002bb4b0df1a0 + org.junit.jupiter.engine.extension.TempDirectory$$Lambda$521/0x000002bb4b0df3d0 + org.junit.jupiter.engine.extension.TempDirectory$$Lambda$522/0x000002bb4b0df618 + org.junit.jupiter.engine.execution.NamespaceAwareStore$$Lambda$523/0x000002bb4b0df858 + org.junit.platform.engine.support.store.NamespacedHierarchicalStore$CompositeKey%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + org.junit.platform.engine.support.store.NamespacedHierarchicalStore$StoredValue%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + org.junit.platform.engine.support.store.NamespacedHierarchicalStore$$Lambda$524/0x000002bb4b0dd000 + org.junit.platform.engine.support.store.NamespacedHierarchicalStore$MemoizingSupplier%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + org.junit.platform.engine.support.store.NamespacedHierarchicalStore$$Lambda$525/0x000002bb4b0dd468 + org.junit.jupiter.engine.extension.TempDirectory$$Lambda$526/0x000002bb4b0dd688 + org.junit.platform.engine.support.store.NamespacedHierarchicalStore$MemoizingSupplier$Failure%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + org.junit.jupiter.api.io.TempDir%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.14.0/junit-jupiter-api-5.14.0.jar + org.junit.platform.commons.util.AnnotationUtils$$Lambda$527/0x000002bb4b0dc800 + org.junit.jupiter.engine.extension.TempDirectory$$Lambda$528/0x000002bb4b0dca50 + sun.reflect.generics.repository.AbstractRepository + sun.reflect.generics.repository.GenericDeclRepository + sun.reflect.generics.repository.ClassRepository + sun.reflect.generics.tree.FormalTypeParameter + sun.reflect.generics.tree.Signature + sun.reflect.generics.tree.ClassSignature + org.junitpioneer.jupiter.ClearEnvironmentVariable%20SAHA/.m2/repository/org/junit-pioneer/junit-pioneer/2.3.0/junit-pioneer-2.3.0.jar + org.junitpioneer.jupiter.RestoreEnvironmentVariables%20SAHA/.m2/repository/org/junit-pioneer/junit-pioneer/2.3.0/junit-pioneer-2.3.0.jar + java.lang.reflect.ParameterizedType + sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl + java.lang.reflect.TypeVariable + sun.reflect.generics.reflectiveObjects.LazyReflectiveObjectGenerator + sun.reflect.generics.reflectiveObjects.TypeVariableImpl + org.junitpioneer.internal.PioneerAnnotationUtils%20SAHA/.m2/repository/org/junit-pioneer/junit-pioneer/2.3.0/junit-pioneer-2.3.0.jar + java.lang.invoke.LambdaForm$DMH/0x000002bb4b104000 + org.junitpioneer.internal.PioneerAnnotationUtils$$Lambda$529/0x000002bb4b1003f8 + sun.reflect.annotation.AnnotationSupport + java.util.stream.Collectors$$Lambda$530/0x000002bb4b0e53c0 + java.util.stream.Collectors$$Lambda$531/0x000002bb4b0e55d8 + java.util.stream.Collectors$$Lambda$532/0x000002bb4b0e5800 + java.util.stream.Collectors$$Lambda$533/0x000002bb4b0e5a40 + java.util.ImmutableCollections$Access + jdk.internal.access.JavaUtilCollectionAccess + java.util.ImmutableCollections$Access$1 + org.junitpioneer.internal.PioneerAnnotationUtils$$Lambda$534/0x000002bb4b100828 + org.junitpioneer.internal.PioneerAnnotationUtils$$Lambda$535/0x000002bb4b100a68 + java.util.AbstractList$RandomAccessSpliterator + java.lang.invoke.MethodHandleImpl$BindCaller + java.lang.invoke.MethodHandleImpl$BindCaller$1 + java.lang.invoke.LambdaForm$MH/0x000002bb4b104400 + java.lang.invoke.LambdaForm$MH/0x000002bb4b104800 + java.lang.invoke.MethodHandleImpl$CasesHolder + java.lang.invoke.MethodHandleImpl$LoopClauses + java.lang.invoke.MethodHandleImpl$ArrayAccess + java.lang.invoke.MethodHandleImpl$2 + java.lang.invoke.MethodHandleImpl$ArrayAccessor + java.lang.invoke.MethodHandleImpl$ArrayAccessor$1 + java.lang.invoke.LambdaForm$DMH/0x000002bb4b104c00 + java.lang.invoke.LambdaForm$DMH/0x000002bb4b105000 + java.lang.invoke.LambdaForm$MH/0x000002bb4b105400 + java.lang.invoke.LambdaForm$MH/0x000002bb4b105800 + org.junitpioneer.internal.PioneerAnnotationUtils$$InjectedInvoker/0x000002bb4b105c00 + java.util.Collections$CopiesList + java.lang.invoke.LambdaForm$MH/0x000002bb4b106000 + java.lang.invoke.BoundMethodHandle$Species_LLL + java.lang.invoke.LambdaForm$MH/0x000002bb4b106400 + java.lang.invoke.LambdaForm$MH/0x000002bb4b106800 + java.lang.invoke.LambdaForm$MH/0x000002bb4b106c00 + java.lang.invoke.BoundMethodHandle$Species_LLLL + java.lang.invoke.LambdaForm$MH/0x000002bb4b107000 + java.lang.invoke.MethodHandleImpl$WrappedMember + org.junitpioneer.internal.PioneerAnnotationUtils$$Lambda$536/0x000002bb4b100ca0 + org.junitpioneer.internal.PioneerUtils%20SAHA/.m2/repository/org/junit-pioneer/junit-pioneer/2.3.0/junit-pioneer-2.3.0.jar + org.junitpioneer.internal.PioneerUtils$$Lambda$537/0x000002bb4b1010d8 + org.junitpioneer.jupiter.AbstractEntryBasedExtension$$Lambda$538/0x000002bb4b101310 + java.lang.invoke.LambdaForm$DMH/0x000002bb4b107400 + java.lang.invoke.LambdaForm$DMH/0x000002bb4b107800 + java.lang.invoke.LambdaForm$MH/0x000002bb4b107c00 + java.lang.invoke.LambdaForm$DMH/0x000002bb4b108000 + org.junitpioneer.jupiter.AbstractEntryBasedExtension$$Lambda$539/0x000002bb4b101540 + java.lang.invoke.LambdaForm$DMH/0x000002bb4b108400 + java.lang.invoke.LambdaForm$DMH/0x000002bb4b108800 + java.lang.invoke.LambdaForm$MH/0x000002bb4b108c00 + org.junitpioneer.jupiter.ClearEnvironmentVariable$ClearEnvironmentVariables%20SAHA/.m2/repository/org/junit-pioneer/junit-pioneer/2.3.0/junit-pioneer-2.3.0.jar + org.junitpioneer.jupiter.EnvironmentVariableExtension$$Lambda$540/0x000002bb4b101968 + org.junitpioneer.internal.PioneerUtils$$Lambda$541/0x000002bb4b101ba0 + org.junitpioneer.internal.PioneerUtils$$Lambda$542/0x000002bb4b101db8 + org.junitpioneer.internal.PioneerUtils$$Lambda$543/0x000002bb4b101fe0 + org.junit.platform.commons.util.AnnotationUtils$$Lambda$544/0x000002bb4b102220 + org.junitpioneer.jupiter.EnvironmentVariableExtension$$Lambda$545/0x000002bb4b102460 + org.junitpioneer.jupiter.EnvironmentVariableExtension$$Lambda$546/0x000002bb4b102698 + java.util.stream.Collectors$$Lambda$547/0x000002bb4b0e6870 + java.util.stream.Collectors$$Lambda$548/0x000002bb4b0e6a88 + java.util.stream.Collectors$$Lambda$549/0x000002bb4b0e6cb8 + org.junitpioneer.jupiter.AbstractEntryBasedExtension$$Lambda$550/0x000002bb4b1028d0 + org.junitpioneer.jupiter.AbstractEntryBasedExtension$$Lambda$551/0x000002bb4b102b20 + java.time.temporal.TemporalAccessor + java.time.temporal.Temporal + java.time.temporal.TemporalAdjuster + java.time.chrono.ChronoLocalDateTime + java.time.LocalDateTime + java.time.chrono.ChronoLocalDate + java.time.LocalDate + java.time.temporal.TemporalField + java.time.temporal.ChronoField + java.time.temporal.ValueRange + java.time.LocalTime + java.time.InstantSource + java.time.Clock + java.time.Clock$SystemClock + java.time.ZoneId + java.time.ZoneOffset + java.time.ZoneRegion + java.time.zone.ZoneRulesProvider + java.time.zone.ZoneRulesProvider$1 + java.time.zone.TzdbZoneRulesProvider + java.time.zone.Ser + java.time.zone.ZoneRules + java.time.zone.ZoneOffsetTransitionRule + java.time.zone.ZoneOffsetTransition + java.time.Instant + org.junit.platform.engine.reporting.ReportEntry$$Lambda$552/0x000002bb4b102d58 + org.junit.platform.launcher.core.CompositeEngineExecutionListener$$Lambda$553/0x000002bb4b102f88 + org.junit.platform.launcher.core.CompositeEngineExecutionListener$$Lambda$554/0x000002bb4b1031b8 + org.junit.platform.launcher.core.CompositeTestExecutionListener$$Lambda$555/0x000002bb4b1033d8 + org.junit.platform.launcher.core.CompositeTestExecutionListener$$Lambda$556/0x000002bb4b103608 + org.apache.maven.surefire.api.report.TestOutputReportEntry%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-api/3.5.4/surefire-api-3.5.4.jar + java.lang.invoke.LambdaForm$MH/0x000002bb4b109000 + java.lang.invoke.LambdaForm$MH/0x000002bb4b109400 + java.lang.invoke.LambdaForm$MH/0x000002bb4b109800 + java.lang.invoke.LambdaForm$MH/0x000002bb4b109c00 + java.lang.invoke.LambdaForm$MH/0x000002bb4b10a000 + java.lang.invoke.BoundMethodHandle$Species_LLLLL + java.lang.invoke.LambdaForm$MH/0x000002bb4b10a400 + java.lang.invoke.BoundMethodHandle$Species_LLLLLL + java.lang.invoke.LambdaForm$MH/0x000002bb4b10a800 + java.lang.invoke.BoundMethodHandle$Species_LLLLLLL + java.lang.invoke.LambdaForm$MH/0x000002bb4b10ac00 + java.lang.invoke.MethodHandles$1 + java.lang.invoke.BoundMethodHandle$Species_LJ + java.lang.invoke.LambdaForm$MH/0x000002bb4b10b000 + java.lang.invoke.BoundMethodHandle$Species_LLLLLLLL + java.lang.invoke.LambdaForm$MH/0x000002bb4b10b400 + java.lang.invoke.BoundMethodHandle$Species_LLLLLLLLL + java.lang.invoke.LambdaFormEditor$1 + java.util.TreeMap$EntrySet + java.util.TreeMap$EntryIterator + java.lang.invoke.LambdaForm$MH/0x000002bb4b10b800 + org.junitpioneer.jupiter.AbstractEntryBasedExtension$EntriesBackup%20SAHA/.m2/repository/org/junit-pioneer/junit-pioneer/2.3.0/junit-pioneer-2.3.0.jar + org.junitpioneer.jupiter.AbstractEntryBasedExtension$EntriesBackup$$Lambda$557/0x000002bb4b103c68 + java.lang.ProcessEnvironment + java.lang.ProcessEnvironment$NameComparator + java.lang.ProcessEnvironment$EntryComparator + java.lang.ProcessEnvironment$CheckedEntrySet + java.lang.ProcessEnvironment$CheckedEntrySet$1 + java.lang.ProcessEnvironment$CheckedEntry + org.junit.jupiter.engine.execution.NamespaceAwareStore$$Lambda$558/0x000002bb4b10c000 + org.junit.platform.engine.support.store.NamespacedHierarchicalStore$$Lambda$559/0x000002bb4b10c220 + org.junitpioneer.jupiter.AbstractEntryBasedExtension$$Lambda$560/0x000002bb4b10c440 + java.lang.invoke.LambdaForm$DMH/0x000002bb4b10bc00 + org.junitpioneer.jupiter.AbstractEntryBasedExtension$$Lambda$561/0x000002bb4b10c670 + org.junitpioneer.jupiter.EnvironmentVariableUtils%20SAHA/.m2/repository/org/junit-pioneer/junit-pioneer/2.3.0/junit-pioneer-2.3.0.jar + java.lang.reflect.InaccessibleObjectException + org.junitpioneer.jupiter.EnvironmentVariableUtils$$Lambda$562/0x000002bb4b10caa0 + jdk.internal.reflect.UnsafeQualifiedStaticObjectFieldAccessorImpl + org.junit.jupiter.engine.descriptor.ClassExtensionContext$$Lambda$563/0x000002bb4b10ccd0 + org.junit.jupiter.engine.descriptor.MethodExtensionContext%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor$$Lambda$564/0x000002bb4b10d3f0 + org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor$$Lambda$565/0x000002bb4b10d610 + org.junit.jupiter.engine.execution.ExtensionContextSupplier%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.jupiter.engine.config.CachingJupiterConfiguration$$Lambda$566/0x000002bb4b10da28 + org.junit.jupiter.engine.execution.ExtensionContextSupplier$ScopeBasedExtensionContextSupplier%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor$$Lambda$567/0x000002bb4b10e080 + org.junit.jupiter.engine.descriptor.DefaultTestInstanceFactoryContext%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.jupiter.api.extension.TestInstancePreConstructCallback%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.14.0/junit-jupiter-api-5.14.0.jar + org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor$$Lambda$568/0x000002bb4b10e6e8 + java.lang.invoke.LambdaForm$DMH/0x000002bb4b110000 + org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor$$Lambda$569/0x000002bb4b10e918 + org.junit.jupiter.engine.execution.ParameterResolutionUtils%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.jupiter.api.extension.ParameterContext%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.14.0/junit-jupiter-api-5.14.0.jar + org.junit.jupiter.api.extension.ParameterResolutionException%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.14.0/junit-jupiter-api-5.14.0.jar + org.junit.jupiter.engine.execution.ConstructorInvocation%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptorCall%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.jupiter.engine.execution.InterceptingExecutableInvoker$$Lambda$570/0x000002bb4b10f608 + org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.jupiter.engine.execution.DefaultTestInstances%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor$$Lambda$571/0x000002bb4b114000 + org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor$$Lambda$572/0x000002bb4b114240 + org.junit.jupiter.api.extension.TestInstancePostProcessor%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.14.0/junit-jupiter-api-5.14.0.jar + org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor$$Lambda$573/0x000002bb4b114658 + org.apache.maven.surefire.junitplatform.RunListenerAdapter$$Lambda$574/0x000002bb4b114888 + org.apache.maven.surefire.junitplatform.RunListenerAdapter$$Lambda$575/0x000002bb4b114ad8 + org.junit.platform.launcher.TestIdentifier$$Lambda$576/0x000002bb4b114d18 + org.apache.maven.surefire.junitplatform.RunListenerAdapter$$Lambda$577/0x000002bb4b114f50 + org.apache.maven.surefire.junitplatform.RunListenerAdapter$$Lambda$578/0x000002bb4b115190 + org.apache.maven.surefire.junitplatform.RunListenerAdapter$$Lambda$579/0x000002bb4b1153d0 + org.apache.maven.surefire.junitplatform.RunListenerAdapter$$Lambda$580/0x000002bb4b1155e8 + org.apache.maven.surefire.junitplatform.RunListenerAdapter$$Lambda$581/0x000002bb4b115830 + org.apache.maven.surefire.junitplatform.RunListenerAdapter$$Lambda$582/0x000002bb4b115a70 + org.apache.maven.surefire.junitplatform.RunListenerAdapter$$Lambda$583/0x000002bb4b115cb0 + org.apache.maven.surefire.junitplatform.RunListenerAdapter$$Lambda$584/0x000002bb4b115ee8 + org.apache.maven.surefire.junitplatform.RunListenerAdapter$$Lambda$585/0x000002bb4b116130 + org.apache.maven.surefire.junitplatform.RunListenerAdapter$$Lambda$586/0x000002bb4b116368 + org.apache.maven.surefire.junitplatform.RunListenerAdapter$$Lambda$587/0x000002bb4b1165b8 + org.apache.maven.surefire.junitplatform.RunListenerAdapter$$Lambda$588/0x000002bb4b116800 + org.apache.maven.surefire.junitplatform.RunListenerAdapter$$Lambda$589/0x000002bb4b116a38 + org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor$$Lambda$590/0x000002bb4b116c80 + org.junit.jupiter.api.extension.ExtensionContext$Store$CloseableResource%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.14.0/junit-jupiter-api-5.14.0.jar + org.junit.jupiter.engine.extension.TempDirectory$FailureTracker%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.jupiter.engine.extension.TempDirectory$$Lambda$591/0x000002bb4b1172d0 + org.junit.jupiter.engine.extension.TempDirectory$$Lambda$592/0x000002bb4b117500 + org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor$$Lambda$593/0x000002bb4b117748 + org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor$$Lambda$594/0x000002bb4b117968 + org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor$$Lambda$595/0x000002bb4b117b80 + org.junit.jupiter.engine.execution.ParameterResolutionUtils$$Lambda$596/0x000002bb4b117da0 + org.junit.jupiter.engine.execution.MethodInvocation%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.jupiter.engine.execution.InterceptingExecutableInvoker$$Lambda$597/0x000002bb4b112290 + org.junit.jupiter.engine.extension.TimeoutExtension$TimeoutProvider%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.jupiter.engine.extension.TimeoutConfiguration%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + org.junit.jupiter.engine.extension.TimeoutExtension$$Lambda$598/0x000002bb4b1128f0 + org.junit.jupiter.engine.extension.TimeoutExtension$$Lambda$599/0x000002bb4b112b40 + org.junit.jupiter.engine.extension.TimeoutDurationParser%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.14.0/junit-jupiter-engine-5.14.0.jar + java.time.DateTimeException + java.time.format.DateTimeParseException + java.util.regex.Pattern$$Lambda$600/0x000002bb4b0eac48 + java.util.regex.Pattern$$Lambda$601/0x000002bb4b0eaea0 + org.junit.jupiter.engine.extension.TimeoutConfiguration$$Lambda$602/0x000002bb4b112f88 + org.junit.jupiter.engine.extension.TimeoutConfiguration$$Lambda$603/0x000002bb4b1131a8 + org.junit.jupiter.engine.extension.TimeoutConfiguration$$Lambda$604/0x000002bb4b1133e8 + org.junit.jupiter.engine.extension.TimeoutConfiguration$$Lambda$605/0x000002bb4b113628 + software.amazon.lambda.powertools.common.internal.LambdaHandlerProcessor%20SAHA/.m2/repository/software/amazon/lambda/powertools-common/2.8.0/powertools-common-2.8.0.jar + org.apache.commons.lang3.reflect.FieldUtils%20SAHA/.m2/repository/org/apache/commons/commons-lang3/3.20.0/commons-lang3-3.20.0.jar + org.apache.commons.lang3.StringUtils%20SAHA/.m2/repository/org/apache/commons/commons-lang3/3.20.0/commons-lang3-3.20.0.jar + org.apache.commons.lang3.Validate%20SAHA/.m2/repository/org/apache/commons/commons-lang3/3.20.0/commons-lang3-3.20.0.jar + org.apache.commons.lang3.reflect.MemberUtils%20SAHA/.m2/repository/org/apache/commons/commons-lang3/3.20.0/commons-lang3-3.20.0.jar + org.apache.commons.lang3.Validate$$Lambda$606/0x000002bb4b111400 + org.apache.commons.lang3.reflect.AccessibleObjects%20SAHA/.m2/repository/org/apache/commons/commons-lang3/3.20.0/commons-lang3-3.20.0.jar + software.amazon.lambda.powertools.common.internal.SystemWrapper%20SAHA/.m2/repository/software/amazon/lambda/powertools-common/2.8.0/powertools-common-2.8.0.jar + jdk.internal.reflect.UnsafeStaticObjectFieldAccessorImpl + software.amazon.lambda.powertools.common.stubs.TestLambdaContext%20SAHA/.m2/repository/software/amazon/lambda/powertools-common/2.8.0/powertools-common-2.8.0-tests.jar + software.amazon.lambda.powertools.tracing.handlers.PowerTracerToolEnabled + org.aspectj.runtime.internal.AroundClosure%20SAHA/.m2/repository/org/aspectj/aspectjrt/1.9.7/aspectjrt-1.9.7.jar + software.amazon.lambda.powertools.tracing.handlers.PowerTracerToolEnabled$AjcClosure1 + org.aspectj.lang.Signature%20SAHA/.m2/repository/org/aspectj/aspectjrt/1.9.7/aspectjrt-1.9.7.jar + org.aspectj.runtime.reflect.Factory%20SAHA/.m2/repository/org/aspectj/aspectjrt/1.9.7/aspectjrt-1.9.7.jar + org.aspectj.lang.JoinPoint%20SAHA/.m2/repository/org/aspectj/aspectjrt/1.9.7/aspectjrt-1.9.7.jar + org.aspectj.lang.reflect.MemberSignature%20SAHA/.m2/repository/org/aspectj/aspectjrt/1.9.7/aspectjrt-1.9.7.jar + org.aspectj.lang.reflect.CodeSignature%20SAHA/.m2/repository/org/aspectj/aspectjrt/1.9.7/aspectjrt-1.9.7.jar + org.aspectj.lang.reflect.MethodSignature%20SAHA/.m2/repository/org/aspectj/aspectjrt/1.9.7/aspectjrt-1.9.7.jar + org.aspectj.lang.JoinPoint$StaticPart%20SAHA/.m2/repository/org/aspectj/aspectjrt/1.9.7/aspectjrt-1.9.7.jar + org.aspectj.lang.JoinPoint$EnclosingStaticPart%20SAHA/.m2/repository/org/aspectj/aspectjrt/1.9.7/aspectjrt-1.9.7.jar + org.aspectj.lang.reflect.ConstructorSignature%20SAHA/.m2/repository/org/aspectj/aspectjrt/1.9.7/aspectjrt-1.9.7.jar + org.aspectj.lang.reflect.CatchClauseSignature%20SAHA/.m2/repository/org/aspectj/aspectjrt/1.9.7/aspectjrt-1.9.7.jar + org.aspectj.lang.reflect.LockSignature%20SAHA/.m2/repository/org/aspectj/aspectjrt/1.9.7/aspectjrt-1.9.7.jar + org.aspectj.lang.reflect.UnlockSignature%20SAHA/.m2/repository/org/aspectj/aspectjrt/1.9.7/aspectjrt-1.9.7.jar + org.aspectj.lang.reflect.InitializerSignature%20SAHA/.m2/repository/org/aspectj/aspectjrt/1.9.7/aspectjrt-1.9.7.jar + org.aspectj.lang.reflect.FieldSignature%20SAHA/.m2/repository/org/aspectj/aspectjrt/1.9.7/aspectjrt-1.9.7.jar + org.aspectj.lang.reflect.AdviceSignature%20SAHA/.m2/repository/org/aspectj/aspectjrt/1.9.7/aspectjrt-1.9.7.jar + org.aspectj.lang.reflect.SourceLocation%20SAHA/.m2/repository/org/aspectj/aspectjrt/1.9.7/aspectjrt-1.9.7.jar + org.aspectj.runtime.reflect.SignatureImpl%20SAHA/.m2/repository/org/aspectj/aspectjrt/1.9.7/aspectjrt-1.9.7.jar + org.aspectj.runtime.reflect.MemberSignatureImpl%20SAHA/.m2/repository/org/aspectj/aspectjrt/1.9.7/aspectjrt-1.9.7.jar + org.aspectj.runtime.reflect.CodeSignatureImpl%20SAHA/.m2/repository/org/aspectj/aspectjrt/1.9.7/aspectjrt-1.9.7.jar + org.aspectj.runtime.reflect.MethodSignatureImpl%20SAHA/.m2/repository/org/aspectj/aspectjrt/1.9.7/aspectjrt-1.9.7.jar + org.aspectj.runtime.reflect.SignatureImpl$Cache%20SAHA/.m2/repository/org/aspectj/aspectjrt/1.9.7/aspectjrt-1.9.7.jar + org.aspectj.runtime.reflect.JoinPointImpl$StaticPartImpl%20SAHA/.m2/repository/org/aspectj/aspectjrt/1.9.7/aspectjrt-1.9.7.jar + org.aspectj.runtime.reflect.SourceLocationImpl%20SAHA/.m2/repository/org/aspectj/aspectjrt/1.9.7/aspectjrt-1.9.7.jar + software.amazon.lambda.powertools.tracing.handlers.PowerTracerToolEnabledForStream + software.amazon.lambda.powertools.tracing.handlers.PowerTracerToolEnabledForStream$AjcClosure1 + software.amazon.lambda.powertools.tracing.nonhandler.PowerToolNonHandler$AjcClosure1 + software.amazon.lambda.powertools.tracing.nonhandler.PowerToolNonHandler$AjcClosure3 + com.amazonaws.xray.AWSXRay%20SAHA/.m2/repository/com/amazonaws/aws-xray-recorder-sdk-core/2.20.0/aws-xray-recorder-sdk-core-2.20.0.jar + com.amazonaws.xray.AWSXRayRecorderBuilder%20SAHA/.m2/repository/com/amazonaws/aws-xray-recorder-sdk-core/2.20.0/aws-xray-recorder-sdk-core-2.20.0.jar + org.apache.commons.logging.LogFactory%20SAHA/.m2/repository/commons-logging/commons-logging/1.3.5/commons-logging-1.3.5.jar + java.util.ServiceConfigurationError + org.apache.commons.logging.LogConfigurationException%20SAHA/.m2/repository/commons-logging/commons-logging/1.3.5/commons-logging-1.3.5.jar + org.apache.commons.logging.LogFactory$$Lambda$607/0x000002bb4b11bed0 + org.apache.commons.logging.impl.WeakHashtable%20SAHA/.m2/repository/commons-logging/commons-logging/1.3.5/commons-logging-1.3.5.jar + org.apache.commons.logging.LogFactory$$Lambda$608/0x000002bb4b11c4c0 + org.apache.commons.logging.impl.WeakHashtable$Referenced%20SAHA/.m2/repository/commons-logging/commons-logging/1.3.5/commons-logging-1.3.5.jar + org.apache.commons.logging.impl.WeakHashtable$WeakKey%20SAHA/.m2/repository/commons-logging/commons-logging/1.3.5/commons-logging-1.3.5.jar + org.apache.commons.logging.LogFactory$$Lambda$609/0x000002bb4b11cb28 + org.apache.commons.logging.LogFactory$$Lambda$610/0x000002bb4b11cd48 + org.apache.commons.logging.LogFactory$$Lambda$611/0x000002bb4b11cf60 + org.apache.commons.logging.LogFactory$$Lambda$612/0x000002bb4b11d178 + org.apache.commons.logging.LogFactory$$Lambda$613/0x000002bb4b11d398 + org.apache.commons.logging.impl.Log4jApiLogFactory%20SAHA/.m2/repository/commons-logging/commons-logging/1.3.5/commons-logging-1.3.5.jar + org.apache.commons.logging.LogFactory$$Lambda$614/0x000002bb4b11d7f8 + org.apache.commons.logging.impl.Slf4jLogFactory%20SAHA/.m2/repository/commons-logging/commons-logging/1.3.5/commons-logging-1.3.5.jar + org.apache.commons.logging.Log%20SAHA/.m2/repository/commons-logging/commons-logging/1.3.5/commons-logging-1.3.5.jar + org.slf4j.MarkerFactory%20SAHA/.m2/repository/org/slf4j/slf4j-api/2.0.17/slf4j-api-2.0.17.jar + org.slf4j.IMarkerFactory%20SAHA/.m2/repository/org/slf4j/slf4j-api/2.0.17/slf4j-api-2.0.17.jar + org.slf4j.LoggerFactory%20SAHA/.m2/repository/org/slf4j/slf4j-api/2.0.17/slf4j-api-2.0.17.jar + org.slf4j.spi.SLF4JServiceProvider%20SAHA/.m2/repository/org/slf4j/slf4j-api/2.0.17/slf4j-api-2.0.17.jar + org.slf4j.event.LoggingEvent%20SAHA/.m2/repository/org/slf4j/slf4j-api/2.0.17/slf4j-api-2.0.17.jar + org.slf4j.helpers.SubstituteServiceProvider%20SAHA/.m2/repository/org/slf4j/slf4j-api/2.0.17/slf4j-api-2.0.17.jar + org.slf4j.spi.MDCAdapter%20SAHA/.m2/repository/org/slf4j/slf4j-api/2.0.17/slf4j-api-2.0.17.jar + org.slf4j.ILoggerFactory%20SAHA/.m2/repository/org/slf4j/slf4j-api/2.0.17/slf4j-api-2.0.17.jar + org.slf4j.helpers.SubstituteLoggerFactory%20SAHA/.m2/repository/org/slf4j/slf4j-api/2.0.17/slf4j-api-2.0.17.jar + org.slf4j.Logger%20SAHA/.m2/repository/org/slf4j/slf4j-api/2.0.17/slf4j-api-2.0.17.jar + java.util.concurrent.LinkedBlockingQueue + java.util.concurrent.LinkedBlockingQueue$Node + org.slf4j.helpers.BasicMarkerFactory%20SAHA/.m2/repository/org/slf4j/slf4j-api/2.0.17/slf4j-api-2.0.17.jar + org.slf4j.Marker%20SAHA/.m2/repository/org/slf4j/slf4j-api/2.0.17/slf4j-api-2.0.17.jar + org.slf4j.helpers.BasicMDCAdapter%20SAHA/.m2/repository/org/slf4j/slf4j-api/2.0.17/slf4j-api-2.0.17.jar + java.lang.InheritableThreadLocal + org.slf4j.helpers.BasicMDCAdapter$1%20SAHA/.m2/repository/org/slf4j/slf4j-api/2.0.17/slf4j-api-2.0.17.jar + org.slf4j.helpers.ThreadLocalMapOfStacks%20SAHA/.m2/repository/org/slf4j/slf4j-api/2.0.17/slf4j-api-2.0.17.jar + org.slf4j.helpers.NOP_FallbackServiceProvider%20SAHA/.m2/repository/org/slf4j/slf4j-api/2.0.17/slf4j-api-2.0.17.jar + org.slf4j.helpers.NOPLoggerFactory%20SAHA/.m2/repository/org/slf4j/slf4j-api/2.0.17/slf4j-api-2.0.17.jar + org.slf4j.helpers.NOPMDCAdapter%20SAHA/.m2/repository/org/slf4j/slf4j-api/2.0.17/slf4j-api-2.0.17.jar + org.slf4j.helpers.Util%20SAHA/.m2/repository/org/slf4j/slf4j-api/2.0.17/slf4j-api-2.0.17.jar + org.slf4j.simple.SimpleServiceProvider%20SAHA/.m2/repository/org/slf4j/slf4j-simple/2.0.17/slf4j-simple-2.0.17.jar + org.slf4j.MDC%20SAHA/.m2/repository/org/slf4j/slf4j-api/2.0.17/slf4j-api-2.0.17.jar + org.slf4j.simple.SimpleLoggerFactory%20SAHA/.m2/repository/org/slf4j/slf4j-simple/2.0.17/slf4j-simple-2.0.17.jar + org.slf4j.helpers.AbstractLogger%20SAHA/.m2/repository/org/slf4j/slf4j-api/2.0.17/slf4j-api-2.0.17.jar + org.slf4j.helpers.LegacyAbstractLogger%20SAHA/.m2/repository/org/slf4j/slf4j-api/2.0.17/slf4j-api-2.0.17.jar + org.slf4j.simple.SimpleLogger%20SAHA/.m2/repository/org/slf4j/slf4j-simple/2.0.17/slf4j-simple-2.0.17.jar + org.slf4j.spi.LoggingEventBuilder%20SAHA/.m2/repository/org/slf4j/slf4j-api/2.0.17/slf4j-api-2.0.17.jar + org.slf4j.simple.SimpleLoggerConfiguration%20SAHA/.m2/repository/org/slf4j/slf4j-simple/2.0.17/slf4j-simple-2.0.17.jar + org.slf4j.simple.SimpleLoggerConfiguration$$Lambda$615/0x000002bb4b1227b8 + org.slf4j.simple.OutputChoice%20SAHA/.m2/repository/org/slf4j/slf4j-simple/2.0.17/slf4j-simple-2.0.17.jar + org.slf4j.simple.OutputChoice$OutputChoiceType%20SAHA/.m2/repository/org/slf4j/slf4j-simple/2.0.17/slf4j-simple-2.0.17.jar + org.slf4j.helpers.Reporter%20SAHA/.m2/repository/org/slf4j/slf4j-api/2.0.17/slf4j-api-2.0.17.jar + org.slf4j.helpers.Reporter$TargetChoice%20SAHA/.m2/repository/org/slf4j/slf4j-api/2.0.17/slf4j-api-2.0.17.jar + org.slf4j.helpers.Reporter$Level%20SAHA/.m2/repository/org/slf4j/slf4j-api/2.0.17/slf4j-api-2.0.17.jar + org.slf4j.helpers.BasicMarker%20SAHA/.m2/repository/org/slf4j/slf4j-api/2.0.17/slf4j-api-2.0.17.jar + org.apache.commons.logging.LogFactory$$Lambda$616/0x000002bb4b123d18 + org.apache.commons.logging.impl.Slf4jLogFactory$$Lambda$617/0x000002bb4b123f30 + org.slf4j.simple.SimpleLoggerFactory$$Lambda$618/0x000002bb4b124168 + org.slf4j.spi.LocationAwareLogger%20SAHA/.m2/repository/org/slf4j/slf4j-api/2.0.17/slf4j-api-2.0.17.jar + org.apache.commons.logging.impl.Slf4jLogFactory$Slf4jLog%20SAHA/.m2/repository/commons-logging/commons-logging/1.3.5/commons-logging-1.3.5.jar + com.amazonaws.xray.AWSXRayRecorder%20SAHA/.m2/repository/com/amazonaws/aws-xray-recorder-sdk-core/2.20.0/aws-xray-recorder-sdk-core-2.20.0.jar + com.amazonaws.xray.strategy.sampling.SamplingStrategy%20SAHA/.m2/repository/com/amazonaws/aws-xray-recorder-sdk-core/2.20.0/aws-xray-recorder-sdk-core-2.20.0.jar + com.amazonaws.xray.strategy.StreamingStrategy%20SAHA/.m2/repository/com/amazonaws/aws-xray-recorder-sdk-core/2.20.0/aws-xray-recorder-sdk-core-2.20.0.jar + com.amazonaws.xray.strategy.PrioritizationStrategy%20SAHA/.m2/repository/com/amazonaws/aws-xray-recorder-sdk-core/2.20.0/aws-xray-recorder-sdk-core-2.20.0.jar + com.amazonaws.xray.strategy.ThrowableSerializationStrategy%20SAHA/.m2/repository/com/amazonaws/aws-xray-recorder-sdk-core/2.20.0/aws-xray-recorder-sdk-core-2.20.0.jar + com.amazonaws.xray.strategy.ContextMissingStrategy%20SAHA/.m2/repository/com/amazonaws/aws-xray-recorder-sdk-core/2.20.0/aws-xray-recorder-sdk-core-2.20.0.jar + com.amazonaws.xray.internal.IdGenerator%20SAHA/.m2/repository/com/amazonaws/aws-xray-recorder-sdk-core/2.20.0/aws-xray-recorder-sdk-core-2.20.0.jar + com.amazonaws.xray.internal.SecureIdGenerator%20SAHA/.m2/repository/com/amazonaws/aws-xray-recorder-sdk-core/2.20.0/aws-xray-recorder-sdk-core-2.20.0.jar + com.amazonaws.xray.contexts.SegmentContextResolver%20SAHA/.m2/repository/com/amazonaws/aws-xray-recorder-sdk-core/2.20.0/aws-xray-recorder-sdk-core-2.20.0.jar + com.amazonaws.xray.entities.Segment%20SAHA/.m2/repository/com/amazonaws/aws-xray-recorder-sdk-core/2.20.0/aws-xray-recorder-sdk-core-2.20.0.jar + com.amazonaws.xray.internal.FastIdGenerator%20SAHA/.m2/repository/com/amazonaws/aws-xray-recorder-sdk-core/2.20.0/aws-xray-recorder-sdk-core-2.20.0.jar + com.amazonaws.xray.strategy.sampling.CentralizedSamplingStrategy%20SAHA/.m2/repository/com/amazonaws/aws-xray-recorder-sdk-core/2.20.0/aws-xray-recorder-sdk-core-2.20.0.jar + com.amazonaws.xray.strategy.sampling.DefaultSamplingStrategy%20SAHA/.m2/repository/com/amazonaws/aws-xray-recorder-sdk-core/2.20.0/aws-xray-recorder-sdk-core-2.20.0.jar + com.amazonaws.xray.strategy.sampling.pollers.TargetPoller%20SAHA/.m2/repository/com/amazonaws/aws-xray-recorder-sdk-core/2.20.0/aws-xray-recorder-sdk-core-2.20.0.jar + java.security.SecureRandom + sun.security.jca.Providers + sun.security.jca.ProviderList + sun.security.jca.ProviderConfig + java.security.Provider + sun.security.jca.ProviderList$3 + sun.security.jca.ProviderList$1 + java.security.Provider$ServiceKey + java.security.Provider$EngineDescription + sun.security.jca.ProviderList$2 + sun.security.provider.Sun + sun.security.util.SecurityConstants + java.net.NetPermission + java.security.SecurityPermission + java.net.SocketPermission + sun.security.provider.SunEntries + sun.security.provider.SunEntries$1 + sun.security.provider.NativePRNG + sun.security.provider.NativePRNG$Blocking + sun.security.provider.NativePRNG$NonBlocking + java.security.Provider$Service + java.security.Provider$UString + sun.security.util.SecurityProviderConstants + sun.security.util.KnownOIDs + sun.security.util.KnownOIDs$1 + sun.security.util.KnownOIDs$2 + sun.security.util.KnownOIDs$3 + sun.security.util.KnownOIDs$4 + sun.security.util.KnownOIDs$5 + sun.security.util.KnownOIDs$6 + sun.security.util.KnownOIDs$7 + sun.security.util.KnownOIDs$8 + sun.security.util.KnownOIDs$9 + sun.security.util.KnownOIDs$10 + jdk.internal.event.Event + jdk.internal.event.SecurityProviderServiceEvent + java.security.SecureRandomParameters + java.security.SecureRandomSpi + sun.security.provider.DRBG + sun.security.provider.DRBG$$Lambda$619/0x000002bb4b0f3510 + java.security.DrbgParameters$Capability + sun.security.provider.MoreDrbgParameters + java.security.DrbgParameters + java.security.DrbgParameters$Instantiation + sun.security.provider.AbstractDrbg + sun.security.provider.AbstractHashDrbg + sun.security.provider.HashDrbg + sun.security.provider.EntropySource + java.lang.invoke.LambdaForm$DMH/0x000002bb4b128000 + java.lang.invoke.LambdaForm$DMH/0x000002bb4b128400 + sun.security.provider.AbstractDrbg$$Lambda$620/0x000002bb4b0f4a20 + java.security.DrbgParameters$NextBytes + sun.security.provider.AbstractDrbg$SeederHolder + sun.security.provider.SeedGenerator + sun.security.provider.NativeSeedGenerator + java.security.MessageDigestSpi + java.security.MessageDigest + sun.security.jca.GetInstance + sun.security.provider.DigestBase + sun.security.provider.SHA + sun.security.jca.GetInstance$Instance + sun.security.util.MessageDigestSpi2 + java.security.MessageDigest$Delegate + java.security.MessageDigest$Delegate$CloneableDelegate + sun.security.provider.SeedGenerator$1 + sun.security.provider.ByteArrayAccess + sun.security.provider.ByteArrayAccess$BE + java.lang.invoke.VarHandleByteArrayAsInts$ByteArrayViewVarHandle + java.lang.invoke.VarHandleByteArrayAsInts$ArrayHandle + java.lang.ArrayIndexOutOfBoundsException + java.lang.invoke.VarHandleByteArrayBase + java.lang.invoke.VarHandleByteArrayAsInts + java.lang.invoke.VarHandleByteArrayAsInts$ArrayHandle$$Lambda$621/0x000002bb4b0f7ab0 + java.lang.invoke.VarHandleByteArrayAsLongs$ByteArrayViewVarHandle + java.lang.invoke.VarHandleByteArrayAsLongs$ArrayHandle + java.lang.invoke.VarHandleByteArrayAsLongs + java.lang.invoke.VarHandleByteArrayAsLongs$ArrayHandle$$Lambda$622/0x000002bb4b0f83f8 + java.lang.invoke.VarHandle$TypesAndInvokers + java.lang.invoke.VarHandle$2 + java.lang.invoke.VarHandle$VarHandleDesc$Kind + java.lang.constant.ConstantDescs + java.lang.constant.ClassDesc + java.lang.constant.ConstantUtils + java.lang.constant.ReferenceClassDescImpl + java.lang.constant.DirectMethodHandleDesc$Kind + java.lang.constant.MethodTypeDesc + java.lang.constant.MethodTypeDescImpl + java.lang.constant.MethodHandleDesc + java.lang.constant.MethodHandleDesc$1 + java.lang.constant.DirectMethodHandleDesc + java.lang.constant.DirectMethodHandleDescImpl + java.lang.constant.DirectMethodHandleDescImpl$1 + java.lang.constant.DirectMethodHandleDesc$1 + java.lang.constant.DynamicConstantDesc + java.lang.constant.PrimitiveClassDescImpl + java.lang.constant.DynamicConstantDesc$AnonymousDynamicConstantDesc + java.net.NetworkInterface + java.net.InterfaceAddress + java.net.InetAddress + jdk.internal.access.JavaNetInetAddressAccess + java.net.InetAddress$1 + java.net.InetAddress$InetAddressHolder + java.util.concurrent.ConcurrentSkipListSet + java.util.concurrent.ConcurrentNavigableMap + java.util.concurrent.ConcurrentSkipListMap + java.util.concurrent.ConcurrentSkipListMap$Index + java.util.concurrent.atomic.Striped64 + java.util.concurrent.atomic.LongAdder + java.util.concurrent.ConcurrentSkipListMap$Node + java.net.InetAddressImplFactory + java.net.InetAddressImpl + java.net.Inet6AddressImpl + java.net.InetAddress$NameService + java.net.InetAddress$PlatformNameService + java.net.Inet4Address + java.net.Inet6Address + java.net.Inet6Address$Inet6AddressHolder + java.net.DefaultInterface + java.net.NetworkInterface$1 + java.nio.file.DirectoryStream$Filter + java.nio.file.Files$AcceptAllFilter + java.nio.file.DirectoryStream + sun.nio.fs.WindowsDirectoryStream + sun.nio.fs.WindowsDirectoryStream$WindowsDirectoryIterator + sun.nio.fs.BasicFileAttributesHolder + sun.nio.fs.WindowsPath$WindowsPathWithAttributes + java.lang.invoke.LambdaForm$DMH/0x000002bb4b128800 + java.lang.invoke.LambdaForm$DMH/0x000002bb4b128c00 + sun.security.provider.AbstractDrbg$SeederHolder$$Lambda$623/0x000002bb4b0fd218 + sun.security.provider.AbstractDrbg$NonceProvider + sun.security.provider.SHA2 + sun.security.provider.SHA2$SHA256 + com.amazonaws.xray.utils.ByteUtils%20SAHA/.m2/repository/com/amazonaws/aws-xray-recorder-sdk-core/2.20.0/aws-xray-recorder-sdk-core-2.20.0.jar + com.amazonaws.xray.strategy.sampling.LocalizedSamplingStrategy%20SAHA/.m2/repository/com/amazonaws/aws-xray-recorder-sdk-core/2.20.0/aws-xray-recorder-sdk-core-2.20.0.jar + com.fasterxml.jackson.core.Versioned%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.core.TreeCodec%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.core.ObjectCodec%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.databind.ObjectMapper%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.core.TokenStreamFactory%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.core.JsonFactory%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.databind.MappingJsonFactory%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.jsontype.SubtypeResolver%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.jsontype.impl.StdSubtypeResolver%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.DatabindContext%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.SerializerProvider%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.DefaultSerializerProvider%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.DefaultSerializerProvider$Impl%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.DeserializerFactory%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.BasicDeserializerFactory%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.BeanDeserializerFactory%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.DeserializationContext%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.DefaultDeserializationContext%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.DefaultDeserializationContext$Impl%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.SerializerFactory%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.BasicSerializerFactory%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.BeanSerializerFactory%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.AnnotationIntrospector%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.introspect.JacksonAnnotationIntrospector%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.introspect.AccessorNamingStrategy$Provider%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.introspect.DefaultAccessorNamingStrategy$Provider%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.jsontype.PolymorphicTypeValidator%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.jsontype.PolymorphicTypeValidator$Base%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypeValidator%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.util.StdDateFormat%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.core.JacksonException%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.core.JsonProcessingException%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.databind.DatabindException%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.JsonMappingException%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.jsontype.TypeResolverBuilder%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.introspect.VisibilityChecker%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.introspect.ClassIntrospector%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.introspect.BasicClassIntrospector%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.Module$SetupContext%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.core.TreeNode%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.databind.JsonSerializable%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.JsonSerializable$Base%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.JsonNode%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.node.BaseJsonNode%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.node.ValueNode%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.node.NullNode%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.core.JsonGenerator%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.databind.util.TokenBuffer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.core.JsonParser%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.core.base.ParserMinimalBase%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.databind.node.TreeTraversingParser%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.core.util.BufferRecycler$Gettable%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.core.io.SegmentedStringWriter%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.core.util.ByteArrayBuilder%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.core.type.ResolvedType%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.databind.JavaType%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.type.TypeBase%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.type.ArrayType%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.type.CollectionLikeType%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.type.CollectionType%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.type.MapLikeType%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.type.MapType%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.exc.MismatchedInputException%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.introspect.AnnotationIntrospectorPair%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.introspect.NopAnnotationIntrospector%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.introspect.Annotated%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.introspect.TypeResolutionContext%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.introspect.AnnotatedClass%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.introspect.AnnotatedMember%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.introspect.AnnotatedWithParams%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.introspect.AnnotatedMethod%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.introspect.VirtualAnnotatedMember%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.util.Named%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.introspect.BeanPropertyDefinition%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.util.SimpleBeanPropertyDefinition%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.BeanProperty%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.introspect.ConcreteBeanPropertyBase%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.PropertyWriter%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.BeanPropertyWriter%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.VirtualBeanPropertyWriter%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.impl.AttributePropertyWriter%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.annotation.JsonSerialize%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.annotation.JsonView%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.20/jackson-annotations-2.20.jar + com.fasterxml.jackson.annotation.JsonFormat%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.20/jackson-annotations-2.20.jar + com.fasterxml.jackson.annotation.JsonTypeInfo%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.20/jackson-annotations-2.20.jar + com.fasterxml.jackson.annotation.JsonRawValue%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.20/jackson-annotations-2.20.jar + com.fasterxml.jackson.annotation.JsonUnwrapped%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.20/jackson-annotations-2.20.jar + com.fasterxml.jackson.annotation.JsonBackReference%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.20/jackson-annotations-2.20.jar + com.fasterxml.jackson.annotation.JsonManagedReference%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.20/jackson-annotations-2.20.jar + com.fasterxml.jackson.databind.annotation.JsonDeserialize%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.annotation.JsonMerge%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.20/jackson-annotations-2.20.jar + com.fasterxml.jackson.databind.ext.Java7Support%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + java.lang.IllegalAccessError + com.fasterxml.jackson.databind.ext.Java7SupportImpl%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.util.ClassUtil%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.util.ClassUtil$Ctor%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + java.lang.reflect.AnnotatedType + java.beans.Transient + java.beans.ConstructorProperties + com.fasterxml.jackson.databind.util.LookupCache%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.util.LRUMap%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.util.internal.PrivateMaxEntriesMap$Builder%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.util.internal.PrivateMaxEntriesMap%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + java.io.ObjectStreamException + java.io.InvalidObjectException + com.fasterxml.jackson.databind.util.internal.Linked%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.util.internal.LinkedDeque%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.util.internal.PrivateMaxEntriesMap$DrainStatus%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.util.internal.PrivateMaxEntriesMap$DrainStatus$1%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.util.internal.PrivateMaxEntriesMap$DrainStatus$2%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.util.internal.PrivateMaxEntriesMap$DrainStatus$3%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + java.util.concurrent.atomic.AtomicLongArray + java.lang.invoke.VarHandleLongs$Array + java.util.concurrent.atomic.AtomicReferenceArray + java.lang.invoke.VarHandleReferences$Array + com.fasterxml.jackson.databind.cfg.BaseSettings%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.type.TypeFactory%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.type.SimpleType%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.type.ReferenceType%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.type.IdentityEqualityType%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.type.PlaceholderForType%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.type.IterationType%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.type.ResolvedRecursiveType%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.type.TypeParser%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.type.TypeBindings%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + java.text.ParseException + com.fasterxml.jackson.core.Base64Variants%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.core.Base64Variant%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.core.Base64Variant$PaddingReadBehaviour%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.databind.introspect.AccessorNamingStrategy%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.introspect.DefaultAccessorNamingStrategy%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.introspect.DefaultAccessorNamingStrategy$RecordNaming%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.cfg.CacheProvider%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.cfg.DefaultCacheProvider%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.core.io.DataOutputAsStream%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.core.SerializableString%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.core.TSFBuilder%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.core.JsonFactoryBuilder%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.core.base.ParserBase%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.core.json.JsonParserBase%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.core.json.UTF8DataInputJsonParser%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.core.json.ReaderBasedJsonParser%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.core.base.GeneratorBase%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.core.json.JsonGeneratorImpl%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.core.json.WriterBasedJsonGenerator%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.core.io.UTF8Writer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.core.async.NonBlockingInputFeeder%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.core.async.ByteBufferFeeder%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.core.json.async.NonBlockingJsonParserBase%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.core.json.async.NonBlockingUtf8JsonParserBase%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.core.json.async.NonBlockingByteBufferJsonParser%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.core.json.UTF8JsonGenerator%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.core.async.ByteArrayFeeder%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.core.json.async.NonBlockingJsonParser%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + java.io.CharArrayReader + com.fasterxml.jackson.core.util.JacksonFeature%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.core.JsonFactory$Feature%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.core.JsonParser$Feature%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.core.JsonGenerator$Feature%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.core.io.SerializedString%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.core.io.JsonStringEncoder%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.core.io.CharTypes%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.core.sym.ByteQuadsCanonicalizer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.core.exc.StreamConstraintsException%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.core.sym.ByteQuadsCanonicalizer$TableInfo%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.core.util.JsonRecyclerPools%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.core.util.RecyclerPool%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.core.util.RecyclerPool$ThreadLocalPoolBase%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.core.util.JsonRecyclerPools$ThreadLocalPool%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.core.util.RecyclerPool$WithPool%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.core.StreamReadConstraints%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.core.StreamWriteConstraints%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.core.ErrorReportConfiguration%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.core.sym.CharsToNameCanonicalizer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.core.sym.CharsToNameCanonicalizer$TableInfo%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.core.sym.CharsToNameCanonicalizer$Bucket%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.databind.util.RootNameLookup%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.introspect.ClassIntrospector$MixInResolver%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.introspect.SimpleMixInResolver%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.cfg.MapperConfig%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.cfg.MapperConfigBase%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.SerializationConfig%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.BeanDescription%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.introspect.BasicBeanDescription%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.DeserializationConfig%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.introspect.AnnotatedClassResolver%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.introspect.AnnotationCollector%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.util.Annotations%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.introspect.AnnotationCollector$EmptyCollector%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.introspect.AnnotationCollector$NoAnnotations%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.introspect.AnnotatedClass$Creators%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.introspect.AnnotatedConstructor%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.cfg.ConfigOverrides%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.annotation.JacksonAnnotationValue%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.20/jackson-annotations-2.20.jar + com.fasterxml.jackson.annotation.JsonInclude$Value%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.20/jackson-annotations-2.20.jar + com.fasterxml.jackson.annotation.JsonInclude$Include%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.20/jackson-annotations-2.20.jar + com.fasterxml.jackson.annotation.JsonSetter$Value%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.20/jackson-annotations-2.20.jar + com.fasterxml.jackson.annotation.Nulls%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.20/jackson-annotations-2.20.jar + com.fasterxml.jackson.databind.introspect.VisibilityChecker$Std%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.annotation.JsonAutoDetect$Visibility%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.20/jackson-annotations-2.20.jar + com.fasterxml.jackson.databind.cfg.CoercionConfigs%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.type.LogicalType%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.cfg.CoercionAction%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.cfg.CoercionConfig%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.cfg.MutableCoercionConfig%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.cfg.CoercionInputShape%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.jsontype.DefaultBaseTypeLimitingValidator%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.core.PrettyPrinter%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.annotation.JsonFormat$Value%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.20/jackson-annotations-2.20.jar + com.fasterxml.jackson.annotation.JsonFormat$Shape%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.20/jackson-annotations-2.20.jar + com.fasterxml.jackson.annotation.JsonFormat$Features%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.20/jackson-annotations-2.20.jar + com.fasterxml.jackson.databind.cfg.ConfigOverride%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.cfg.ConfigOverride$Empty%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.cfg.ConfigFeature%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.MapperFeature%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.core.util.Instantiatable%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.core.util.DefaultPrettyPrinter%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.core.util.DefaultPrettyPrinter$Indenter%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.core.util.Separators%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.core.util.Separators$Spacing%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.core.util.DefaultPrettyPrinter$NopIndenter%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.core.util.DefaultPrettyPrinter$FixedSpaceIndenter%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.core.util.DefaultIndenter%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.databind.SerializationFeature%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.cfg.DatatypeFeatures%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.cfg.DatatypeFeatures$DefaultHolder%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.cfg.DatatypeFeature%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.cfg.EnumFeature%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.cfg.JsonNodeFeature%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.cfg.ContextAttributes%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.cfg.ContextAttributes$Impl%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.DeserializationFeature%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.node.JsonNodeCreator%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.node.JsonNodeFactory%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.node.NumericNode%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.node.DoubleNode%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.node.FloatNode%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.node.BigIntegerNode%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.node.LongNode%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.node.IntNode%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.node.DecimalNode%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.node.ShortNode%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.node.TextNode%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.node.BooleanNode%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.node.BinaryNode%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.node.POJONode%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.node.MissingNode%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.jsonFormatVisitors.JsonFormatVisitable%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.JsonSerializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.jsonschema.SchemaAware%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.std.StdSerializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.std.NullSerializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.impl.FailingSerializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.std.ToEmptyObjectSerializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.impl.UnknownSerializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.exc.InvalidDefinitionException%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.ContextualSerializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.impl.TypeWrappedSerializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.exc.InvalidTypeIdException%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.node.ContainerNode%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.node.ObjectNode%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.ResolvableSerializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.std.StdDelegatingSerializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.SerializerCache%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.NullValueProvider%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.JsonDeserializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.impl.TypeWrappedDeserializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.exc.InvalidFormatException%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.exc.ValueInstantiationException%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.exc.PropertyBindingException%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.exc.MissingInjectableValueExcepion%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.UnresolvedForwardReference%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.ContextualDeserializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.ValueInstantiator$Gettable%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.std.StdDeserializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.std.ReferenceTypeDeserializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.std.AtomicReferenceDeserializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.std.StringArrayDeserializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.std.ContainerDeserializerBase%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.std.ObjectArrayDeserializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.AbstractDeserializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.std.StdScalarDeserializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.std.EnumDeserializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.std.EnumSetDeserializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.std.CollectionDeserializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.std.ArrayBlockingQueueDeserializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.std.StringCollectionDeserializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.ResolvableDeserializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.std.EnumMapDeserializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.std.MapDeserializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.std.UntypedObjectDeserializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.std.StringDeserializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.std.MapEntryDeserializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.std.TokenBufferDeserializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.introspect.AnnotatedParameter%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.SettableBeanProperty%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.CreatorProperty%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.annotation.ObjectIdGenerator%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.20/jackson-annotations-2.20.jar + com.fasterxml.jackson.annotation.ObjectIdGenerators$Base%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.20/jackson-annotations-2.20.jar + com.fasterxml.jackson.annotation.ObjectIdGenerators$PropertyGenerator%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.20/jackson-annotations-2.20.jar + com.fasterxml.jackson.databind.deser.impl.PropertyBasedObjectIdGenerator%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.impl.ErrorThrowingDeserializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.impl.SetterlessProperty%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.impl.MethodProperty%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.impl.FieldProperty%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.impl.UnsupportedTypeDeserializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.BeanDeserializerBase%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.BeanDeserializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.std.ThrowableDeserializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.Deserializers%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.cfg.DeserializerFactoryConfig%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.BeanDeserializerModifier%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.AbstractTypeResolver%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.ValueInstantiators%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.KeyDeserializers%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.std.StdKeyDeserializers%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.KeyDeserializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.std.StdKeyDeserializer$DelegatingKD%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.std.StdKeyDeserializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.std.StdKeyDeserializer$EnumKD%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.std.StdKeyDeserializer$StringCtorKeyDeserializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.std.StdKeyDeserializer$StringFactoryKeyDeserializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.DeserializerCache%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.std.StdDelegatingDeserializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.std.JsonValueSerializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.ContainerSerializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.std.MapSerializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.std.StdScalarSerializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.std.DateTimeSerializerBase%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.std.CalendarSerializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.std.DateSerializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.std.ByteBufferSerializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.std.InetAddressSerializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.std.InetSocketAddressSerializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.std.TimeZoneSerializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.std.ToStringSerializerBase%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.std.ToStringSerializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.std.NumberSerializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.std.SerializableSerializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.std.AsArraySerializerBase%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.std.IterableSerializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.impl.MapEntrySerializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.std.StaticListSerializerBase%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.impl.IndexedStringListSerializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.impl.StringCollectionSerializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.std.CollectionSerializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.std.EnumSerializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.impl.IndexedListSerializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.std.EnumSetSerializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.std.ArraySerializerBase%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.impl.StringArraySerializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.std.ObjectArraySerializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.std.ReferenceTypeSerializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.impl.IteratorSerializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.introspect.AnnotatedField%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.impl.PropertyBasedObjectIdGenerator%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.impl.UnsupportedTypeSerializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.impl.MapEntryAsPOJOSerializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.std.BeanSerializerBase%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.BeanSerializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.std.StringSerializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.std.NumberSerializers%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.std.NumberSerializers$Base%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.std.NumberSerializers$IntegerSerializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.core.JsonParser$NumberType%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.databind.ser.std.NumberSerializers$LongSerializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.std.NumberSerializers$IntLikeSerializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.std.NumberSerializers$ShortSerializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.std.NumberSerializers$DoubleSerializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.std.NumberSerializers$FloatSerializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.std.BooleanSerializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.std.BooleanSerializer$AsNumber%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.std.NumberSerializer$BigDecimalAsStringSerializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.std.StdJdkSerializers%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + java.util.Currency + java.util.UUID + com.fasterxml.jackson.databind.ser.std.UUIDSerializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.std.StdJdkSerializers$AtomicBooleanSerializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.std.StdJdkSerializers$AtomicIntegerSerializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.std.StdJdkSerializers$AtomicLongSerializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.std.FileSerializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.std.ClassSerializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.std.TokenBufferSerializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.cfg.SerializerFactoryConfig%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.Serializers%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.BeanSerializerModifier%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.PropertyNamingStrategies%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.PropertyNamingStrategy%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.PropertyNamingStrategies$NamingBase%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.PropertyNamingStrategies$LowerCamelCaseStrategy%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.PropertyNamingStrategies$UpperCamelCaseStrategy%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.PropertyNamingStrategies$SnakeCaseStrategy%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.PropertyNamingStrategies$UpperSnakeCaseStrategy%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.PropertyNamingStrategies$LowerCaseStrategy%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.PropertyNamingStrategies$KebabCaseStrategy%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.PropertyNamingStrategies$LowerDotCaseStrategy%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.amazonaws.xray.strategy.sampling.manifest.Manifest%20SAHA/.m2/repository/com/amazonaws/aws-xray-recorder-sdk-core/2.20.0/aws-xray-recorder-sdk-core-2.20.0.jar + com.amazonaws.xray.strategy.sampling.manifest.CentralizedManifest%20SAHA/.m2/repository/com/amazonaws/aws-xray-recorder-sdk-core/2.20.0/aws-xray-recorder-sdk-core-2.20.0.jar + com.amazonaws.xray.strategy.sampling.rule.Rule%20SAHA/.m2/repository/com/amazonaws/aws-xray-recorder-sdk-core/2.20.0/aws-xray-recorder-sdk-core-2.20.0.jar + com.amazonaws.xray.strategy.sampling.rand.Rand%20SAHA/.m2/repository/com/amazonaws/aws-xray-recorder-sdk-core/2.20.0/aws-xray-recorder-sdk-core-2.20.0.jar + com.amazonaws.xray.strategy.sampling.manifest.SamplingRuleManifest%20SAHA/.m2/repository/com/amazonaws/aws-xray-recorder-sdk-core/2.20.0/aws-xray-recorder-sdk-core-2.20.0.jar + com.fasterxml.jackson.core.io.ContentReference%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.core.util.BufferRecyclers%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.core.util.BufferRecycler%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.core.io.IOContext%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.core.util.TextBuffer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.core.util.ReadConstrainedTextBuffer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.core.json.ByteSourceJsonBootstrapper%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.core.json.UTF8StreamJsonParser%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + java.io.CharConversionException + com.fasterxml.jackson.core.io.MergedStream%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.core.io.UTF32Reader%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.core.JsonEncoding%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.core.util.InternCache%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.core.exc.StreamReadException%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.core.exc.InputCoercionException%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.core.JsonParseException%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.core.io.JsonEOFException%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.core.JsonStreamContext%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.core.json.JsonReadContext%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.core.StreamReadCapability%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.core.util.JacksonFeatureSet%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.databind.type.ClassStack%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.util.internal.PrivateMaxEntriesMap$WeightedValue%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.util.internal.PrivateMaxEntriesMap$Node%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.util.internal.PrivateMaxEntriesMap$AddTask%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.core.JsonToken%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.databind.introspect.AnnotationCollector$OneCollector%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.introspect.POJOPropertiesCollector%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.annotation.JsonAutoDetect%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.20/jackson-annotations-2.20.jar + com.fasterxml.jackson.annotation.JsonIdentityInfo%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.20/jackson-annotations-2.20.jar + com.fasterxml.jackson.databind.util.ArrayIterator%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ext.OptionalHandlerFactory%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + org.w3c.dom.Node + org.w3c.dom.Document + com.fasterxml.jackson.databind.ext.Java7Handlers%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ext.Java7HandlersImpl%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ext.NioPathSerializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ext.NioPathDeserializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.std.JdkDeserializers%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.std.FromStringDeserializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.std.UUIDDeserializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.std.AtomicBooleanDeserializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.std.AtomicIntegerDeserializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.std.AtomicLongDeserializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.std.ByteBufferDeserializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.std.NullifyingDeserializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.std.StdNodeBasedDeserializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.std.ThreadGroupDeserializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.std.FromStringDeserializer$StringBuilderDeserializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.std.FromStringDeserializer$StringBufferDeserializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.std.FromStringDeserializer$Std%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.jsontype.impl.SubTypeValidator%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.util.BeanUtil%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.annotation.JsonValueInstantiator%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.impl.JDKValueInstantiators%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.ValueInstantiator%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.ValueInstantiator$Base%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.std.JsonLocationInstantiator%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.impl.JDKValueInstantiators$JDKValueInstantiator%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.impl.JDKValueInstantiators$ArrayListInstantiator%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.impl.JDKValueInstantiators$HashSetInstantiator%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.impl.JDKValueInstantiators$LinkedListInstantiator%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.impl.JDKValueInstantiators$TreeSetInstantiator%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.impl.JDKValueInstantiators$LinkedHashSetInstantiator%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.impl.JDKValueInstantiators$ConstantValueInstantiator%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.impl.JDKValueInstantiators$LinkedHashMapInstantiator%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.impl.JDKValueInstantiators$HashMapInstantiator%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.impl.JDKValueInstantiators$ConcurrentHashMapInstantiator%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.impl.JDKValueInstantiators$TreeMapInstantiator%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.impl.JDKValueInstantiators$PropertiesInstantiator%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.core.JsonLocation%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.databind.introspect.PotentialCreators%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.introspect.CollectorBase%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.introspect.AnnotatedFieldCollector%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.introspect.AnnotationMap%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.introspect.TypeResolutionContext$Basic%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.amazonaws.xray.strategy.sampling.rule.SamplingRule%20SAHA/.m2/repository/com/amazonaws/aws-xray-recorder-sdk-core/2.20.0/aws-xray-recorder-sdk-core-2.20.0.jar + com.fasterxml.jackson.databind.introspect.AnnotatedFieldCollector$FieldBuilder%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.annotation.JsonProperty%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.20/jackson-annotations-2.20.jar + com.fasterxml.jackson.annotation.JsonProperty$Access%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.20/jackson-annotations-2.20.jar + com.fasterxml.jackson.annotation.OptBoolean%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.20/jackson-annotations-2.20.jar + com.fasterxml.jackson.annotation.JacksonAnnotation%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.20/jackson-annotations-2.20.jar + jdk.proxy2.$Proxy15 + com.fasterxml.jackson.databind.introspect.AnnotationCollector$NCollector%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.annotation.JacksonAnnotationsInside%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.20/jackson-annotations-2.20.jar + jdk.proxy2.$Proxy16 + com.fasterxml.jackson.annotation.JsonKey%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.20/jackson-annotations-2.20.jar + com.fasterxml.jackson.annotation.JsonValue%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.20/jackson-annotations-2.20.jar + com.fasterxml.jackson.annotation.JsonAnyGetter%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.20/jackson-annotations-2.20.jar + com.fasterxml.jackson.annotation.JsonAnySetter%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.20/jackson-annotations-2.20.jar + com.fasterxml.jackson.databind.PropertyName%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.annotation.JsonSetter%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.20/jackson-annotations-2.20.jar + com.fasterxml.jackson.annotation.JsonAutoDetect$1%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.20/jackson-annotations-2.20.jar + com.fasterxml.jackson.annotation.PropertyAccessor%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.20/jackson-annotations-2.20.jar + com.fasterxml.jackson.annotation.JsonIgnore%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.20/jackson-annotations-2.20.jar + com.fasterxml.jackson.databind.introspect.POJOPropertyBuilder%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.introspect.POJOPropertyBuilder$WithMember%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.AnnotationIntrospector$ReferenceProperty%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.AnnotationIntrospector$ReferenceProperty$Type%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.introspect.POJOPropertyBuilder$Linked%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.introspect.AnnotatedMethodCollector%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.introspect.MemberKey%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.introspect.AnnotatedMethodCollector$MethodBuilder%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.introspect.AnnotatedMethodMap%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.annotation.JsonGetter%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.20/jackson-annotations-2.20.jar + com.fasterxml.jackson.databind.introspect.AnnotatedCreatorCollector%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.cfg.ConstructorDetector%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.cfg.ConstructorDetector$SingleArgConstructor%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.introspect.POJOPropertyBuilder$5%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.introspect.POJOPropertyBuilder$6%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + java.util.LinkedList$ListItr + com.fasterxml.jackson.annotation.JacksonInject%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.20/jackson-annotations-2.20.jar + com.fasterxml.jackson.databind.annotation.JsonNaming%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.util.NamingStrategyImpls%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.util.NamingStrategyImpls$1%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.util.NamingStrategyImpls$2%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.util.NamingStrategyImpls$3%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.util.NamingStrategyImpls$4%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.util.NamingStrategyImpls$5%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.util.NamingStrategyImpls$6%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.util.NamingStrategyImpls$7%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.annotation.JsonPropertyOrder%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.20/jackson-annotations-2.20.jar + com.fasterxml.jackson.annotation.JsonPropertyDescription%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.20/jackson-annotations-2.20.jar + com.fasterxml.jackson.databind.PropertyMetadata%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + sun.reflect.generics.scope.MethodScope + sun.reflect.generics.repository.ConstructorRepository + sun.reflect.generics.repository.MethodRepository + sun.reflect.generics.tree.VoidDescriptor + sun.reflect.generics.tree.MethodTypeSignature + sun.reflect.generics.tree.TypeVariableSignature + com.fasterxml.jackson.databind.type.TypeBindings$TypeParamStash%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.type.TypeBindings$AsKey%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.impl.CreatorCollector%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.std.StdValueInstantiator%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.BeanDeserializerBuilder%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.impl.ObjectIdValueProperty%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.BuilderBasedDeserializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.annotation.JsonIgnoreProperties%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.20/jackson-annotations-2.20.jar + com.fasterxml.jackson.annotation.JsonIgnoreProperties$Value%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.20/jackson-annotations-2.20.jar + com.fasterxml.jackson.annotation.JsonIncludeProperties%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.20/jackson-annotations-2.20.jar + com.fasterxml.jackson.annotation.JsonIncludeProperties$Value%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.20/jackson-annotations-2.20.jar + com.fasterxml.jackson.databind.util.IgnorePropertiesUtil%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.annotation.JsonIgnoreType%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.20/jackson-annotations-2.20.jar + com.fasterxml.jackson.databind.annotation.JsonTypeResolver%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.impl.FailingDeserializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.impl.NullsConstantProvider%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.util.AccessPattern%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.introspect.POJOPropertyBuilder$2%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.introspect.POJOPropertyBuilder$4%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.introspect.POJOPropertyBuilder$1%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.annotation.JsonAlias%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.20/jackson-annotations-2.20.jar + com.fasterxml.jackson.annotation.JsonFormat$Feature%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.20/jackson-annotations-2.20.jar + com.fasterxml.jackson.databind.deser.impl.BeanPropertyMap%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.exc.IgnoredPropertyException%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.impl.ObjectIdReferenceProperty%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.SettableBeanProperty$Delegating%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.impl.MergingSettableBeanProperty%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.impl.ManagedReferenceProperty%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.impl.InnerClassProperty%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.impl.ReadableObjectId$Referring%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.BeanDeserializer$BeanReferring%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.impl.BeanAsArrayDeserializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.std.NumberDeserializers%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.std.NumberDeserializers$PrimitiveOrWrapperDeserializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.std.NumberDeserializers$IntegerDeserializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.std.NumberDeserializers$BooleanDeserializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.std.NumberDeserializers$LongDeserializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.std.NumberDeserializers$DoubleDeserializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.std.NumberDeserializers$CharacterDeserializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.std.NumberDeserializers$ByteDeserializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.std.NumberDeserializers$ShortDeserializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.std.NumberDeserializers$FloatDeserializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.std.NumberDeserializers$NumberDeserializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.std.NumberDeserializers$BigDecimalDeserializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.std.NumberDeserializers$BigIntegerDeserializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.amazonaws.xray.strategy.sampling.reservoir.Reservoir%20SAHA/.m2/repository/com/amazonaws/aws-xray-recorder-sdk-core/2.20.0/aws-xray-recorder-sdk-core-2.20.0.jar + com.fasterxml.jackson.annotation.JsonCreator%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.20/jackson-annotations-2.20.jar + com.fasterxml.jackson.databind.introspect.PotentialCreator%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.annotation.JsonCreator$Mode%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.20/jackson-annotations-2.20.jar + com.amazonaws.xray.strategy.sampling.reservoir.Reservoir$MaxFunction%20SAHA/.m2/repository/com/amazonaws/aws-xray-recorder-sdk-core/2.20.0/aws-xray-recorder-sdk-core-2.20.0.jar + com.amazonaws.xray.strategy.sampling.reservoir.Reservoir$LessThan10%20SAHA/.m2/repository/com/amazonaws/aws-xray-recorder-sdk-core/2.20.0/aws-xray-recorder-sdk-core-2.20.0.jar + com.amazonaws.xray.strategy.sampling.reservoir.Reservoir$AtLeast10%20SAHA/.m2/repository/com/amazonaws/aws-xray-recorder-sdk-core/2.20.0/aws-xray-recorder-sdk-core-2.20.0.jar + com.fasterxml.jackson.databind.util.LinkedNode%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.BasicDeserializerFactory$ContainerDefaultMappings%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.core.io.NumberInput%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.core.StreamReadFeature%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.amazonaws.xray.internal.UnsignedXrayClient%20SAHA/.m2/repository/com/amazonaws/aws-xray-recorder-sdk-core/2.20.0/aws-xray-recorder-sdk-core-2.20.0.jar + com.amazonaws.xray.internal.UnsignedXrayClient$FloatDateDeserializer%20SAHA/.m2/repository/com/amazonaws/aws-xray-recorder-sdk-core/2.20.0/aws-xray-recorder-sdk-core-2.20.0.jar + com.fasterxml.jackson.databind.Module%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.module.SimpleModule%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.amazonaws.xray.internal.UnsignedXrayClient$1%20SAHA/.m2/repository/com/amazonaws/aws-xray-recorder-sdk-core/2.20.0/aws-xray-recorder-sdk-core-2.20.0.jar + java.net.ProtocolException + com.amazonaws.xray.internal.XrayClientException%20SAHA/.m2/repository/com/amazonaws/aws-xray-recorder-sdk-core/2.20.0/aws-xray-recorder-sdk-core-2.20.0.jar + com.fasterxml.jackson.databind.module.SimpleAbstractTypeResolver%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.core.Version%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.databind.deser.Deserializers$Base%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.module.SimpleDeserializers%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.type.ClassKey%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ObjectMapper$1%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.util.ArrayBuilders%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.amazonaws.xray.config.DaemonConfiguration%20SAHA/.m2/repository/com/amazonaws/aws-xray-recorder-sdk-core/2.20.0/aws-xray-recorder-sdk-core-2.20.0.jar + java.net.InetSocketAddress$InetSocketAddressHolder + com.amazonaws.xray.entities.StringValidator%20SAHA/.m2/repository/com/amazonaws/aws-xray-recorder-sdk-core/2.20.0/aws-xray-recorder-sdk-core-2.20.0.jar + java.net.URL$2 + java.net.URL$1 + java.net.spi.URLStreamHandlerProvider + sun.net.www.protocol.http.Handler + com.amazonaws.xray.strategy.sampling.pollers.RulePoller%20SAHA/.m2/repository/com/amazonaws/aws-xray-recorder-sdk-core/2.20.0/aws-xray-recorder-sdk-core-2.20.0.jar + java.util.concurrent.Executors$DelegatedExecutorService + java.util.concurrent.Executors$DelegatedScheduledExecutorService + com.amazonaws.xray.strategy.DefaultStreamingStrategy%20SAHA/.m2/repository/com/amazonaws/aws-xray-recorder-sdk-core/2.20.0/aws-xray-recorder-sdk-core-2.20.0.jar + com.amazonaws.xray.strategy.DefaultPrioritizationStrategy%20SAHA/.m2/repository/com/amazonaws/aws-xray-recorder-sdk-core/2.20.0/aws-xray-recorder-sdk-core-2.20.0.jar + com.amazonaws.xray.strategy.DefaultThrowableSerializationStrategy%20SAHA/.m2/repository/com/amazonaws/aws-xray-recorder-sdk-core/2.20.0/aws-xray-recorder-sdk-core-2.20.0.jar + com.amazonaws.xray.strategy.LogErrorContextMissingStrategy%20SAHA/.m2/repository/com/amazonaws/aws-xray-recorder-sdk-core/2.20.0/aws-xray-recorder-sdk-core-2.20.0.jar + com.amazonaws.xray.strategy.DefaultContextMissingStrategy%20SAHA/.m2/repository/com/amazonaws/aws-xray-recorder-sdk-core/2.20.0/aws-xray-recorder-sdk-core-2.20.0.jar + com.amazonaws.xray.contexts.ResolverChain%20SAHA/.m2/repository/com/amazonaws/aws-xray-recorder-sdk-core/2.20.0/aws-xray-recorder-sdk-core-2.20.0.jar + com.amazonaws.xray.contexts.SegmentContextResolverChain%20SAHA/.m2/repository/com/amazonaws/aws-xray-recorder-sdk-core/2.20.0/aws-xray-recorder-sdk-core-2.20.0.jar + com.amazonaws.xray.contexts.LambdaSegmentContextResolver%20SAHA/.m2/repository/com/amazonaws/aws-xray-recorder-sdk-core/2.20.0/aws-xray-recorder-sdk-core-2.20.0.jar + com.amazonaws.xray.contexts.SegmentContext%20SAHA/.m2/repository/com/amazonaws/aws-xray-recorder-sdk-core/2.20.0/aws-xray-recorder-sdk-core-2.20.0.jar + com.amazonaws.xray.contexts.ThreadLocalSegmentContextResolver%20SAHA/.m2/repository/com/amazonaws/aws-xray-recorder-sdk-core/2.20.0/aws-xray-recorder-sdk-core-2.20.0.jar + java.util.Collections$UnmodifiableMap$UnmodifiableEntrySet + java.util.Collections$UnmodifiableMap$UnmodifiableEntrySet$1 + java.util.Collections$UnmodifiableMap$UnmodifiableEntrySet$UnmodifiableEntry + com.amazonaws.xray.emitters.Emitter%20SAHA/.m2/repository/com/amazonaws/aws-xray-recorder-sdk-core/2.20.0/aws-xray-recorder-sdk-core-2.20.0.jar + com.amazonaws.xray.emitters.UDPEmitter%20SAHA/.m2/repository/com/amazonaws/aws-xray-recorder-sdk-core/2.20.0/aws-xray-recorder-sdk-core-2.20.0.jar + java.net.SocketException + java.net.DatagramSocket + java.net.DatagramSocket$1 + java.net.DatagramSocket$$Lambda$624/0x000002bb4b1c3c90 + sun.net.NetProperties + sun.net.NetProperties$1 + java.net.Inet4AddressImpl + java.net.MulticastSocket + sun.nio.ch.DefaultSelectorProvider + java.nio.channels.spi.SelectorProvider + sun.nio.ch.SelectorProviderImpl + sun.nio.ch.WEPollSelectorProvider + sun.nio.ch.DefaultSelectorProvider$$Lambda$625/0x000002bb4b1c51f0 + sun.nio.ch.SelChImpl + java.nio.channels.ByteChannel + java.nio.channels.ScatteringByteChannel + java.nio.channels.GatheringByteChannel + java.nio.channels.NetworkChannel + java.nio.channels.MulticastChannel + java.nio.channels.InterruptibleChannel + java.nio.channels.spi.AbstractInterruptibleChannel + java.nio.channels.SelectableChannel + java.nio.channels.spi.AbstractSelectableChannel + java.nio.channels.DatagramChannel + sun.nio.ch.DatagramChannelImpl + sun.nio.ch.NativeDispatcher + sun.nio.ch.DatagramDispatcher + sun.nio.ch.IOUtil + sun.nio.ch.Net + java.net.ProtocolFamily + sun.nio.ch.Net$1 + sun.net.ext.ExtendedSocketOptions + jdk.net.ExtendedSocketOptions + java.net.SocketOption + jdk.net.ExtendedSocketOptions$ExtSocketOption + jdk.net.UnixDomainPrincipal + jdk.net.ExtendedSocketOptions$PlatformSocketOptions + jdk.net.ExtendedSocketOptions$PlatformSocketOptions$1 + jdk.net.ExtendedSocketOptions$1 + java.net.StandardProtocolFamily + sun.net.ResourceManager + sun.nio.ch.NativeSocketAddress + sun.nio.ch.DatagramChannelImpl$$Lambda$626/0x000002bb4b1c9da0 + sun.nio.ch.DatagramSocketAdaptor + sun.nio.ch.DatagramSocketAdaptor$DatagramSockets + sun.nio.ch.DatagramSocketAdaptor$DatagramSockets$$Lambda$627/0x000002bb4b1ca588 + java.lang.invoke.VarHandleReferences$FieldStaticReadOnly + java.net.StandardSocketOptions + java.net.StandardSocketOptions$StdSocketOption + sun.nio.ch.DatagramChannelImpl$DefaultOptionsHolder + sun.nio.ch.SocketOptionRegistry + sun.nio.ch.SocketOptionRegistry$RegistryKey + sun.nio.ch.SocketOptionRegistry$LazyInitialization + sun.nio.ch.OptionKey + sun.nio.ch.ExtendedSocketOption + sun.nio.ch.ExtendedSocketOption$1 + com.amazonaws.xray.plugins.Plugin%20SAHA/.m2/repository/com/amazonaws/aws-xray-recorder-sdk-core/2.20.0/aws-xray-recorder-sdk-core-2.20.0.jar + com.amazonaws.xray.AWSXRayRecorderBuilder$$Lambda$628/0x000002bb4b1a5ec0 + com.amazonaws.xray.AWSXRayRecorderBuilder$$Lambda$629/0x000002bb4b1a6108 + com.amazonaws.xray.AWSXRayRecorderBuilder$$Lambda$630/0x000002bb4b1a6350 + com.amazonaws.xray.entities.EntityImpl%20SAHA/.m2/repository/com/amazonaws/aws-xray-recorder-sdk-core/2.20.0/aws-xray-recorder-sdk-core-2.20.0.jar + com.amazonaws.xray.entities.SegmentImpl%20SAHA/.m2/repository/com/amazonaws/aws-xray-recorder-sdk-core/2.20.0/aws-xray-recorder-sdk-core-2.20.0.jar + com.amazonaws.xray.entities.EntityImpl$1%20SAHA/.m2/repository/com/amazonaws/aws-xray-recorder-sdk-core/2.20.0/aws-xray-recorder-sdk-core-2.20.0.jar + com.amazonaws.xray.entities.EntityImpl$1$1%20SAHA/.m2/repository/com/amazonaws/aws-xray-recorder-sdk-core/2.20.0/aws-xray-recorder-sdk-core-2.20.0.jar + com.amazonaws.xray.serializers.CauseSerializer%20SAHA/.m2/repository/com/amazonaws/aws-xray-recorder-sdk-core/2.20.0/aws-xray-recorder-sdk-core-2.20.0.jar + com.amazonaws.xray.serializers.StackTraceElementSerializer%20SAHA/.m2/repository/com/amazonaws/aws-xray-recorder-sdk-core/2.20.0/aws-xray-recorder-sdk-core-2.20.0.jar + com.amazonaws.xray.entities.TraceID%20SAHA/.m2/repository/com/amazonaws/aws-xray-recorder-sdk-core/2.20.0/aws-xray-recorder-sdk-core-2.20.0.jar + com.amazonaws.xray.internal.TimeUtils%20SAHA/.m2/repository/com/amazonaws/aws-xray-recorder-sdk-core/2.20.0/aws-xray-recorder-sdk-core-2.20.0.jar + com.amazonaws.xray.internal.RecyclableBuffers%20SAHA/.m2/repository/com/amazonaws/aws-xray-recorder-sdk-core/2.20.0/aws-xray-recorder-sdk-core-2.20.0.jar + com.amazonaws.xray.ThreadLocalStorage%20SAHA/.m2/repository/com/amazonaws/aws-xray-recorder-sdk-core/2.20.0/aws-xray-recorder-sdk-core-2.20.0.jar + com.amazonaws.xray.ThreadLocalStorage$LocalEntity%20SAHA/.m2/repository/com/amazonaws/aws-xray-recorder-sdk-core/2.20.0/aws-xray-recorder-sdk-core-2.20.0.jar + com.amazonaws.xray.entities.Cause%20SAHA/.m2/repository/com/amazonaws/aws-xray-recorder-sdk-core/2.20.0/aws-xray-recorder-sdk-core-2.20.0.jar + java.lang.invoke.VarHandleLongs$FieldInstanceReadOnly + java.lang.invoke.VarHandleLongs$FieldInstanceReadWrite + java.util.concurrent.atomic.Striped64$1 + com.amazonaws.xray.contexts.ThreadLocalSegmentContext%20SAHA/.m2/repository/com/amazonaws/aws-xray-recorder-sdk-core/2.20.0/aws-xray-recorder-sdk-core-2.20.0.jar + com.amazonaws.xray.listeners.SegmentListener%20SAHA/.m2/repository/com/amazonaws/aws-xray-recorder-sdk-core/2.20.0/aws-xray-recorder-sdk-core-2.20.0.jar + com.amazonaws.xray.contexts.SegmentContext$$Lambda$631/0x000002bb4b1a9178 + com.amazonaws.xray.contexts.SegmentContext$$Lambda$632/0x000002bb4b1a93c0 + com.amazonaws.xray.AWSXRayRecorder$$Lambda$633/0x000002bb4b1a95f0 + com.amazonaws.xray.AWSXRayRecorder$$Lambda$634/0x000002bb4b1a9838 + org.junit.jupiter.api.extension.BeforeTestExecutionCallback%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.14.0/junit-jupiter-api-5.14.0.jar + org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor$$Lambda$635/0x000002bb4b1a9c60 + org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor$$Lambda$636/0x000002bb4b1a9e78 + org.junit.jupiter.engine.descriptor.MethodExtensionContext$$Lambda$637/0x000002bb4b1aa098 + org.junit.jupiter.engine.extension.TimeoutExtension$$Lambda$638/0x000002bb4b1aa2d0 + org.junit.jupiter.engine.execution.NamespaceAwareStore$$Lambda$639/0x000002bb4b1aa520 + org.junit.jupiter.engine.extension.TimeoutConfiguration$$Lambda$640/0x000002bb4b1aa740 + org.junit.jupiter.engine.extension.TimeoutConfiguration$$Lambda$641/0x000002bb4b1aa960 + software.amazon.lambda.powertools.tracing.handlers.PowerTracerToolEnabledExplicitlyForResponseAndError + software.amazon.lambda.powertools.tracing.handlers.PowerTracerToolEnabledExplicitlyForResponseAndError$AjcClosure1 + org.aspectj.lang.ProceedingJoinPoint%20SAHA/.m2/repository/org/aspectj/aspectjrt/1.9.7/aspectjrt-1.9.7.jar + org.aspectj.runtime.reflect.JoinPointImpl%20SAHA/.m2/repository/org/aspectj/aspectjrt/1.9.7/aspectjrt-1.9.7.jar + software.amazon.lambda.powertools.tracing.internal.LambdaTracingAspect + org.aspectj.lang.NoAspectBoundException%20SAHA/.m2/repository/org/aspectj/aspectjrt/1.9.7/aspectjrt-1.9.7.jar + software.amazon.lambda.powertools.tracing.Tracing + software.amazon.lambda.powertools.tracing.CaptureMode + jdk.proxy2.$Proxy17 + software.amazon.lambda.powertools.tracing.internal.LambdaTracingAspect$$Lambda$642/0x000002bb4b1ac1f8 + com.amazonaws.xray.entities.SubsegmentImpl%20SAHA/.m2/repository/com/amazonaws/aws-xray-recorder-sdk-core/2.20.0/aws-xray-recorder-sdk-core-2.20.0.jar + com.amazonaws.xray.internal.SamplingStrategyOverride%20SAHA/.m2/repository/com/amazonaws/aws-xray-recorder-sdk-core/2.20.0/aws-xray-recorder-sdk-core-2.20.0.jar + com.amazonaws.xray.contexts.ThreadLocalSegmentContext$$Lambda$643/0x000002bb4b1ad190 + com.amazonaws.xray.contexts.ThreadLocalSegmentContext$$Lambda$644/0x000002bb4b1ad3d8 + software.amazon.lambda.powertools.tracing.TracingUtils + com.amazonaws.xray.entities.EntityImpl$$Lambda$645/0x000002bb4b1ad808 + com.amazonaws.xray.contexts.ThreadLocalSegmentContext$$Lambda$646/0x000002bb4b1ada40 + com.amazonaws.xray.contexts.ThreadLocalSegmentContext$$Lambda$647/0x000002bb4b1adc88 + com.amazonaws.xray.contexts.ThreadLocalSegmentContext$$Lambda$648/0x000002bb4b1adeb8 + com.amazonaws.xray.contexts.ThreadLocalSegmentContext$$Lambda$649/0x000002bb4b1ae100 + org.assertj.core.api.InstanceOfAssertFactories%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.Assertions%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.NumberAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.ComparableAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.Descriptable%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.ExtensionPoints%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.Assert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.AbstractAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.AbstractObjectAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.AbstractComparableAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.AbstractBigIntegerAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.BigIntegerAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.data.TemporalOffset%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.data.TemporalUnitOffset%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.data.TemporalUnitLessThanOffset%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.data.TemporalUnitWithinOffset%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.configuration.ConfigurationProvider%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.AssertionsForClassTypes%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.EnumerableAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.AbstractCharSequenceAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.CharSequenceAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.ArraySortedAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.AbstractEnumerableAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.AbstractArrayAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.AbstractShortArrayAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.ShortArrayAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.AbstractStringAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.StringAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.AbstractDateAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.DateAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.AbstractShortAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.ShortAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.AbstractTemporalAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.AbstractYearMonthAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.YearMonthAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.AbstractInstantAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.InstantAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.AbstractDurationAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.DurationAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.AbstractPeriodAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.PeriodAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.AbstractThrowableAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.ThrowableAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.AbstractZonedDateTimeAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.ZonedDateTimeAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.AbstractLocalDateTimeAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.LocalDateTimeAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.AbstractOffsetDateTimeAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.OffsetDateTimeAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.AbstractOffsetTimeAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.OffsetTimeAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.AbstractLocalTimeAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.LocalTimeAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.AbstractLocalDateAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.LocalDateAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.AbstractByteAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.ByteAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.AbstractBooleanArrayAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.BooleanArrayAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.AbstractBooleanAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.BooleanAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.AbstractCharArrayAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.CharArrayAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.AbstractCharacterAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.CharacterAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.AbstractByteArrayAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.ByteArrayAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.AbstractUrlAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.UrlAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.AbstractUriAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.UriAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.AbstractBigDecimalAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.BigDecimalAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.FloatingPointNumberAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.AbstractFloatAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.FloatAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.AbstractFloatArrayAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.FloatArrayAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.AbstractInputStreamAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.InputStreamAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.AbstractFileAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.FileAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.AbstractLongAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.LongAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.AbstractIntegerAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.IntegerAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.AbstractIntArrayAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.IntArrayAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.AbstractLongArrayAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.LongArrayAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.AbstractDoubleArrayAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.DoubleArrayAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.AbstractDoubleAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.DoubleAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.ObjectAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.description.Description%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.description.LazyTextDescription%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.description.TextDescription%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.AssertionInfo%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.internal.ComparisonStrategy%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.ObjectEnumerableAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.IndexedObjectEnumerableAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.AbstractIterableAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.AbstractCollectionAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.AbstractListAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.FactoryBasedNavigableListAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.ListAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.internal.Objects%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.error.ErrorMessageFactory%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.util.introspection.IntrospectionError%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.internal.AbstractComparisonStrategy%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.internal.StandardComparisonStrategy%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.util.introspection.PropertySupport%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.internal.Failures%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.error.AssertionErrorCreator%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.util.Arrays%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.error.ConstructorInvoker%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.util.introspection.FieldSupport%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.error.GroupTypeDescription%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.internal.Conditions%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.WritableAssertionInfo%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.presentation.Representation%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.configuration.Configuration%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.configuration.PreferredAssumptionException%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.configuration.PreferredAssumptionException$1%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.configuration.Services%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.util.Lists%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.util.Streams%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.util.Lists$$Lambda$650/0x000002bb4b22b718 + org.assertj.core.presentation.CompositeRepresentation%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + java.lang.invoke.LambdaForm$DMH/0x000002bb4b22c000 + org.assertj.core.presentation.CompositeRepresentation$$Lambda$651/0x000002bb4b22bb80 + org.assertj.core.presentation.StandardRepresentation%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + java.time.chrono.ChronoZonedDateTime + java.time.ZonedDateTime + java.time.OffsetDateTime + org.assertj.core.api.AssertionsForInterfaceTypes%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.GenericComparableAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.AbstractUniversalComparableAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.UniversalComparableAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.AbstractIterableSizeAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.IterableSizeAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.AssertFactory%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.ListAssert$$Lambda$652/0x000002bb4b22dd58 + org.assertj.core.internal.Iterables%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.internal.Predicates%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.internal.Lists%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.util.IterableUtil%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.internal.CommonValidations%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.ThrowingConsumer%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + java.lang.invoke.LambdaForm$DMH/0x000002bb4b22c400 + software.amazon.lambda.powertools.tracing.internal.LambdaTracingAspectTest$$Lambda$653/0x000002bb4b231980 + org.assertj.core.internal.Iterables$$Lambda$654/0x000002bb4b231bd0 + org.assertj.core.internal.Iterables$$Lambda$655/0x000002bb4b231e10 + org.assertj.core.error.UnsatisfiedRequirement%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.internal.Iterables$$Lambda$656/0x000002bb4b232270 + org.assertj.core.api.AbstractMapAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.MapAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.AbstractMapSizeAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.api.MapSizeAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.internal.Maps%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.data.MapEntry%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.internal.ErrorMessages%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.util.Preconditions%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.junit.jupiter.api.extension.AfterTestExecutionCallback%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.14.0/junit-jupiter-api-5.14.0.jar + org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor$$Lambda$657/0x000002bb4b2360f8 + org.junit.jupiter.engine.descriptor.CallbackSupport$$Lambda$658/0x000002bb4b236310 + org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor$$Lambda$659/0x000002bb4b236540 + org.junit.jupiter.engine.descriptor.CallbackSupport$$Lambda$660/0x000002bb4b236760 + org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor$$Lambda$661/0x000002bb4b236980 + org.junit.jupiter.engine.extension.TimeoutExtension$$Lambda$662/0x000002bb4b236b98 + org.junit.jupiter.engine.extension.TimeoutConfiguration$$Lambda$663/0x000002bb4b236de8 + com.amazonaws.xray.AWSXRayRecorder$$Lambda$664/0x000002bb4b237008 + com.amazonaws.xray.AWSXRayRecorder$$Lambda$665/0x000002bb4b237250 + com.fasterxml.jackson.core.exc.StreamWriteException%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.core.JsonGenerationException%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.core.json.JsonWriteContext%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.core.StreamWriteCapability%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.core.FormatFeature%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.core.json.JsonWriteFeature%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.databind.ser.impl.ReadOnlyClassToSerializerMap%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.impl.ReadOnlyClassToSerializerMap$Bucket%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.util.TypeKey%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.impl.ReadOnlyClassToSerializerMap$$Lambda$666/0x000002bb4b238c00 + com.fasterxml.jackson.databind.util.internal.PrivateMaxEntriesMap$EntrySet%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.util.internal.PrivateMaxEntriesMap$EntryIterator%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + jdk.internal.reflect.GeneratedMethodAccessor1 + jdk.proxy2.$Proxy18 + com.fasterxml.jackson.annotation.JsonInclude%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.20/jackson-annotations-2.20.jar + jdk.proxy2.$Proxy19 + com.fasterxml.jackson.databind.annotation.JsonSerialize$Inclusion%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.annotation.JsonSerialize$Typing%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.util.Converter%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.util.Converter$None%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.JsonSerializer$None%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + jdk.proxy2.$Proxy20 + java.lang.Deprecated + jdk.proxy1.$Proxy21 + java.lang.TypeNotPresentException + com.fasterxml.jackson.databind.ObjectReader%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ObjectWriter%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.BeanSerializerBuilder%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.PropertyBuilder%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.introspect.POJOPropertyBuilder$3%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.annotation.JsonTypeId%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.20/jackson-annotations-2.20.jar + com.fasterxml.jackson.databind.BeanProperty$Std%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.PropertyBuilder$1%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.impl.UnwrappingBeanPropertyWriter%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.impl.PropertySerializerMap%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.impl.PropertySerializerMap$Empty%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.impl.PropertySerializerMap$Single%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.annotation.NoClass%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.annotation.JsonAppend%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.annotation.JsonFilter%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.20/jackson-annotations-2.20.jar + com.fasterxml.jackson.databind.ser.impl.UnwrappingBeanSerializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.impl.BeanAsArraySerializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.std.NumberSerializers$1%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.AnyGetterWriter%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.core.io.NumberOutput%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.20.1/jackson-core-2.20.1.jar + com.fasterxml.jackson.databind.ser.impl.PropertySerializerMap$SerializerAndMapResult%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.impl.PropertySerializerMap$Double%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + jdk.internal.reflect.GeneratedConstructorAccessor7 + jdk.internal.reflect.UnsafeObjectFieldAccessorImpl + com.amazonaws.xray.entities.ThrowableDescription%20SAHA/.m2/repository/com/amazonaws/aws-xray-recorder-sdk-core/2.20.0/aws-xray-recorder-sdk-core-2.20.0.jar + sun.reflect.generics.scope.ConstructorScope + com.fasterxml.jackson.databind.ser.std.MapProperty%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.BasicSerializerFactory$1%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.std.StdKeySerializers%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.std.StdKeySerializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.std.StdKeySerializers$StringKeySerializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.std.StdKeySerializers$Dynamic%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.std.StdKeySerializers$EnumKeySerializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.std.StdKeySerializers$Default%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.std.MapSerializer$1%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.impl.PropertySerializerMap$Multi%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + java.util.stream.DoubleStream + java.util.stream.LongStream + com.fasterxml.jackson.databind.annotation.JacksonStdImpl%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + jdk.proxy2.$Proxy22 + sun.reflect.generics.tree.BottomSignature + sun.reflect.generics.tree.Wildcard + java.lang.reflect.WildcardType + sun.reflect.generics.reflectiveObjects.WildcardTypeImpl + java.net.DatagramPacket + sun.nio.ch.Util + sun.nio.ch.Util$1 + sun.nio.ch.Util$BufferCache + java.nio.DirectByteBuffer$Deallocator + sun.nio.ch.NativeThread + sun.nio.ch.IOStatus + com.amazonaws.xray.AWSXRayRecorder$$Lambda$667/0x000002bb4b242ae0 + com.amazonaws.xray.AWSXRayRecorder$$Lambda$668/0x000002bb4b242d28 + com.amazonaws.xray.contexts.SegmentContext$$Lambda$669/0x000002bb4b242f58 + com.amazonaws.xray.contexts.SegmentContext$$Lambda$670/0x000002bb4b2431a0 + org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor$$Lambda$671/0x000002bb4b2433d0 + org.junitpioneer.jupiter.AbstractEntryBasedExtension$$Lambda$672/0x000002bb4b2435e8 + org.junitpioneer.jupiter.AbstractEntryBasedExtension$EntriesBackup$$Lambda$673/0x000002bb4b243818 + org.junitpioneer.jupiter.AbstractEntryBasedExtension$EntriesBackup$$Lambda$674/0x000002bb4b243a48 + org.junit.platform.engine.support.hierarchical.NodeTestTask$$Lambda$675/0x000002bb4b243c78 + org.junit.platform.engine.support.hierarchical.NodeTestTask$$Lambda$676/0x000002bb4b243e98 + org.junit.platform.engine.support.hierarchical.NodeTestTask$$Lambda$677/0x000002bb4b2440b8 + org.junit.jupiter.engine.descriptor.MethodExtensionContext$$Lambda$678/0x000002bb4b2442d8 + org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor$$Lambda$679/0x000002bb4b244510 + org.junit.jupiter.engine.extension.AutoCloseExtension$$Lambda$680/0x000002bb4b244728 + org.junit.jupiter.engine.extension.AutoCloseExtension$$Lambda$681/0x000002bb4b244970 + org.junit.jupiter.api.extension.TestInstancePreDestroyCallback$$Lambda$682/0x000002bb4b244ba0 + org.junit.jupiter.api.extension.TestInstancePreDestroyCallback$$Lambda$683/0x000002bb4b244dd8 + org.junit.jupiter.engine.extension.AutoCloseExtension$$Lambda$684/0x000002bb4b245008 + org.junit.jupiter.api.AutoClose%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.14.0/junit-jupiter-api-5.14.0.jar + org.junit.jupiter.engine.extension.AutoCloseExtension$$Lambda$685/0x000002bb4b245448 + org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor$$Lambda$686/0x000002bb4b245678 + java.util.concurrent.ConcurrentHashMap$EntrySpliterator + org.junit.platform.engine.support.store.NamespacedHierarchicalStore$EvaluatedValue%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + org.junit.platform.engine.support.store.NamespacedHierarchicalStore$$Lambda$687/0x000002bb4b245aa0 + org.junit.platform.engine.support.store.NamespacedHierarchicalStore$$Lambda$688/0x000002bb4b245cd8 + org.junit.platform.engine.support.store.NamespacedHierarchicalStore$EvaluatedValue$$Lambda$689/0x000002bb4b245f20 + org.junit.platform.engine.support.store.NamespacedHierarchicalStore$$Lambda$690/0x000002bb4b246158 + org.junit.jupiter.engine.config.CachingJupiterConfiguration$$Lambda$691/0x000002bb4b246388 + org.junit.platform.engine.TestExecutionResult%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + org.junit.platform.engine.TestExecutionResult$Status%20SAHA/.m2/repository/org/junit/platform/junit-platform-engine/1.14.0/junit-platform-engine-1.14.0.jar + org.junit.jupiter.api.extension.TestWatcher%20SAHA/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.14.0/junit-jupiter-api-5.14.0.jar + org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor$$Lambda$692/0x000002bb4b246e08 + org.junit.jupiter.engine.descriptor.MethodBasedTestDescriptor$$Lambda$693/0x000002bb4b247038 + org.junit.platform.launcher.core.StackTracePruningEngineExecutionListener$$Lambda$694/0x000002bb4b247268 + org.junit.platform.launcher.core.StackTracePruningEngineExecutionListener$$Lambda$695/0x000002bb4b2474a0 + org.junit.platform.launcher.core.StackTracePruningEngineExecutionListener$$Lambda$696/0x000002bb4b2476e8 + org.junit.platform.launcher.core.StackTracePruningEngineExecutionListener$$Lambda$697/0x000002bb4b247920 + org.junit.platform.launcher.core.StackTracePruningEngineExecutionListener$$Lambda$698/0x000002bb4b247b58 + org.junit.platform.launcher.core.CompositeEngineExecutionListener$$Lambda$699/0x000002bb4b247da0 + org.junit.platform.launcher.core.CompositeEngineExecutionListener$$Lambda$700/0x000002bb4b248000 + org.junit.platform.launcher.core.CompositeTestExecutionListener$$Lambda$701/0x000002bb4b248220 + org.junit.platform.launcher.core.CompositeTestExecutionListener$$Lambda$702/0x000002bb4b248450 + org.junit.platform.launcher.core.CompositeTestExecutionListener$$Lambda$703/0x000002bb4b248670 + org.junit.platform.launcher.core.CompositeTestExecutionListener$$Lambda$704/0x000002bb4b2488a0 + org.apache.maven.surefire.junitplatform.RunListenerAdapter$$Lambda$705/0x000002bb4b248ac0 + org.apache.maven.surefire.junitplatform.RunListenerAdapter$1%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-junit-platform/3.5.4/surefire-junit-platform-3.5.4.jar + jdk.internal.reflect.GeneratedMethodAccessor2 + jdk.internal.reflect.GeneratedMethodAccessor3 + software.amazon.lambda.powertools.tracing.handlers.PowerTracerToolEnabledForResponse + software.amazon.lambda.powertools.tracing.handlers.PowerTracerToolEnabledForResponse$AjcClosure1 + software.amazon.lambda.powertools.tracing.internal.LambdaTracingAspectTest$$Lambda$706/0x000002bb4b249378 + java.util.AbstractMap$SimpleEntry + com.fasterxml.jackson.databind.util.internal.PrivateMaxEntriesMap$WriteThroughEntry%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + software.amazon.lambda.powertools.tracing.handlers.PowerTracerToolEnabledWithException + software.amazon.lambda.powertools.tracing.handlers.PowerTracerToolEnabledWithException$AjcClosure1 + org.assertj.core.api.ThrowableAssert$ThrowingCallable%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + software.amazon.lambda.powertools.tracing.internal.LambdaTracingAspectTest$$Lambda$707/0x000002bb4b249e80 + software.amazon.lambda.powertools.tracing.internal.SystemWrapper + software.amazon.lambda.powertools.tracing.internal.LambdaTracingAspectTest$$Lambda$708/0x000002bb4b24a2a0 + software.amazon.lambda.powertools.tracing.internal.LambdaTracingAspectTest$$Lambda$709/0x000002bb4b24a6e8 + org.assertj.core.api.AbstractAssert$$Lambda$710/0x000002bb4b24a940 + org.assertj.core.api.AbstractAssert$$Lambda$711/0x000002bb4b24ab88 + org.assertj.core.api.AbstractAssert$$Lambda$712/0x000002bb4b24adc8 + org.assertj.core.api.AbstractAssert$$Lambda$713/0x000002bb4b24b010 + java.io.PrintWriter + java.lang.Throwable$PrintStreamOrWriter + com.fasterxml.jackson.databind.ser.std.StdArraySerializers%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.std.StdArraySerializers$BooleanArraySerializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.std.ByteArraySerializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.std.StdArraySerializers$CharArraySerializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.std.StdArraySerializers$TypedPrimitiveArraySerializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.std.StdArraySerializers$ShortArraySerializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.std.StdArraySerializers$IntArraySerializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.std.StdArraySerializers$LongArraySerializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.std.StdArraySerializers$FloatArraySerializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.std.StdArraySerializers$BinaryFloatArraySerializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.std.StdArraySerializers$DoubleArraySerializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.ser.std.StdArraySerializers$BinaryDoubleArraySerializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + java.lang.StackTraceElement$HashedModules + com.fasterxml.jackson.databind.introspect.MethodGenericTypeResolver%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + software.amazon.lambda.powertools.tracing.handlers.PowerToolDisabled + software.amazon.lambda.powertools.tracing.handlers.PowerToolDisabledForStream + software.amazon.lambda.powertools.tracing.internal.LambdaTracingAspectTest$$Lambda$714/0x000002bb4b24d440 + software.amazon.lambda.powertools.tracing.internal.LambdaTracingAspectTest$$Lambda$715/0x000002bb4b24d690 + software.amazon.lambda.powertools.tracing.internal.LambdaTracingAspectTest$$Lambda$716/0x000002bb4b24d8e0 + software.amazon.lambda.powertools.tracing.internal.LambdaTracingAspectTest$$Lambda$717/0x000002bb4b24db30 + org.assertj.core.internal.Throwables%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + software.amazon.lambda.powertools.tracing.internal.LambdaTracingAspectTest$$Lambda$718/0x000002bb4b24dd50 + software.amazon.lambda.powertools.tracing.handlers.PowerTracerToolEnabledWithNoMetaData + software.amazon.lambda.powertools.tracing.handlers.PowerTracerToolEnabledWithNoMetaData$AjcClosure1 + software.amazon.lambda.powertools.tracing.internal.LambdaTracingAspectTest$$Lambda$719/0x000002bb4b250000 + jdk.internal.reflect.GeneratedMethodAccessor4 + jdk.internal.reflect.GeneratedMethodAccessor5 + jdk.internal.reflect.GeneratedMethodAccessor6 + jdk.internal.reflect.GeneratedMethodAccessor7 + jdk.internal.reflect.GeneratedMethodAccessor8 + jdk.internal.reflect.GeneratedMethodAccessor9 + jdk.internal.reflect.GeneratedMethodAccessor10 + jdk.internal.reflect.GeneratedMethodAccessor11 + jdk.internal.reflect.GeneratedMethodAccessor12 + jdk.internal.reflect.GeneratedMethodAccessor13 + jdk.internal.reflect.GeneratedMethodAccessor14 + jdk.internal.reflect.GeneratedMethodAccessor15 + jdk.internal.reflect.GeneratedMethodAccessor16 + jdk.internal.reflect.GeneratedMethodAccessor17 + jdk.internal.reflect.GeneratedMethodAccessor18 + jdk.internal.reflect.GeneratedMethodAccessor19 + software.amazon.lambda.powertools.tracing.handlers.PowerTracerToolEnabledForError + software.amazon.lambda.powertools.tracing.handlers.PowerTracerToolEnabledForError$AjcClosure1 + software.amazon.lambda.powertools.tracing.internal.LambdaTracingAspectTest$$Lambda$720/0x000002bb4b2506b8 + software.amazon.lambda.powertools.tracing.internal.LambdaTracingAspectTest$$Lambda$721/0x000002bb4b2508d8 + software.amazon.lambda.powertools.tracing.internal.LambdaTracingAspectTest$$Lambda$722/0x000002bb4b250b30 + software.amazon.lambda.powertools.tracing.internal.LambdaTracingAspectTest$$Lambda$723/0x000002bb4b250d88 + software.amazon.lambda.powertools.tracing.handlers.PowerTracerToolEnabledForStreamWithNoMetaData + software.amazon.lambda.powertools.tracing.handlers.PowerTracerToolEnabledForStreamWithNoMetaData$AjcClosure1 + software.amazon.lambda.powertools.tracing.internal.LambdaTracingAspectTest$$Lambda$724/0x000002bb4b251440 + software.amazon.lambda.powertools.tracing.internal.LambdaTracingAspectTest$$Lambda$725/0x000002bb4b251690 + org.assertj.core.internal.Strings%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.internal.Comparables%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + software.amazon.lambda.powertools.tracing.handlers.PowerTracerToolEnabledForResponseWithCustomMapper + software.amazon.lambda.powertools.tracing.handlers.PowerTracerToolEnabledForResponseWithCustomMapper$ChildSerializer + software.amazon.lambda.powertools.tracing.handlers.PowerTracerToolEnabledForResponseWithCustomMapper$AjcClosure1 + software.amazon.lambda.powertools.tracing.handlers.PowerTracerToolEnabledForResponseWithCustomMapper$ChildClass + com.fasterxml.jackson.databind.ser.Serializers$Base%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.module.SimpleSerializers%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + software.amazon.lambda.powertools.tracing.handlers.PowerTracerToolEnabledForResponseWithCustomMapper$ParentClass + software.amazon.lambda.powertools.tracing.internal.LambdaTracingAspectTest$$Lambda$726/0x000002bb4b253058 + org.assertj.core.util.introspection.PropertyOrFieldSupport%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.util.introspection.Introspection%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.util.introspection.Introspection$MethodKey%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.util.introspection.Introspection$$Lambda$727/0x000002bb4b2538d0 + java.util.function.ToDoubleBiFunction + java.util.function.DoubleBinaryOperator + java.util.function.ToLongBiFunction + java.util.function.LongBinaryOperator + java.util.function.ToIntBiFunction + java.util.function.IntBinaryOperator + java.util.function.ToDoubleFunction + java.util.function.ToLongFunction + org.assertj.core.util.Strings%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.util.Strings$$Lambda$728/0x000002bb4b253d08 + java.util.stream.Collectors$$Lambda$729/0x000002bb4b1d0f18 + java.util.stream.Collectors$$Lambda$730/0x000002bb4b1d1130 + java.util.stream.Collectors$$Lambda$731/0x000002bb4b1d1358 + java.util.stream.Collectors$$Lambda$732/0x000002bb4b1d1598 + org.assertj.core.util.introspection.FieldUtils%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.util.introspection.FieldUtils$$Lambda$733/0x000002bb4b258200 + org.assertj.core.util.introspection.ClassUtils%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + java.util.OptionalLong + java.util.OptionalDouble + org.assertj.core.api.NotThrownAssert%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + software.amazon.lambda.powertools.tracing.internal.LambdaTracingAspectTest$$Lambda$734/0x000002bb4b2588c0 + com.fasterxml.jackson.databind.ser.impl.PropertySerializerMap$TypeAndSerializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + org.assertj.core.description.EmptyTextDescription%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + software.amazon.lambda.powertools.tracing.internal.LambdaTracingAspectTest$$Lambda$735/0x000002bb4b2590e0 + jdk.internal.reflect.GeneratedMethodAccessor20 + jdk.internal.reflect.GeneratedMethodAccessor21 + jdk.internal.reflect.GeneratedMethodAccessor22 + jdk.internal.reflect.GeneratedMethodAccessor23 + jdk.internal.reflect.GeneratedMethodAccessor24 + jdk.internal.reflect.GeneratedMethodAccessor25 + jdk.internal.reflect.GeneratedConstructorAccessor8 + jdk.internal.reflect.GeneratedMethodAccessor26 + software.amazon.lambda.powertools.tracing.internal.LambdaTracingAspectTest$$Lambda$736/0x000002bb4b259330 + jdk.internal.reflect.GeneratedMethodAccessor27 + java.lang.invoke.LambdaForm$DMH/0x000002bb4b25e400 + org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor$$Lambda$737/0x000002bb4b259580 + org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor$$Lambda$738/0x000002bb4b2597b0 + org.junitpioneer.jupiter.EnvironmentVariableUtils$$Lambda$739/0x000002bb4b2599c8 + org.junit.jupiter.engine.extension.AutoCloseExtension$$Lambda$740/0x000002bb4b259bf8 + org.junit.jupiter.engine.extension.AutoCloseExtension$$Lambda$741/0x000002bb4b259e40 + org.apache.maven.surefire.junitplatform.RunListenerAdapter$$Lambda$742/0x000002bb4b25a088 + org.apache.maven.surefire.api.util.internal.ObjectUtils%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-api/3.5.4/surefire-api-3.5.4.jar + org.apache.maven.surefire.api.util.internal.ImmutableMap$Node%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-api/3.5.4/surefire-api-3.5.4.jar + software.amazon.awssdk.utils.SdkAutoCloseable%20SAHA/.m2/repository/software/amazon/awssdk/utils/2.39.1/utils-2.39.1.jar + software.amazon.awssdk.core.SdkClient%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.awscore.AwsClient%20SAHA/.m2/repository/software/amazon/awssdk/aws-core/2.39.1/aws-core-2.39.1.jar + software.amazon.awssdk.services.s3.S3Client%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.core.SdkServiceClientConfiguration%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.awscore.AwsServiceClientConfiguration%20SAHA/.m2/repository/software/amazon/awssdk/aws-core/2.39.1/aws-core-2.39.1.jar + software.amazon.awssdk.core.client.builder.SdkSyncClientBuilder%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.awscore.client.builder.AwsSyncClientBuilder%20SAHA/.m2/repository/software/amazon/awssdk/aws-core/2.39.1/aws-core-2.39.1.jar + software.amazon.awssdk.utils.builder.Buildable%20SAHA/.m2/repository/software/amazon/awssdk/utils/2.39.1/utils-2.39.1.jar + software.amazon.awssdk.utils.builder.SdkBuilder%20SAHA/.m2/repository/software/amazon/awssdk/utils/2.39.1/utils-2.39.1.jar + software.amazon.awssdk.core.client.builder.SdkClientBuilder%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.awscore.client.builder.AwsClientBuilder%20SAHA/.m2/repository/software/amazon/awssdk/aws-core/2.39.1/aws-core-2.39.1.jar + software.amazon.awssdk.services.s3.S3BaseClientBuilder%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.S3ClientBuilder%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.S3ServiceClientConfiguration%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.core.client.builder.SdkDefaultClientBuilder%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.awscore.client.builder.AwsDefaultClientBuilder%20SAHA/.m2/repository/software/amazon/awssdk/aws-core/2.39.1/aws-core-2.39.1.jar + software.amazon.awssdk.services.s3.DefaultS3BaseClientBuilder%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.DefaultS3ClientBuilder%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.http.SdkHttpClient$Builder%20SAHA/.m2/repository/software/amazon/awssdk/http-client-spi/2.39.1/http-client-spi-2.39.1.jar + software.amazon.awssdk.http.async.SdkAsyncHttpClient$Builder%20SAHA/.m2/repository/software/amazon/awssdk/http-client-spi/2.39.1/http-client-spi-2.39.1.jar + software.amazon.awssdk.utils.AttributeMap$Key%20SAHA/.m2/repository/software/amazon/awssdk/utils/2.39.1/utils-2.39.1.jar + software.amazon.awssdk.core.client.config.ClientOption%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.core.client.config.SdkClientOption%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.core.client.config.SdkAdvancedAsyncClientOption%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.core.client.config.SdkAdvancedClientOption%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.http.SdkHttpClient%20SAHA/.m2/repository/software/amazon/awssdk/http-client-spi/2.39.1/http-client-spi-2.39.1.jar + software.amazon.awssdk.http.async.SdkAsyncHttpClient%20SAHA/.m2/repository/software/amazon/awssdk/http-client-spi/2.39.1/http-client-spi-2.39.1.jar + software.amazon.awssdk.identity.spi.IdentityProvider%20SAHA/.m2/repository/software/amazon/awssdk/identity-spi/2.39.1/identity-spi-2.39.1.jar + software.amazon.awssdk.awscore.client.config.AwsClientOption%20SAHA/.m2/repository/software/amazon/awssdk/aws-core/2.39.1/aws-core-2.39.1.jar + software.amazon.awssdk.core.internal.SdkInternalTestAdvancedClientOption%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.regions.ServiceMetadataAdvancedOption%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.core.ClientEndpointProvider%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.awscore.client.config.AwsAdvancedClientOption%20SAHA/.m2/repository/software/amazon/awssdk/aws-core/2.39.1/aws-core-2.39.1.jar + software.amazon.awssdk.services.s3.endpoints.S3ClientContextParams%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.core.SdkServiceClientConfiguration$Builder%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.core.internal.http.loader.DefaultSdkHttpClientBuilder%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.core.internal.http.loader.SdkHttpServiceProvider%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.core.internal.http.loader.CachingSdkHttpServiceProvider%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.core.internal.http.loader.SdkHttpServiceProviderChain%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.core.internal.http.loader.SystemPropertyHttpServiceProvider%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.core.exception.SdkException%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.core.exception.SdkClientException%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.utils.SystemSetting%20SAHA/.m2/repository/software/amazon/awssdk/utils/2.39.1/utils-2.39.1.jar + software.amazon.awssdk.core.SdkSystemSetting%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.http.SdkHttpService%20SAHA/.m2/repository/software/amazon/awssdk/http-client-spi/2.39.1/http-client-spi-2.39.1.jar + software.amazon.awssdk.core.internal.http.loader.ClasspathSdkHttpServiceProvider%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.utils.ImmutableMap%20SAHA/.m2/repository/software/amazon/awssdk/utils/2.39.1/utils-2.39.1.jar + software.amazon.awssdk.utils.Logger%20SAHA/.m2/repository/software/amazon/awssdk/utils/2.39.1/utils-2.39.1.jar + software.amazon.awssdk.utils.ImmutableMap$Builder%20SAHA/.m2/repository/software/amazon/awssdk/utils/2.39.1/utils-2.39.1.jar + software.amazon.awssdk.core.internal.http.loader.SdkServiceLoader%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.utils.Validate%20SAHA/.m2/repository/software/amazon/awssdk/utils/2.39.1/utils-2.39.1.jar + software.amazon.awssdk.core.internal.http.loader.DefaultSdkAsyncHttpClientBuilder%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.http.async.SdkAsyncHttpService%20SAHA/.m2/repository/software/amazon/awssdk/http-client-spi/2.39.1/http-client-spi-2.39.1.jar + software.amazon.awssdk.utils.builder.ToCopyableBuilder%20SAHA/.m2/repository/software/amazon/awssdk/utils/2.39.1/utils-2.39.1.jar + software.amazon.awssdk.core.client.config.SdkClientConfiguration%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.utils.builder.CopyableBuilder%20SAHA/.m2/repository/software/amazon/awssdk/utils/2.39.1/utils-2.39.1.jar + software.amazon.awssdk.core.client.config.SdkClientConfiguration$Builder%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.core.client.config.ClientOverrideConfiguration$Builder%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.utils.AttributeMap%20SAHA/.m2/repository/software/amazon/awssdk/utils/2.39.1/utils-2.39.1.jar + software.amazon.awssdk.utils.AttributeMap$LazyValueSource%20SAHA/.m2/repository/software/amazon/awssdk/utils/2.39.1/utils-2.39.1.jar + software.amazon.awssdk.utils.AttributeMap$Builder%20SAHA/.m2/repository/software/amazon/awssdk/utils/2.39.1/utils-2.39.1.jar + software.amazon.awssdk.utils.AttributeMap$Value%20SAHA/.m2/repository/software/amazon/awssdk/utils/2.39.1/utils-2.39.1.jar + software.amazon.awssdk.utils.AttributeMap$DependencyGraph%20SAHA/.m2/repository/software/amazon/awssdk/utils/2.39.1/utils-2.39.1.jar + software.amazon.awssdk.utils.AttributeMap$Builder$$Lambda$743/0x000002bb4b266560 + software.amazon.awssdk.awscore.internal.defaultsmode.AutoDefaultsModeDiscovery%20SAHA/.m2/repository/software/amazon/awssdk/aws-core/2.39.1/aws-core-2.39.1.jar + software.amazon.awssdk.awscore.defaultsmode.DefaultsMode%20SAHA/.m2/repository/software/amazon/awssdk/aws-core/2.39.1/aws-core-2.39.1.jar + software.amazon.awssdk.awscore.defaultsmode.DefaultsMode$$Lambda$744/0x000002bb4b266dc8 + software.amazon.awssdk.utils.internal.EnumUtils%20SAHA/.m2/repository/software/amazon/awssdk/utils/2.39.1/utils-2.39.1.jar + software.amazon.awssdk.utils.CollectionUtils%20SAHA/.m2/repository/software/amazon/awssdk/utils/2.39.1/utils-2.39.1.jar + java.util.RegularEnumSet$EnumSetIterator + software.amazon.awssdk.regions.Region%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.utils.StringUtils%20SAHA/.m2/repository/software/amazon/awssdk/utils/2.39.1/utils-2.39.1.jar + java.nio.charset.CharacterCodingException + software.amazon.awssdk.utils.http.SdkHttpUtils%20SAHA/.m2/repository/software/amazon/awssdk/utils/2.39.1/utils-2.39.1.jar + software.amazon.awssdk.utils.FunctionalUtils$UnsafeSupplier%20SAHA/.m2/repository/software/amazon/awssdk/utils/2.39.1/utils-2.39.1.jar + software.amazon.awssdk.utils.http.SdkHttpUtils$$Lambda$745/0x000002bb4b267c00 + software.amazon.awssdk.utils.FunctionalUtils%20SAHA/.m2/repository/software/amazon/awssdk/utils/2.39.1/utils-2.39.1.jar + software.amazon.awssdk.utils.FunctionalUtils$$Lambda$746/0x000002bb4b268200 + software.amazon.awssdk.regions.Region$RegionCache%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.Region$RegionCache$$Lambda$747/0x000002bb4b268620 + software.amazon.awssdk.utils.Pair%20SAHA/.m2/repository/software/amazon/awssdk/utils/2.39.1/utils-2.39.1.jar + software.amazon.awssdk.auth.credentials.AwsCredentialsProvider%20SAHA/.m2/repository/software/amazon/awssdk/auth/2.39.1/auth-2.39.1.jar + software.amazon.awssdk.utils.AttributeMap$Key$$Lambda$748/0x000002bb4b268e50 + software.amazon.awssdk.utils.AttributeMap$Key$UnsafeValueType%20SAHA/.m2/repository/software/amazon/awssdk/utils/2.39.1/utils-2.39.1.jar + software.amazon.awssdk.utils.AttributeMap$Key$$Lambda$749/0x000002bb4b269298 + software.amazon.awssdk.awscore.endpoints.AccountIdEndpointMode%20SAHA/.m2/repository/software/amazon/awssdk/aws-core/2.39.1/aws-core-2.39.1.jar + software.amazon.awssdk.auth.token.credentials.SdkTokenProvider%20SAHA/.m2/repository/software/amazon/awssdk/auth/2.39.1/auth-2.39.1.jar + software.amazon.awssdk.utils.AttributeMap$ConstantValue%20SAHA/.m2/repository/software/amazon/awssdk/utils/2.39.1/utils-2.39.1.jar + software.amazon.awssdk.core.retry.RetryPolicy%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.retries.api.RetryStrategy%20SAHA/.m2/repository/software/amazon/awssdk/retries-spi/2.39.1/retries-spi-2.39.1.jar + software.amazon.awssdk.core.retry.RetryMode%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.retries.api.RetryStrategy$Builder%20SAHA/.m2/repository/software/amazon/awssdk/retries-spi/2.39.1/retries-spi-2.39.1.jar + software.amazon.awssdk.core.ServiceConfiguration%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.core.ClientType%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.profiles.ProfileFile%20SAHA/.m2/repository/software/amazon/awssdk/profiles/2.39.1/profiles-2.39.1.jar + software.amazon.awssdk.core.interceptor.ExecutionAttributes%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.core.useragent.BusinessMetricCollection%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.endpoints.EndpointProvider%20SAHA/.m2/repository/software/amazon/awssdk/endpoints-spi/2.39.1/endpoints-spi-2.39.1.jar + software.amazon.awssdk.http.auth.spi.scheme.AuthSchemeProvider%20SAHA/.m2/repository/software/amazon/awssdk/http-auth-spi/2.39.1/http-auth-spi-2.39.1.jar + software.amazon.awssdk.identity.spi.IdentityProviders%20SAHA/.m2/repository/software/amazon/awssdk/identity-spi/2.39.1/identity-spi-2.39.1.jar + software.amazon.awssdk.core.CompressionConfiguration%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.core.checksums.RequestChecksumCalculation%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.core.checksums.ResponseChecksumValidation%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.utils.AttributeMap$Builder$1%20SAHA/.m2/repository/software/amazon/awssdk/utils/2.39.1/utils-2.39.1.jar + software.amazon.awssdk.services.s3.DefaultS3BaseClientBuilder$$Lambda$750/0x000002bb4b26bda0 + software.amazon.awssdk.services.s3.endpoints.S3EndpointProvider%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.endpoints.internal.DefaultS3EndpointProvider%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.awscore.auth.AuthSchemePreferenceResolver%20SAHA/.m2/repository/software/amazon/awssdk/aws-core/2.39.1/aws-core-2.39.1.jar + software.amazon.awssdk.awscore.auth.AuthSchemePreferenceResolver$Builder%20SAHA/.m2/repository/software/amazon/awssdk/aws-core/2.39.1/aws-core-2.39.1.jar + software.amazon.awssdk.awscore.auth.AuthSchemePreferenceResolver$$Lambda$751/0x000002bb4b26c800 + software.amazon.awssdk.profiles.ProfileFile$Builder%20SAHA/.m2/repository/software/amazon/awssdk/profiles/2.39.1/profiles-2.39.1.jar + software.amazon.awssdk.awscore.auth.AuthSchemePreferenceResolver$$Lambda$752/0x000002bb4b26cc10 + software.amazon.awssdk.profiles.ProfileFileSystemSetting%20SAHA/.m2/repository/software/amazon/awssdk/profiles/2.39.1/profiles-2.39.1.jar + software.amazon.awssdk.awscore.auth.AuthSchemePreferenceResolver$$Lambda$753/0x000002bb4b26d2f0 + software.amazon.awssdk.utils.internal.SystemSettingUtils%20SAHA/.m2/repository/software/amazon/awssdk/utils/2.39.1/utils-2.39.1.jar + software.amazon.awssdk.utils.internal.SystemSettingUtils$$Lambda$754/0x000002bb4b26d710 + software.amazon.awssdk.utils.internal.SystemSettingUtils$$Lambda$755/0x000002bb4b26d948 + software.amazon.awssdk.utils.internal.SystemSettingUtils$$Lambda$756/0x000002bb4b26db68 + software.amazon.awssdk.utils.OptionalUtils%20SAHA/.m2/repository/software/amazon/awssdk/utils/2.39.1/utils-2.39.1.jar + software.amazon.awssdk.utils.internal.SystemSettingUtilsTestBackdoor%20SAHA/.m2/repository/software/amazon/awssdk/utils/2.39.1/utils-2.39.1.jar + software.amazon.awssdk.utils.internal.SystemSettingUtils$$Lambda$757/0x000002bb4b26e188 + software.amazon.awssdk.utils.internal.SystemSettingUtils$$Lambda$758/0x000002bb4b26e3c0 + java.lang.invoke.LambdaForm$DMH/0x000002bb4b270000 + software.amazon.awssdk.utils.SystemSetting$$Lambda$759/0x000002bb4b26e5f8 + software.amazon.awssdk.profiles.ProfileFile$Aggregator%20SAHA/.m2/repository/software/amazon/awssdk/profiles/2.39.1/profiles-2.39.1.jar + software.amazon.awssdk.profiles.ProfileFile$$Lambda$760/0x000002bb4b26ea60 + software.amazon.awssdk.profiles.ProfileFileLocation%20SAHA/.m2/repository/software/amazon/awssdk/profiles/2.39.1/profiles-2.39.1.jar + software.amazon.awssdk.profiles.ProfileFileLocation$$Lambda$761/0x000002bb4b26ee88 + software.amazon.awssdk.utils.UserHomeDirectoryUtils%20SAHA/.m2/repository/software/amazon/awssdk/utils/2.39.1/utils-2.39.1.jar + software.amazon.awssdk.utils.JavaSystemSetting%20SAHA/.m2/repository/software/amazon/awssdk/utils/2.39.1/utils-2.39.1.jar + software.amazon.awssdk.utils.UserHomeDirectoryUtils$$Lambda$762/0x000002bb4b26f768 + software.amazon.awssdk.profiles.ProfileFileLocation$$Lambda$763/0x000002bb4b26f9a0 + sun.nio.fs.ExtendedFileSystemProvider + sun.nio.fs.WindowsException + java.nio.file.FileSystemException + java.nio.file.NoSuchFileException + software.amazon.awssdk.profiles.ProfileFile$$Lambda$764/0x000002bb4b26fbe8 + software.amazon.awssdk.profiles.ProfileFile$$Lambda$765/0x000002bb4b274000 + software.amazon.awssdk.profiles.ProfileFileLocation$$Lambda$766/0x000002bb4b274228 + software.amazon.awssdk.profiles.ProfileFile$$Lambda$767/0x000002bb4b274440 + software.amazon.awssdk.profiles.ProfileFile$$Lambda$768/0x000002bb4b274670 + software.amazon.awssdk.profiles.Profile%20SAHA/.m2/repository/software/amazon/awssdk/profiles/2.39.1/profiles-2.39.1.jar + software.amazon.awssdk.awscore.auth.AuthSchemePreferenceResolver$$Lambda$769/0x000002bb4b274ad0 + software.amazon.awssdk.services.s3.auth.scheme.S3AuthSchemeProvider%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.auth.scheme.internal.DefaultS3AuthSchemeProvider%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.auth.scheme.internal.FallbackS3AuthSchemeProvider%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.http.auth.spi.scheme.AuthScheme%20SAHA/.m2/repository/software/amazon/awssdk/http-auth-spi/2.39.1/http-auth-spi-2.39.1.jar + software.amazon.awssdk.http.auth.aws.scheme.AwsV4AuthScheme%20SAHA/.m2/repository/software/amazon/awssdk/http-auth-aws/2.39.1/http-auth-aws-2.39.1.jar + software.amazon.awssdk.http.auth.spi.signer.HttpSigner%20SAHA/.m2/repository/software/amazon/awssdk/http-auth-spi/2.39.1/http-auth-spi-2.39.1.jar + software.amazon.awssdk.http.auth.aws.internal.scheme.DefaultAwsV4AuthScheme%20SAHA/.m2/repository/software/amazon/awssdk/http-auth-aws/2.39.1/http-auth-aws-2.39.1.jar + software.amazon.awssdk.http.auth.aws.signer.AwsV4FamilyHttpSigner%20SAHA/.m2/repository/software/amazon/awssdk/http-auth-aws/2.39.1/http-auth-aws-2.39.1.jar + software.amazon.awssdk.http.auth.aws.signer.AwsV4HttpSigner%20SAHA/.m2/repository/software/amazon/awssdk/http-auth-aws/2.39.1/http-auth-aws-2.39.1.jar + software.amazon.awssdk.http.auth.spi.signer.SignerProperty%20SAHA/.m2/repository/software/amazon/awssdk/http-auth-spi/2.39.1/http-auth-spi-2.39.1.jar + software.amazon.awssdk.http.auth.aws.internal.signer.DefaultAwsV4HttpSigner%20SAHA/.m2/repository/software/amazon/awssdk/http-auth-aws/2.39.1/http-auth-aws-2.39.1.jar + software.amazon.awssdk.http.auth.spi.signer.BaseSignRequest%20SAHA/.m2/repository/software/amazon/awssdk/http-auth-spi/2.39.1/http-auth-spi-2.39.1.jar + java.util.concurrent.CompletionStage + software.amazon.awssdk.http.auth.aws.internal.signer.V4PayloadSigner%20SAHA/.m2/repository/software/amazon/awssdk/http-auth-aws/2.39.1/http-auth-aws-2.39.1.jar + software.amazon.awssdk.http.auth.spi.signer.PayloadChecksumStore%20SAHA/.m2/repository/software/amazon/awssdk/http-auth-spi/2.39.1/http-auth-spi-2.39.1.jar + software.amazon.awssdk.http.auth.aws.scheme.AwsV4aAuthScheme%20SAHA/.m2/repository/software/amazon/awssdk/http-auth-aws/2.39.1/http-auth-aws-2.39.1.jar + software.amazon.awssdk.http.auth.aws.internal.scheme.DefaultAwsV4aAuthScheme%20SAHA/.m2/repository/software/amazon/awssdk/http-auth-aws/2.39.1/http-auth-aws-2.39.1.jar + software.amazon.awssdk.http.auth.scheme.NoAuthAuthScheme%20SAHA/.m2/repository/software/amazon/awssdk/http-auth/2.39.1/http-auth-2.39.1.jar + software.amazon.awssdk.http.auth.internal.scheme.DefaultNoAuthAuthScheme%20SAHA/.m2/repository/software/amazon/awssdk/http-auth/2.39.1/http-auth-2.39.1.jar + software.amazon.awssdk.identity.spi.Identity%20SAHA/.m2/repository/software/amazon/awssdk/identity-spi/2.39.1/identity-spi-2.39.1.jar + software.amazon.awssdk.http.auth.scheme.NoAuthAuthScheme$AnonymousIdentity%20SAHA/.m2/repository/software/amazon/awssdk/http-auth/2.39.1/http-auth-2.39.1.jar + software.amazon.awssdk.http.auth.internal.scheme.DefaultNoAuthAuthScheme$1%20SAHA/.m2/repository/software/amazon/awssdk/http-auth/2.39.1/http-auth-2.39.1.jar + software.amazon.awssdk.http.auth.internal.scheme.DefaultNoAuthAuthScheme$2%20SAHA/.m2/repository/software/amazon/awssdk/http-auth/2.39.1/http-auth-2.39.1.jar + software.amazon.awssdk.http.auth.internal.scheme.DefaultNoAuthAuthScheme$3%20SAHA/.m2/repository/software/amazon/awssdk/http-auth/2.39.1/http-auth-2.39.1.jar + software.amazon.awssdk.services.s3.S3Configuration%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.S3Configuration$Builder%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.S3Configuration$DefaultS3ServiceConfigurationBuilder%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.internal.FieldWithDefault%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.internal.FieldWithDefault$Impl%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.internal.FieldWithDefault$LazyImpl%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.S3Configuration$$Lambda$770/0x000002bb4b272b78 + software.amazon.awssdk.utils.AttributeMap$$Lambda$771/0x000002bb4b272d90 + software.amazon.awssdk.utils.AttributeMap$$Lambda$772/0x000002bb4b272fc0 + software.amazon.awssdk.utils.AttributeMap$Builder$$Lambda$773/0x000002bb4b2731e0 + software.amazon.awssdk.utils.AttributeMap$DependencyGraph$$Lambda$774/0x000002bb4b273410 + software.amazon.awssdk.awscore.client.builder.AwsDefaultClientBuilder$$Lambda$775/0x000002bb4b273640 + software.amazon.awssdk.core.signer.Signer%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.utils.Lazy%20SAHA/.m2/repository/software/amazon/awssdk/utils/2.39.1/utils-2.39.1.jar + software.amazon.awssdk.utils.Lazy$ResolvedLazy%20SAHA/.m2/repository/software/amazon/awssdk/utils/2.39.1/utils-2.39.1.jar + software.amazon.awssdk.core.client.builder.SdkDefaultClientBuilder$$Lambda$776/0x000002bb4b271000 + software.amazon.awssdk.core.client.builder.SdkDefaultClientBuilder$$Lambda$777/0x000002bb4b271218 + software.amazon.awssdk.core.client.builder.SdkDefaultClientBuilder$$Lambda$778/0x000002bb4b271438 + software.amazon.awssdk.utils.AttributeMap$LazyValue%20SAHA/.m2/repository/software/amazon/awssdk/utils/2.39.1/utils-2.39.1.jar + software.amazon.awssdk.core.client.builder.SdkDefaultClientBuilder$$Lambda$779/0x000002bb4b271860 + software.amazon.awssdk.utils.AttributeMap$DerivedValue%20SAHA/.m2/repository/software/amazon/awssdk/utils/2.39.1/utils-2.39.1.jar + software.amazon.awssdk.core.CompressionConfiguration$Builder%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.core.CompressionConfiguration$DefaultBuilder%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.utils.AttributeMap$Builder$$Lambda$780/0x000002bb4b270a98 + software.amazon.awssdk.utils.AttributeMap$DependencyGraph$$Lambda$781/0x000002bb4b270cd0 + software.amazon.awssdk.core.interceptor.ExecutionInterceptor%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.services.s3.auth.scheme.internal.S3AuthSchemeInterceptor%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.endpoints.internal.S3ResolveEndpointInterceptor%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + java.util.concurrent.CompletionException + software.amazon.awssdk.services.s3.endpoints.internal.S3RequestSetEndpointInterceptor%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.internal.handlers.StreamingRequestInterceptor%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.internal.handlers.CreateBucketInterceptor%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.internal.handlers.CreateMultipartUploadRequestInterceptor%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.internal.handlers.DecodeUrlEncodedResponseInterceptor%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.internal.handlers.GetBucketPolicyInterceptor%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.utils.StringInputStream%20SAHA/.m2/repository/software/amazon/awssdk/utils/2.39.1/utils-2.39.1.jar + org.reactivestreams.Publisher%20SAHA/.m2/repository/org/reactivestreams/reactive-streams/1.0.4/reactive-streams-1.0.4.jar + software.amazon.awssdk.core.interceptor.Context$BeforeExecution%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.core.interceptor.Context$ModifyRequest%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.core.interceptor.Context$BeforeMarshalling%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.core.interceptor.Context$AfterMarshalling%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.core.interceptor.Context$ModifyHttpRequest%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.core.interceptor.Context$BeforeTransmission%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.core.interceptor.Context$AfterTransmission%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.core.interceptor.Context$ModifyHttpResponse%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.services.s3.internal.handlers.GetBucketPolicyInterceptor$$Lambda$782/0x000002bb4b27aba8 + software.amazon.awssdk.services.s3.internal.handlers.AsyncChecksumValidationInterceptor%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.http.SdkHttpHeaders%20SAHA/.m2/repository/software/amazon/awssdk/http-client-spi/2.39.1/http-client-spi-2.39.1.jar + software.amazon.awssdk.core.checksums.SdkChecksum%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.services.s3.internal.handlers.SyncChecksumValidationInterceptor%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.internal.handlers.EnableTrailingChecksumInterceptor%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.internal.handlers.ExceptionTranslationInterceptor%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.core.SdkPojo%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.core.exception.SdkServiceException%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.awscore.exception.AwsServiceException%20SAHA/.m2/repository/software/amazon/awssdk/aws-core/2.39.1/aws-core-2.39.1.jar + software.amazon.awssdk.services.s3.internal.handlers.GetObjectInterceptor%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.core.SdkResponse%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.awscore.AwsResponse%20SAHA/.m2/repository/software/amazon/awssdk/aws-core/2.39.1/aws-core-2.39.1.jar + software.amazon.awssdk.services.s3.model.S3Response%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.GetObjectResponse%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.internal.handlers.ObjectMetadataInterceptor%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.core.SdkRequest%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.awscore.AwsRequest%20SAHA/.m2/repository/software/amazon/awssdk/aws-core/2.39.1/aws-core-2.39.1.jar + software.amazon.awssdk.services.s3.model.S3Request%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.PutObjectRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.CreateMultipartUploadRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.core.interceptor.ClasspathInterceptorChainFactory%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.core.internal.util.ClassLoaderHelper%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.core.interceptor.ClasspathInterceptorChainFactory$$Lambda$783/0x000002bb4b27e708 + software.amazon.awssdk.core.interceptor.ClasspathInterceptorChainFactory$$Lambda$784/0x000002bb4b27e948 + software.amazon.awssdk.core.interceptor.ClasspathInterceptorChainFactory$$Lambda$785/0x000002bb4b27eb80 + software.amazon.awssdk.core.interceptor.ClasspathInterceptorChainFactory$$Lambda$786/0x000002bb4b27edb8 + java.util.stream.Collectors$$Lambda$787/0x000002bb4b1d3030 + java.util.stream.Collectors$$Lambda$788/0x000002bb4b1d3248 + software.amazon.awssdk.utils.AttributeMap$ExpectCachedLazyValueSource%20SAHA/.m2/repository/software/amazon/awssdk/utils/2.39.1/utils-2.39.1.jar + software.amazon.awssdk.services.s3.S3Configuration$$Lambda$789/0x000002bb4b27f218 + software.amazon.awssdk.services.s3.internal.settingproviders.UseArnRegionProvider%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.internal.settingproviders.UseArnRegionProviderChain%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.internal.settingproviders.SystemsSettingsUseArnRegionProvider%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.internal.settingproviders.ProfileUseArnRegionProvider%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.S3SystemSetting%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + java.lang.invoke.LambdaForm$DMH/0x000002bb4b284000 + software.amazon.awssdk.utils.SystemSetting$$Lambda$790/0x000002bb4b2804c8 + software.amazon.awssdk.services.s3.internal.settingproviders.ProfileUseArnRegionProvider$$Lambda$791/0x000002bb4b280708 + software.amazon.awssdk.services.s3.internal.settingproviders.ProfileUseArnRegionProvider$$Lambda$792/0x000002bb4b280940 + software.amazon.awssdk.services.s3.S3Configuration$$Lambda$793/0x000002bb4b280b78 + software.amazon.awssdk.services.s3.internal.settingproviders.DisableMultiRegionProvider%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.internal.settingproviders.DisableMultiRegionProviderChain%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.internal.settingproviders.SystemsSettingsDisableMultiRegionProvider%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.internal.settingproviders.ProfileDisableMultiRegionProvider%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.internal.settingproviders.ProfileDisableMultiRegionProvider$$Lambda$794/0x000002bb4b2817d8 + software.amazon.awssdk.services.s3.internal.settingproviders.ProfileDisableMultiRegionProvider$$Lambda$795/0x000002bb4b281a10 + software.amazon.awssdk.services.s3.internal.endpoints.UseGlobalEndpointResolver%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.internal.endpoints.UseGlobalEndpointResolver$$Lambda$796/0x000002bb4b281e58 + software.amazon.awssdk.services.s3.internal.s3express.UseS3ExpressAuthResolver%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.internal.s3express.UseS3ExpressAuthResolver$$Lambda$797/0x000002bb4b282280 + software.amazon.awssdk.services.s3.internal.s3express.UseS3ExpressAuthResolver$$Lambda$798/0x000002bb4b2824a0 + software.amazon.awssdk.services.s3.internal.s3express.UseS3ExpressAuthResolver$$Lambda$799/0x000002bb4b2826c0 + software.amazon.awssdk.services.s3.internal.s3express.UseS3ExpressAuthResolver$$Lambda$800/0x000002bb4b2828e0 + software.amazon.awssdk.services.s3.DefaultS3BaseClientBuilder$$Lambda$801/0x000002bb4b282b18 + software.amazon.awssdk.utils.AttributeMap$DependencyGraph$$Lambda$802/0x000002bb4b282d30 + software.amazon.awssdk.utils.AttributeMap$CachedValue%20SAHA/.m2/repository/software/amazon/awssdk/utils/2.39.1/utils-2.39.1.jar + software.amazon.awssdk.utils.AttributeMap$DependencyGraph$$Lambda$803/0x000002bb4b283168 + java.util.IdentityHashMap$IdentityHashMapIterator + java.util.IdentityHashMap$ValueIterator + software.amazon.awssdk.services.s3.internal.endpoints.UseGlobalEndpointResolver$$Lambda$804/0x000002bb4b283398 + software.amazon.awssdk.services.s3.internal.endpoints.UseGlobalEndpointResolver$$Lambda$805/0x000002bb4b2835b8 + software.amazon.awssdk.services.s3.DefaultS3BaseClientBuilder$$Lambda$806/0x000002bb4b2837f0 + software.amazon.awssdk.utils.AttributeMap$Builder$$Lambda$807/0x000002bb4b283a10 + software.amazon.awssdk.services.s3.DefaultS3BaseClientBuilder$$Lambda$808/0x000002bb4b283c30 + software.amazon.awssdk.services.s3.DefaultS3BaseClientBuilder$$Lambda$809/0x000002bb4b286000 + software.amazon.awssdk.identity.spi.internal.DefaultIdentityProviders%20SAHA/.m2/repository/software/amazon/awssdk/identity-spi/2.39.1/identity-spi-2.39.1.jar + software.amazon.awssdk.identity.spi.IdentityProviders$Builder%20SAHA/.m2/repository/software/amazon/awssdk/identity-spi/2.39.1/identity-spi-2.39.1.jar + software.amazon.awssdk.identity.spi.internal.DefaultIdentityProviders$BuilderImpl%20SAHA/.m2/repository/software/amazon/awssdk/identity-spi/2.39.1/identity-spi-2.39.1.jar + software.amazon.awssdk.identity.spi.internal.DefaultIdentityProviders$$Lambda$810/0x000002bb4b2868f8 + software.amazon.awssdk.core.checksums.RequestChecksumCalculationResolver%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.core.checksums.RequestChecksumCalculationResolver$$Lambda$811/0x000002bb4b286f10 + software.amazon.awssdk.core.checksums.RequestChecksumCalculationResolver$$Lambda$812/0x000002bb4b287150 + software.amazon.awssdk.core.checksums.RequestChecksumCalculationResolver$$Lambda$813/0x000002bb4b287370 + software.amazon.awssdk.core.checksums.RequestChecksumCalculationResolver$$Lambda$814/0x000002bb4b2875a8 + software.amazon.awssdk.core.checksums.RequestChecksumCalculationResolver$$Lambda$815/0x000002bb4b2877e8 + software.amazon.awssdk.awscore.endpoint.AwsClientEndpointProvider%20SAHA/.m2/repository/software/amazon/awssdk/aws-core/2.39.1/aws-core-2.39.1.jar + software.amazon.awssdk.awscore.endpoint.AwsClientEndpointProvider$Builder%20SAHA/.m2/repository/software/amazon/awssdk/aws-core/2.39.1/aws-core-2.39.1.jar + software.amazon.awssdk.awscore.endpoint.AwsClientEndpointProvider$ClientEndpoint%20SAHA/.m2/repository/software/amazon/awssdk/aws-core/2.39.1/aws-core-2.39.1.jar + software.amazon.awssdk.awscore.endpoint.AwsClientEndpointProvider$$Lambda$816/0x000002bb4b285208 + software.amazon.awssdk.core.checksums.ResponseChecksumValidationResolver%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.core.checksums.ResponseChecksumValidationResolver$$Lambda$817/0x000002bb4b285820 + software.amazon.awssdk.core.checksums.ResponseChecksumValidationResolver$$Lambda$818/0x000002bb4b285a60 + software.amazon.awssdk.core.checksums.ResponseChecksumValidationResolver$$Lambda$819/0x000002bb4b285c80 + software.amazon.awssdk.core.checksums.ResponseChecksumValidationResolver$$Lambda$820/0x000002bb4b284800 + software.amazon.awssdk.core.checksums.ResponseChecksumValidationResolver$$Lambda$821/0x000002bb4b284a40 + software.amazon.awssdk.awscore.interceptor.HelpfulUnknownHostExceptionInterceptor%20SAHA/.m2/repository/software/amazon/awssdk/aws-core/2.39.1/aws-core-2.39.1.jar + software.amazon.awssdk.awscore.eventstream.EventStreamInitialRequestInterceptor%20SAHA/.m2/repository/software/amazon/awssdk/aws-core/2.39.1/aws-core-2.39.1.jar + software.amazon.awssdk.awscore.interceptor.TraceIdExecutionInterceptor%20SAHA/.m2/repository/software/amazon/awssdk/aws-core/2.39.1/aws-core-2.39.1.jar + software.amazon.awssdk.core.interceptor.ExecutionAttribute%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.core.interceptor.ExecutionAttribute$ValueStorage%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.core.interceptor.ExecutionAttribute$DefaultValueStorage%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.awscore.client.builder.AwsDefaultClientBuilder$$Lambda$822/0x000002bb4b288c90 + software.amazon.awssdk.awscore.client.builder.AwsDefaultClientBuilder$$Lambda$823/0x000002bb4b288eb0 + software.amazon.awssdk.awscore.client.builder.AwsDefaultClientBuilder$$Lambda$824/0x000002bb4b2890d0 + software.amazon.awssdk.awscore.client.builder.AwsDefaultClientBuilder$$Lambda$825/0x000002bb4b2892f0 + software.amazon.awssdk.awscore.client.builder.AwsDefaultClientBuilder$$Lambda$826/0x000002bb4b289510 + software.amazon.awssdk.awscore.client.builder.AwsDefaultClientBuilder$$Lambda$827/0x000002bb4b289730 + software.amazon.awssdk.awscore.client.builder.AwsDefaultClientBuilder$$Lambda$828/0x000002bb4b289950 + software.amazon.awssdk.awscore.client.builder.AwsDefaultClientBuilder$$Lambda$829/0x000002bb4b289b70 + software.amazon.awssdk.awscore.client.builder.AwsDefaultClientBuilder$$Lambda$830/0x000002bb4b289d90 + software.amazon.awssdk.awscore.internal.defaultsmode.DefaultsModeResolver%20SAHA/.m2/repository/software/amazon/awssdk/aws-core/2.39.1/aws-core-2.39.1.jar + software.amazon.awssdk.awscore.internal.defaultsmode.DefaultsModeResolver$$Lambda$831/0x000002bb4b28a1b8 + software.amazon.awssdk.awscore.internal.defaultsmode.DefaultsModeResolver$$Lambda$832/0x000002bb4b28a3f0 + software.amazon.awssdk.awscore.internal.defaultsmode.DefaultsModeResolver$$Lambda$833/0x000002bb4b28a610 + software.amazon.awssdk.awscore.internal.defaultsmode.DefaultsModeResolver$$Lambda$834/0x000002bb4b28a848 + software.amazon.awssdk.awscore.internal.defaultsmode.DefaultsModeResolver$$Lambda$835/0x000002bb4b28aa80 + software.amazon.awssdk.awscore.internal.defaultsmode.DefaultsModeConfiguration%20SAHA/.m2/repository/software/amazon/awssdk/aws-core/2.39.1/aws-core-2.39.1.jar + software.amazon.awssdk.http.SdkHttpConfigurationOption%20SAHA/.m2/repository/software/amazon/awssdk/http-client-spi/2.39.1/http-client-spi-2.39.1.jar + software.amazon.awssdk.http.TlsKeyManagersProvider%20SAHA/.m2/repository/software/amazon/awssdk/http-client-spi/2.39.1/http-client-spi-2.39.1.jar + software.amazon.awssdk.http.Protocol%20SAHA/.m2/repository/software/amazon/awssdk/http-client-spi/2.39.1/http-client-spi-2.39.1.jar + software.amazon.awssdk.http.ProtocolNegotiation%20SAHA/.m2/repository/software/amazon/awssdk/http-client-spi/2.39.1/http-client-spi-2.39.1.jar + software.amazon.awssdk.http.TlsTrustManagersProvider%20SAHA/.m2/repository/software/amazon/awssdk/http-client-spi/2.39.1/http-client-spi-2.39.1.jar + software.amazon.awssdk.internal.http.AbstractFileStoreTlsKeyManagersProvider%20SAHA/.m2/repository/software/amazon/awssdk/http-client-spi/2.39.1/http-client-spi-2.39.1.jar + software.amazon.awssdk.http.SystemPropertyTlsKeyManagersProvider%20SAHA/.m2/repository/software/amazon/awssdk/http-client-spi/2.39.1/http-client-spi-2.39.1.jar + software.amazon.awssdk.awscore.endpoint.DualstackEnabledProvider%20SAHA/.m2/repository/software/amazon/awssdk/aws-core/2.39.1/aws-core-2.39.1.jar + software.amazon.awssdk.awscore.endpoint.DualstackEnabledProvider$Builder%20SAHA/.m2/repository/software/amazon/awssdk/aws-core/2.39.1/aws-core-2.39.1.jar + software.amazon.awssdk.awscore.endpoint.DualstackEnabledProvider$Builder$$Lambda$836/0x000002bb4b28c740 + software.amazon.awssdk.awscore.endpoint.DualstackEnabledProvider$$Lambda$837/0x000002bb4b28c958 + software.amazon.awssdk.awscore.endpoint.FipsEnabledProvider%20SAHA/.m2/repository/software/amazon/awssdk/aws-core/2.39.1/aws-core-2.39.1.jar + software.amazon.awssdk.awscore.endpoint.FipsEnabledProvider$Builder%20SAHA/.m2/repository/software/amazon/awssdk/aws-core/2.39.1/aws-core-2.39.1.jar + software.amazon.awssdk.awscore.endpoint.FipsEnabledProvider$Builder$$Lambda$838/0x000002bb4b28cfa8 + software.amazon.awssdk.awscore.endpoint.FipsEnabledProvider$$Lambda$839/0x000002bb4b28d1c0 + software.amazon.awssdk.awscore.client.builder.AwsDefaultClientBuilder$$Lambda$840/0x000002bb4b28d3f8 + software.amazon.awssdk.awscore.client.builder.AwsDefaultClientBuilder$$Lambda$841/0x000002bb4b28d618 + software.amazon.awssdk.awscore.client.builder.AwsDefaultClientBuilder$$Lambda$842/0x000002bb4b28d838 + software.amazon.awssdk.awscore.client.builder.AwsDefaultClientBuilder$$Lambda$843/0x000002bb4b28da58 + software.amazon.awssdk.awscore.client.builder.AwsDefaultClientBuilder$$Lambda$844/0x000002bb4b28dc78 + software.amazon.awssdk.awscore.client.builder.AwsDefaultClientBuilder$$Lambda$845/0x000002bb4b28dea8 + software.amazon.awssdk.awscore.client.builder.AwsDefaultClientBuilder$$Lambda$846/0x000002bb4b28e0d8 + software.amazon.awssdk.awscore.client.builder.AwsDefaultClientBuilder$$Lambda$847/0x000002bb4b28e2f8 + software.amazon.awssdk.auth.credentials.DefaultCredentialsProvider%20SAHA/.m2/repository/software/amazon/awssdk/auth/2.39.1/auth-2.39.1.jar + software.amazon.awssdk.auth.credentials.DefaultCredentialsProvider$Builder%20SAHA/.m2/repository/software/amazon/awssdk/auth/2.39.1/auth-2.39.1.jar + java.lang.invoke.LambdaForm$DMH/0x000002bb4b290000 + java.lang.invoke.LambdaForm$DMH/0x000002bb4b290400 + software.amazon.awssdk.auth.credentials.DefaultCredentialsProvider$$Lambda$848/0x000002bb4b28ea60 + java.lang.invoke.LambdaForm$DMH/0x000002bb4b290800 + java.lang.invoke.LambdaForm$DMH/0x000002bb4b290c00 + java.lang.invoke.LambdaForm$MH/0x000002bb4b291000 + software.amazon.awssdk.auth.credentials.internal.LazyAwsCredentialsProvider%20SAHA/.m2/repository/software/amazon/awssdk/auth/2.39.1/auth-2.39.1.jar + software.amazon.awssdk.awscore.client.builder.AwsDefaultClientBuilder$$Lambda$849/0x000002bb4b28ef40 + software.amazon.awssdk.regions.ServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.internal.MetadataLoader%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.RegionMetadataProvider%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.ServiceMetadataProvider%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.PartitionMetadataProvider%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.GeneratedRegionMetadataProvider%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.RegionMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.regionmetadata.AfSouth1%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.regionmetadata.ApEast1%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.regionmetadata.ApEast2%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.regionmetadata.ApNortheast1%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.regionmetadata.ApNortheast2%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.regionmetadata.ApNortheast3%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.regionmetadata.ApSouth1%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.regionmetadata.ApSouth2%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.regionmetadata.ApSoutheast1%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.regionmetadata.ApSoutheast2%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.regionmetadata.ApSoutheast3%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.regionmetadata.ApSoutheast4%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.regionmetadata.ApSoutheast5%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.regionmetadata.ApSoutheast6%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.regionmetadata.ApSoutheast7%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.regionmetadata.AwsGlobal%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.regionmetadata.CaCentral1%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.regionmetadata.CaWest1%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.regionmetadata.EuCentral1%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.regionmetadata.EuCentral2%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.regionmetadata.EuNorth1%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.regionmetadata.EuSouth1%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.regionmetadata.EuSouth2%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.regionmetadata.EuWest1%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.regionmetadata.EuWest2%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.regionmetadata.EuWest3%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.regionmetadata.IlCentral1%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.regionmetadata.MeCentral1%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.regionmetadata.MeSouth1%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.regionmetadata.MxCentral1%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.regionmetadata.SaEast1%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.regionmetadata.UsEast1%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.regionmetadata.UsEast2%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.regionmetadata.UsWest1%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.regionmetadata.UsWest2%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.regionmetadata.AwsCnGlobal%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.regionmetadata.CnNorth1%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.regionmetadata.CnNorthwest1%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.regionmetadata.EuscDeEast1%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.regionmetadata.AwsIsoGlobal%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.regionmetadata.UsIsoEast1%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.regionmetadata.UsIsoWest1%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.regionmetadata.AwsIsoBGlobal%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.regionmetadata.UsIsobEast1%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.regionmetadata.UsIsobWest1%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.regionmetadata.AwsIsoEGlobal%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.regionmetadata.EuIsoeWest1%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.regionmetadata.AwsIsoFGlobal%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.regionmetadata.UsIsofEast1%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.regionmetadata.UsIsofSouth1%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.regionmetadata.AwsUsGovGlobal%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.regionmetadata.UsGovEast1%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.regionmetadata.UsGovWest1%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.GeneratedServiceMetadataProvider%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.AccessAnalyzerServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.ServicePartitionMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.internal.DefaultServicePartitionMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.ServiceEndpointKey%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.ServiceEndpointKey$Builder%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.ServiceEndpointKey$DefaultBuilder%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.EndpointTag%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.EndpointTag$EndpointTagCache%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.EndpointTag$EndpointTagCache$$Lambda$850/0x000002bb4b29a628 + software.amazon.awssdk.regions.servicemetadata.AccountServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.AcmServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.PartitionEndpointKey%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.PartitionEndpointKey$Builder%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.PartitionEndpointKey$DefaultBuilder%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.AcmPcaServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.AgreementMarketplaceServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.AirflowServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.AmplifyServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.AmplifybackendServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.AmplifyuibuilderServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.AossServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.ApiDetectiveServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.ApiEcrServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.ApiEcrPublicServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.ApiIotdeviceadvisorServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.ApiIotwirelessServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.ApiMediatailorServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.ApiPricingServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.ApiSagemakerServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.ApiTunnelingIotServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.ApigatewayServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.AppIntegrationsServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.AppconfigServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.AppconfigdataServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.AppflowServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.ApplicationAutoscalingServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.ApplicationinsightsServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.AppmeshServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.ApprunnerServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.Appstream2ServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.AppsyncServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.ApsServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.ArcZonalShiftServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.AthenaServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.AuditmanagerServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.AutoscalingServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.AutoscalingPlansServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.BackupServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.BackupGatewayServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.BatchServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.BedrockServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.BillingconductorServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.BraketServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.BudgetsServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.CasesServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.CassandraServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.CatalogMarketplaceServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.CeServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.ChimeServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.CleanroomsServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.Cloud9ServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.CloudcontrolapiServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.ClouddirectoryServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.CloudformationServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.CloudfrontServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.CloudhsmServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.Cloudhsmv2ServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.CloudsearchServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.CloudtrailServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.CloudtrailDataServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.CodeartifactServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.CodebuildServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.CodecatalystServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.CodecommitServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.CodedeployServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.CodeguruProfilerServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.CodeguruReviewerServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.CodepipelineServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.CodestarConnectionsServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.CodestarNotificationsServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.CognitoIdentityServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.CognitoIdpServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.CognitoSyncServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.ComprehendServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.ComprehendmedicalServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.ComputeOptimizerServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.ConfigServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.ConnectServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.ConnectCampaignsServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.ContactLensServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.ControltowerServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.CostOptimizationHubServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.CurServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.DataAtsIotServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.DataIotServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.DataJobsIotServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.DataMediastoreServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.DatabrewServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.DataexchangeServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.DatapipelineServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.DatasyncServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.DatazoneServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.DaxServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.DevicefarmServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.DevopsGuruServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.DirectconnectServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.DiscoveryServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.DlmServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.DmsServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.DocdbServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.DrsServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.DsServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.DynamodbServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.EbsServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.Ec2ServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.EcsServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.EdgeSagemakerServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.EksServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.EksAuthServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.ElasticacheServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.ElasticbeanstalkServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.ElasticfilesystemServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.ElasticloadbalancingServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.ElasticmapreduceServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.ElastictranscoderServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.EmailServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.EmrContainersServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.EmrServerlessServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.EntitlementMarketplaceServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.EsServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.EventsServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.EvidentlyServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.FinspaceServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.FinspaceApiServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.FirehoseServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.FmsServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.ForecastServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.ForecastqueryServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.FrauddetectorServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.FsxServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.GameliftServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.GameliftstreamsServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.GeoServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.GlacierServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.GlobalacceleratorServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.GlueServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.GrafanaServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.GreengrassServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.GroundstationServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.GuarddutyServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.HealthServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.HealthlakeServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.IamServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.IdentityChimeServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.IdentitystoreServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.ImportexportServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.IngestTimestreamServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.InspectorServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.Inspector2ServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.InternetmonitorServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.IotServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.IotanalyticsServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.IoteventsServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.IoteventsdataServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.IotfleetwiseServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.IotsecuredtunnelingServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.IotsitewiseServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.IotthingsgraphServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.IottwinmakerServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.IotwirelessServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.IvsServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.IvschatServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.IvsrealtimeServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.KafkaServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.KafkaconnectServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.KendraServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.KendraRankingServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.KinesisServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.KinesisanalyticsServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.KinesisvideoServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.KmsServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.LakeformationServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.LambdaServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.LicenseManagerServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.LicenseManagerLinuxSubscriptionsServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.LicenseManagerUserSubscriptionsServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.LightsailServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.LogsServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.LookoutequipmentServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.M2ServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.MachinelearningServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.Macie2ServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.ManagedblockchainServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.ManagedblockchainQueryServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.MarketplacecommerceanalyticsServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.MediaPipelinesChimeServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.MediaconnectServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.MediaconvertServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.MedialiveServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.MediapackageServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.MediapackageVodServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.Mediapackagev2ServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.MediastoreServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.MeetingsChimeServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.MemoryDbServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.MessagingChimeServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.MeteringMarketplaceServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.MetricsSagemakerServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.MghServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.MgnServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.MigrationhubOrchestratorServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.MigrationhubStrategyServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.MobileanalyticsServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.ModelsV2LexServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.ModelsLexServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.MonitoringServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.MqServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.MturkRequesterServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.NeptuneServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.NetworkFirewallServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.NetworkmanagerServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.NotificationsServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.NotificationsContactsServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.OamServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.OidcServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.OmicsServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.OrganizationsServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.OsisServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.OutpostsServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.ParticipantConnectServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.PersonalizeServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.PiServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.PinpointServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.PipesServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.PollyServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.PortalSsoServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.ProfileServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.ProtonServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.QbusinessServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.QueryTimestreamServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.QuicksightServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.RamServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.RbinServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.RdsServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.RdsDataServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.RedshiftServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.RedshiftServerlessServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.RekognitionServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.ResiliencehubServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.ResourceExplorer2ServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.ResourceGroupsServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.RolesanywhereServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.Route53ServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.Route53RecoveryControlConfigServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.Route53domainsServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.Route53profilesServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.Route53resolverServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.RumServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.RuntimeV2LexServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.RuntimeLexServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.RuntimeSagemakerServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.EnhancedS3ServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.ServiceMetadataConfiguration%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.ServiceMetadataConfiguration$Builder%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.EnhancedS3ServiceMetadata$$Lambda$851/0x000002bb4b2c1a00 + software.amazon.awssdk.regions.servicemetadata.EnhancedS3ServiceMetadata$$Lambda$852/0x000002bb4b2c1c18 + software.amazon.awssdk.regions.servicemetadata.EnhancedS3ServiceMetadata$$Lambda$853/0x000002bb4b2c1e38 + software.amazon.awssdk.regions.servicemetadata.S3ServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.S3ControlServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.S3OutpostsServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.SagemakerGeospatialServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.SavingsplansServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.SchedulerServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.SchemasServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.SdbServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.SecretsmanagerServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.SecurityhubServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.SecuritylakeServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.ServerlessrepoServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.ServicecatalogServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.ServicecatalogAppregistryServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.ServicediscoveryServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.ServicequotasServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.ShieldServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.SignerServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.SimspaceweaverServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.SmsVoiceServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.SnowballServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.SnsServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.SqsServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.SsmServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.SsmContactsServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.SsmIncidentsServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.SsmQuicksetupServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.SsmSapServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.SsoServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.StatesServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.StoragegatewayServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.StreamsDynamodbServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.StsServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.SupportServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.SupportappServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.SwfServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.SyntheticsServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.TaggingServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.TaxServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.TextractServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.ThinclientServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.TnbServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.TranscribeServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.TranscribestreamingServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.TransferServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.TranslateServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.TrustedadvisorServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.VerifiedpermissionsServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.VoiceChimeServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.VoiceidServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.VpcLatticeServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.WafServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.WafRegionalServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.Wafv2ServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.WellarchitectedServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.WisdomServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.WorkdocsServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.WorkmailServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.WorkspacesServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.WorkspacesWebServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.servicemetadata.XrayServiceMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.GeneratedPartitionMetadataProvider%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.PartitionMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.partitionmetadata.AwsPartitionMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.partitionmetadata.AwsCnPartitionMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.partitionmetadata.AwsUsGovPartitionMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.partitionmetadata.AwsIsoPartitionMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.partitionmetadata.AwsIsoBPartitionMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.partitionmetadata.AwsIsoEPartitionMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.partitionmetadata.AwsIsoFPartitionMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.partitionmetadata.AwsEuscPartitionMetadata%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.internal.util.ServiceMetadataUtils%20SAHA/.m2/repository/software/amazon/awssdk/regions/2.39.1/regions-2.39.1.jar + software.amazon.awssdk.regions.GeneratedPartitionMetadataProvider$$Lambda$854/0x000002bb4b2cce78 + java.util.regex.CharPredicates$$Lambda$855/0x000002bb4b1d36d8 + software.amazon.awssdk.awscore.internal.auth.Sigv4aSigningRegionSetProvider%20SAHA/.m2/repository/software/amazon/awssdk/aws-core/2.39.1/aws-core-2.39.1.jar + software.amazon.awssdk.awscore.internal.auth.Sigv4aSigningRegionSetProvider$Builder%20SAHA/.m2/repository/software/amazon/awssdk/aws-core/2.39.1/aws-core-2.39.1.jar + software.amazon.awssdk.awscore.internal.auth.Sigv4aSigningRegionSetProvider$Builder$$Lambda$856/0x000002bb4b2cd4d8 + software.amazon.awssdk.awscore.internal.auth.Sigv4aSigningRegionSetProvider$$Lambda$857/0x000002bb4b2cd6f0 + software.amazon.awssdk.auth.credentials.CredentialUtils%20SAHA/.m2/repository/software/amazon/awssdk/auth/2.39.1/auth-2.39.1.jar + software.amazon.awssdk.identity.spi.AwsCredentialsIdentity%20SAHA/.m2/repository/software/amazon/awssdk/identity-spi/2.39.1/identity-spi-2.39.1.jar + software.amazon.awssdk.auth.credentials.AwsCredentials%20SAHA/.m2/repository/software/amazon/awssdk/auth/2.39.1/auth-2.39.1.jar + software.amazon.awssdk.awscore.endpoint.AwsClientEndpointProvider$$Lambda$858/0x000002bb4b2cdf00 + software.amazon.awssdk.awscore.endpoint.AwsClientEndpointProvider$$Lambda$859/0x000002bb4b2ce138 + software.amazon.awssdk.awscore.endpoint.AwsClientEndpointProvider$$Lambda$860/0x000002bb4b2ce360 + software.amazon.awssdk.awscore.endpoint.AwsClientEndpointProvider$$Lambda$861/0x000002bb4b2ce580 + software.amazon.awssdk.awscore.endpoint.AwsClientEndpointProvider$$Lambda$862/0x000002bb4b2ce7a0 + software.amazon.awssdk.awscore.endpoint.AwsClientEndpointProvider$$Lambda$863/0x000002bb4b2ce9e0 + software.amazon.awssdk.awscore.endpoint.AwsClientEndpointProvider$$Lambda$864/0x000002bb4b2cec00 + software.amazon.awssdk.awscore.endpoint.AwsClientEndpointProvider$$Lambda$865/0x000002bb4b2cee20 + software.amazon.awssdk.awscore.endpoint.AwsClientEndpointProvider$$Lambda$866/0x000002bb4b2cf040 + software.amazon.awssdk.awscore.endpoint.AwsClientEndpointProvider$$Lambda$867/0x000002bb4b2cf260 + software.amazon.awssdk.awscore.endpoint.AwsClientEndpointProvider$$Lambda$868/0x000002bb4b2cf480 + software.amazon.awssdk.awscore.endpoint.AwsClientEndpointProvider$$Lambda$869/0x000002bb4b2cf6a0 + software.amazon.awssdk.awscore.endpoint.AwsClientEndpointProvider$$Lambda$870/0x000002bb4b2cf8e0 + software.amazon.awssdk.awscore.endpoint.AwsClientEndpointProvider$$Lambda$871/0x000002bb4b2cfb18 + software.amazon.awssdk.awscore.endpoint.AwsClientEndpointProvider$$Lambda$872/0x000002bb4b2cfd58 + software.amazon.awssdk.awscore.endpoint.AwsClientEndpointProvider$$Lambda$873/0x000002bb4b2d0000 + software.amazon.awssdk.awscore.endpoint.AwsClientEndpointProvider$$Lambda$874/0x000002bb4b2d0240 + software.amazon.awssdk.awscore.endpoint.AwsClientEndpointProvider$$Lambda$875/0x000002bb4b2d0480 + software.amazon.awssdk.awscore.endpoint.AwsClientEndpointProvider$$Lambda$876/0x000002bb4b2d06b8 + software.amazon.awssdk.utils.AttributeMap$Builder$$Lambda$877/0x000002bb4b2d08e8 + software.amazon.awssdk.regions.servicemetadata.EnhancedS3ServiceMetadata$$Lambda$878/0x000002bb4b2d0b18 + software.amazon.awssdk.regions.servicemetadata.EnhancedS3ServiceMetadata$$Lambda$879/0x000002bb4b2d0d38 + software.amazon.awssdk.regions.servicemetadata.EnhancedS3ServiceMetadata$$Lambda$880/0x000002bb4b2d0f70 + software.amazon.awssdk.utils.uri.SdkUri%20SAHA/.m2/repository/software/amazon/awssdk/utils/2.39.1/utils-2.39.1.jar + software.amazon.awssdk.utils.uri.SdkUri$$Lambda$881/0x000002bb4b2d13c8 + software.amazon.awssdk.utils.uri.internal.UriConstructorArgs%20SAHA/.m2/repository/software/amazon/awssdk/utils/2.39.1/utils-2.39.1.jar + software.amazon.awssdk.utils.uri.SdkUri$$Lambda$882/0x000002bb4b2d17d8 + software.amazon.awssdk.utils.cache.bounded.BoundedCache%20SAHA/.m2/repository/software/amazon/awssdk/utils/2.39.1/utils-2.39.1.jar + software.amazon.awssdk.utils.cache.bounded.BoundedCache$Builder%20SAHA/.m2/repository/software/amazon/awssdk/utils/2.39.1/utils-2.39.1.jar + software.amazon.awssdk.utils.uri.SdkUri$$Lambda$883/0x000002bb4b2d1e20 + software.amazon.awssdk.awscore.endpoint.AwsClientEndpointProvider$$Lambda$884/0x000002bb4b2d2040 + software.amazon.awssdk.awscore.endpoint.AwsClientEndpointProvider$$Lambda$885/0x000002bb4b2d2260 + software.amazon.awssdk.core.retry.RetryMode$Resolver%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.core.retry.RetryMode$Resolver$$Lambda$886/0x000002bb4b2d26a0 + software.amazon.awssdk.core.retry.RetryMode$Resolver$$Lambda$887/0x000002bb4b2d28d8 + software.amazon.awssdk.core.retry.RetryMode$Resolver$$Lambda$888/0x000002bb4b2d2af8 + software.amazon.awssdk.core.retry.RetryMode$Resolver$$Lambda$889/0x000002bb4b2d2d30 + software.amazon.awssdk.core.retry.RetryMode$Resolver$$Lambda$890/0x000002bb4b2d2f68 + software.amazon.awssdk.awscore.retry.AwsRetryStrategy%20SAHA/.m2/repository/software/amazon/awssdk/aws-core/2.39.1/aws-core-2.39.1.jar + software.amazon.awssdk.retries.internal.RetryStrategyDefaults%20SAHA/.m2/repository/software/amazon/awssdk/retries/2.39.1/retries-2.39.1.jar + software.amazon.awssdk.awscore.retry.AwsRetryStrategy$1%20SAHA/.m2/repository/software/amazon/awssdk/aws-core/2.39.1/aws-core-2.39.1.jar + software.amazon.awssdk.awscore.retry.AwsRetryStrategy$2%20SAHA/.m2/repository/software/amazon/awssdk/aws-core/2.39.1/aws-core-2.39.1.jar + software.amazon.awssdk.core.internal.retry.SdkDefaultRetryStrategy%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.core.internal.retry.SdkDefaultRetryStrategy$1%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.retries.DefaultRetryStrategy%20SAHA/.m2/repository/software/amazon/awssdk/retries/2.39.1/retries-2.39.1.jar + software.amazon.awssdk.retries.LegacyRetryStrategy%20SAHA/.m2/repository/software/amazon/awssdk/retries/2.39.1/retries-2.39.1.jar + software.amazon.awssdk.retries.LegacyRetryStrategy$Builder%20SAHA/.m2/repository/software/amazon/awssdk/retries/2.39.1/retries-2.39.1.jar + software.amazon.awssdk.retries.internal.DefaultAwareRetryStrategy%20SAHA/.m2/repository/software/amazon/awssdk/retries/2.39.1/retries-2.39.1.jar + software.amazon.awssdk.retries.internal.BaseRetryStrategy%20SAHA/.m2/repository/software/amazon/awssdk/retries/2.39.1/retries-2.39.1.jar + software.amazon.awssdk.retries.internal.DefaultLegacyRetryStrategy%20SAHA/.m2/repository/software/amazon/awssdk/retries/2.39.1/retries-2.39.1.jar + software.amazon.awssdk.retries.api.RetryToken%20SAHA/.m2/repository/software/amazon/awssdk/retries-spi/2.39.1/retries-spi-2.39.1.jar + software.amazon.awssdk.retries.api.TokenAcquisitionFailedException%20SAHA/.m2/repository/software/amazon/awssdk/retries-spi/2.39.1/retries-spi-2.39.1.jar + software.amazon.awssdk.retries.internal.DefaultAwareRetryStrategy$Builder%20SAHA/.m2/repository/software/amazon/awssdk/retries/2.39.1/retries-2.39.1.jar + software.amazon.awssdk.retries.internal.BaseRetryStrategy$Builder%20SAHA/.m2/repository/software/amazon/awssdk/retries/2.39.1/retries-2.39.1.jar + software.amazon.awssdk.retries.internal.DefaultLegacyRetryStrategy$Builder%20SAHA/.m2/repository/software/amazon/awssdk/retries/2.39.1/retries-2.39.1.jar + software.amazon.awssdk.retries.internal.BaseRetryStrategy$Builder$$Lambda$891/0x000002bb4b2d58f8 + software.amazon.awssdk.retries.internal.circuitbreaker.TokenBucketStore%20SAHA/.m2/repository/software/amazon/awssdk/retries/2.39.1/retries-2.39.1.jar + software.amazon.awssdk.retries.internal.circuitbreaker.TokenBucketStore$Builder%20SAHA/.m2/repository/software/amazon/awssdk/retries/2.39.1/retries-2.39.1.jar + software.amazon.awssdk.retries.internal.circuitbreaker.TokenBucket%20SAHA/.m2/repository/software/amazon/awssdk/retries/2.39.1/retries-2.39.1.jar + software.amazon.awssdk.retries.internal.circuitbreaker.TokenBucketStore$$Lambda$892/0x000002bb4b2d6160 + software.amazon.awssdk.utils.cache.lru.LruCache%20SAHA/.m2/repository/software/amazon/awssdk/utils/2.39.1/utils-2.39.1.jar + software.amazon.awssdk.utils.cache.lru.LruCache$Builder%20SAHA/.m2/repository/software/amazon/awssdk/utils/2.39.1/utils-2.39.1.jar + software.amazon.awssdk.retries.DefaultRetryStrategy$Legacy%20SAHA/.m2/repository/software/amazon/awssdk/retries/2.39.1/retries-2.39.1.jar + software.amazon.awssdk.retries.api.BackoffStrategy%20SAHA/.m2/repository/software/amazon/awssdk/retries-spi/2.39.1/retries-spi-2.39.1.jar + software.amazon.awssdk.retries.api.internal.backoff.ExponentialDelayWithJitter%20SAHA/.m2/repository/software/amazon/awssdk/retries-spi/2.39.1/retries-spi-2.39.1.jar + java.util.concurrent.ThreadLocalRandom + software.amazon.awssdk.retries.api.BackoffStrategy$$Lambda$893/0x000002bb4b2d6dc8 + software.amazon.awssdk.retries.api.internal.backoff.BackoffStrategiesConstants%20SAHA/.m2/repository/software/amazon/awssdk/retries-spi/2.39.1/retries-spi-2.39.1.jar + software.amazon.awssdk.utils.NumericUtils%20SAHA/.m2/repository/software/amazon/awssdk/utils/2.39.1/utils-2.39.1.jar + software.amazon.awssdk.retries.api.internal.backoff.ExponentialDelayWithHalfJitter%20SAHA/.m2/repository/software/amazon/awssdk/retries-spi/2.39.1/retries-spi-2.39.1.jar + software.amazon.awssdk.retries.api.BackoffStrategy$$Lambda$894/0x000002bb4b2d7600 + software.amazon.awssdk.core.internal.retry.SdkDefaultRetryStrategy$$Lambda$895/0x000002bb4b2d7818 + software.amazon.awssdk.core.internal.retry.SdkDefaultRetryStrategy$$Lambda$896/0x000002bb4b2d7a60 + software.amazon.awssdk.core.internal.retry.SdkDefaultRetryStrategy$$Lambda$897/0x000002bb4b2d7ca8 + software.amazon.awssdk.core.internal.retry.SdkDefaultRetryStrategy$$Lambda$898/0x000002bb4b2d8000 + software.amazon.awssdk.core.internal.retry.SdkDefaultRetrySetting%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.core.exception.RetryableException%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.core.exception.ApiCallAttemptTimeoutException%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.core.internal.retry.SdkDefaultRetryStrategy$$Lambda$899/0x000002bb4b2d8948 + software.amazon.awssdk.retries.api.RetryStrategy$Builder$$Lambda$900/0x000002bb4b2d8b78 + software.amazon.awssdk.core.internal.retry.SdkDefaultRetryStrategy$$Lambda$901/0x000002bb4b2d8dc8 + software.amazon.awssdk.utils.SystemSetting$$Lambda$902/0x000002bb4b2d9010 + software.amazon.awssdk.awscore.retry.AwsRetryStrategy$$Lambda$903/0x000002bb4b2d9248 + software.amazon.awssdk.core.client.builder.SdkDefaultClientBuilder$$Lambda$904/0x000002bb4b2d9490 + software.amazon.awssdk.utils.Either%20SAHA/.m2/repository/software/amazon/awssdk/utils/2.39.1/utils-2.39.1.jar + software.amazon.awssdk.core.client.builder.SdkDefaultClientBuilder$$Lambda$905/0x000002bb4b2d9aa8 + software.amazon.awssdk.core.client.builder.SdkDefaultClientBuilder$$Lambda$906/0x000002bb4b2d9ce8 + software.amazon.awssdk.core.internal.http.loader.SdkHttpServiceProviderChain$$Lambda$907/0x000002bb4b2d9f08 + software.amazon.awssdk.core.internal.http.loader.SdkHttpServiceProviderChain$$Lambda$908/0x000002bb4b2da140 + software.amazon.awssdk.core.internal.http.loader.SdkHttpServiceProviderChain$$Lambda$909/0x000002bb4b2da388 + software.amazon.awssdk.core.internal.http.loader.SystemPropertyHttpServiceProvider$$Lambda$910/0x000002bb4b2da5c0 + java.util.PriorityQueue + software.amazon.awssdk.core.internal.http.loader.ClasspathSdkHttpServiceProvider$$Lambda$911/0x000002bb4b2da800 + software.amazon.awssdk.core.internal.http.loader.ClasspathSdkHttpServiceProvider$$Lambda$912/0x000002bb4b2daa20 + software.amazon.awssdk.core.internal.http.loader.ClasspathSdkHttpServiceProvider$$Lambda$913/0x000002bb4b2dac60 + software.amazon.awssdk.http.apache.ApacheSdkHttpService%20SAHA/.m2/repository/software/amazon/awssdk/apache-client/2.39.1/apache-client-2.39.1.jar + software.amazon.awssdk.core.internal.http.loader.ClasspathSdkHttpServiceProvider$$Lambda$914/0x000002bb4b2db0b0 + software.amazon.awssdk.core.internal.http.loader.DefaultSdkHttpClientBuilder$$Lambda$915/0x000002bb4b2db2d0 + software.amazon.awssdk.http.apache.ApacheHttpClient%20SAHA/.m2/repository/software/amazon/awssdk/apache-client/2.39.1/apache-client-2.39.1.jar + software.amazon.awssdk.http.apache.ApacheHttpClient$Builder%20SAHA/.m2/repository/software/amazon/awssdk/apache-client/2.39.1/apache-client-2.39.1.jar + org.apache.http.protocol.HttpContext%20SAHA/.m2/repository/org/apache/httpcomponents/httpcore/4.4.16/httpcore-4.4.16.jar + org.apache.http.HttpMessage%20SAHA/.m2/repository/org/apache/httpcomponents/httpcore/4.4.16/httpcore-4.4.16.jar + org.apache.http.HttpRequest%20SAHA/.m2/repository/org/apache/httpcomponents/httpcore/4.4.16/httpcore-4.4.16.jar + org.apache.http.client.methods.HttpUriRequest%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.config.Lookup%20SAHA/.m2/repository/org/apache/httpcomponents/httpcore/4.4.16/httpcore-4.4.16.jar + org.apache.http.client.HttpClient%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + software.amazon.awssdk.http.apache.internal.impl.ConnectionManagerAwareHttpClient%20SAHA/.m2/repository/software/amazon/awssdk/apache-client/2.39.1/apache-client-2.39.1.jar + org.apache.http.conn.routing.HttpRoutePlanner%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + software.amazon.awssdk.http.SdkHttpResponse$Builder%20SAHA/.m2/repository/software/amazon/awssdk/http-client-spi/2.39.1/http-client-spi-2.39.1.jar + software.amazon.awssdk.http.Abortable%20SAHA/.m2/repository/software/amazon/awssdk/http-client-spi/2.39.1/http-client-spi-2.39.1.jar + software.amazon.awssdk.http.ExecutableHttpRequest%20SAHA/.m2/repository/software/amazon/awssdk/http-client-spi/2.39.1/http-client-spi-2.39.1.jar + org.apache.http.conn.ConnectionKeepAliveStrategy%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + software.amazon.awssdk.http.apache.ApacheHttpClient$DefaultBuilder%20SAHA/.m2/repository/software/amazon/awssdk/apache-client/2.39.1/apache-client-2.39.1.jar + software.amazon.awssdk.http.apache.ProxyConfiguration%20SAHA/.m2/repository/software/amazon/awssdk/apache-client/2.39.1/apache-client-2.39.1.jar + software.amazon.awssdk.http.apache.ProxyConfiguration$Builder%20SAHA/.m2/repository/software/amazon/awssdk/apache-client/2.39.1/apache-client-2.39.1.jar + software.amazon.awssdk.http.apache.ProxyConfiguration$DefaultClientProxyConfigurationBuilder%20SAHA/.m2/repository/software/amazon/awssdk/apache-client/2.39.1/apache-client-2.39.1.jar + software.amazon.awssdk.utils.ProxyConfigProvider%20SAHA/.m2/repository/software/amazon/awssdk/utils/2.39.1/utils-2.39.1.jar + software.amazon.awssdk.utils.internal.proxy.ProxySystemPropertyConfigProvider%20SAHA/.m2/repository/software/amazon/awssdk/utils/2.39.1/utils-2.39.1.jar + software.amazon.awssdk.utils.ProxySystemSetting%20SAHA/.m2/repository/software/amazon/awssdk/utils/2.39.1/utils-2.39.1.jar + software.amazon.awssdk.utils.internal.proxy.ProxySystemPropertyConfigProvider$$Lambda$916/0x000002bb4b2de458 + software.amazon.awssdk.utils.internal.proxy.ProxyEnvironmentVariableConfigProvider%20SAHA/.m2/repository/software/amazon/awssdk/utils/2.39.1/utils-2.39.1.jar + software.amazon.awssdk.utils.ProxyEnvironmentSetting%20SAHA/.m2/repository/software/amazon/awssdk/utils/2.39.1/utils-2.39.1.jar + software.amazon.awssdk.utils.internal.proxy.ProxyEnvironmentVariableConfigProvider$$Lambda$917/0x000002bb4b2dedb8 + software.amazon.awssdk.utils.internal.proxy.ProxyEnvironmentVariableConfigProvider$$Lambda$918/0x000002bb4b2deff0 + software.amazon.awssdk.http.apache.ProxyConfiguration$$Lambda$919/0x000002bb4b2df228 + software.amazon.awssdk.utils.internal.proxy.ProxyEnvironmentVariableConfigProvider$$Lambda$920/0x000002bb4b2df448 + software.amazon.awssdk.utils.internal.proxy.ProxyEnvironmentVariableConfigProvider$$Lambda$921/0x000002bb4b2df680 + software.amazon.awssdk.utils.internal.proxy.ProxyEnvironmentVariableConfigProvider$$Lambda$922/0x000002bb4b2df8c8 + software.amazon.awssdk.utils.internal.proxy.ProxyEnvironmentVariableConfigProvider$$Lambda$923/0x000002bb4b2dfb00 + software.amazon.awssdk.utils.internal.proxy.ProxyEnvironmentVariableConfigProvider$$Lambda$924/0x000002bb4b2dfd48 + software.amazon.awssdk.http.apache.ProxyConfiguration$$Lambda$925/0x000002bb4b2e0000 + software.amazon.awssdk.utils.http.SdkHttpUtils$$Lambda$926/0x000002bb4b2e0220 + software.amazon.awssdk.utils.internal.proxy.ProxyEnvironmentVariableConfigProvider$$Lambda$927/0x000002bb4b2e0458 + software.amazon.awssdk.utils.internal.proxy.ProxyEnvironmentVariableConfigProvider$$Lambda$928/0x000002bb4b2e0690 + software.amazon.awssdk.core.internal.http.loader.DefaultSdkHttpClientBuilder$$Lambda$929/0x000002bb4b2e08c8 + software.amazon.awssdk.http.apache.internal.impl.ApacheHttpRequestFactory%20SAHA/.m2/repository/software/amazon/awssdk/apache-client/2.39.1/apache-client-2.39.1.jar + org.apache.http.HttpEntity%20SAHA/.m2/repository/org/apache/httpcomponents/httpcore/4.4.16/httpcore-4.4.16.jar + org.apache.http.client.methods.Configurable%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.client.methods.HttpExecutionAware%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.client.methods.AbortableHttpRequest%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.message.AbstractHttpMessage%20SAHA/.m2/repository/org/apache/httpcomponents/httpcore/4.4.16/httpcore-4.4.16.jar + org.apache.http.client.methods.AbstractExecutionAwareRequest%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.client.methods.HttpRequestBase%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.HttpEntityEnclosingRequest%20SAHA/.m2/repository/org/apache/httpcomponents/httpcore/4.4.16/httpcore-4.4.16.jar + org.apache.http.client.methods.HttpEntityEnclosingRequestBase%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.client.methods.HttpHead%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.client.methods.HttpGet%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.client.methods.HttpDelete%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.client.methods.HttpOptions%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.client.methods.HttpPatch%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.client.methods.HttpPost%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.client.methods.HttpPut%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + software.amazon.awssdk.http.apache.ApacheHttpClient$ApacheConnectionManagerFactory%20SAHA/.m2/repository/software/amazon/awssdk/apache-client/2.39.1/apache-client-2.39.1.jar + org.apache.http.conn.SchemePortResolver%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.conn.HttpClientConnectionManager%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + java.security.GeneralSecurityException + java.security.NoSuchAlgorithmException + java.security.KeyException + java.security.KeyManagementException + org.apache.http.conn.ssl.SSLInitializationException%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + javax.net.ssl.HostnameVerifier + org.apache.http.conn.socket.ConnectionSocketFactory%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.impl.client.HttpClients%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.impl.client.CloseableHttpClient%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.impl.client.MinimalHttpClient%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.impl.client.HttpClientBuilder%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.conn.socket.LayeredConnectionSocketFactory%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.ConnectionReuseStrategy%20SAHA/.m2/repository/org/apache/httpcomponents/httpcore/4.4.16/httpcore-4.4.16.jar + org.apache.http.client.AuthenticationStrategy%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.client.UserTokenHandler%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.HttpRequestInterceptor%20SAHA/.m2/repository/org/apache/httpcomponents/httpcore/4.4.16/httpcore-4.4.16.jar + org.apache.http.HttpResponseInterceptor%20SAHA/.m2/repository/org/apache/httpcomponents/httpcore/4.4.16/httpcore-4.4.16.jar + org.apache.http.protocol.HttpProcessor%20SAHA/.m2/repository/org/apache/httpcomponents/httpcore/4.4.16/httpcore-4.4.16.jar + org.apache.http.impl.execchain.ClientExecChain%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.client.HttpRequestRetryHandler%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.client.RedirectStrategy%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.client.CookieStore%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.client.CredentialsProvider%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.impl.client.InternalHttpClient%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + software.amazon.awssdk.http.apache.ApacheHttpClient$ApacheConnectionManagerFactory$$Lambda$930/0x000002bb4b2e7530 + org.apache.http.conn.ssl.SSLConnectionSocketFactory%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + software.amazon.awssdk.http.apache.internal.conn.SdkTlsSocketFactory%20SAHA/.m2/repository/software/amazon/awssdk/apache-client/2.39.1/apache-client-2.39.1.jar + org.apache.http.conn.ssl.X509HostnameVerifier%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + javax.net.ssl.SSLException + javax.net.ssl.SSLHandshakeException + javax.net.ssl.SSLPeerUnverifiedException + java.net.Socket + javax.net.ssl.SSLSocket + software.amazon.awssdk.http.apache.internal.net.DelegateSslSocket%20SAHA/.m2/repository/software/amazon/awssdk/apache-client/2.39.1/apache-client-2.39.1.jar + software.amazon.awssdk.http.apache.internal.net.SdkSslSocket%20SAHA/.m2/repository/software/amazon/awssdk/apache-client/2.39.1/apache-client-2.39.1.jar + software.amazon.awssdk.http.apache.internal.net.InputShutdownCheckingSslSocket%20SAHA/.m2/repository/software/amazon/awssdk/apache-client/2.39.1/apache-client-2.39.1.jar + software.amazon.awssdk.http.apache.internal.net.DelegateSocket%20SAHA/.m2/repository/software/amazon/awssdk/apache-client/2.39.1/apache-client-2.39.1.jar + software.amazon.awssdk.http.apache.internal.net.SdkSocket%20SAHA/.m2/repository/software/amazon/awssdk/apache-client/2.39.1/apache-client-2.39.1.jar + org.apache.http.conn.ssl.AbstractVerifier%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.conn.ssl.AllowAllHostnameVerifier%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.conn.ssl.BrowserCompatHostnameVerifier%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.conn.ssl.StrictHostnameVerifier%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + java.util.regex.Pattern$SliceI + javax.net.ssl.KeyManager + sun.invoke.util.VerifyAccess$1 + software.amazon.awssdk.http.SystemPropertyTlsKeyManagersProvider$$Lambda$931/0x000002bb4b2e9e08 + javax.net.ssl.SSLContext + java.lang.invoke.VarHandleReferences$FieldStaticReadWrite + javax.net.ssl.SSLContextSpi + sun.security.rsa.SunRsaSign + sun.security.rsa.SunRsaSignEntries + sun.security.jca.ProviderConfig$3 + sun.security.jca.ProviderConfig$ProviderLoader + com.sun.security.sasl.gsskerb.JdkSASL + com.sun.security.sasl.gsskerb.JdkSASL$1 + com.sun.security.sasl.gsskerb.JdkSASL$ProviderService + java.security.InvalidParameterException + java.security.ProviderException + sun.security.mscapi.SunMSCAPI + sun.security.mscapi.SunMSCAPI$1 + sun.security.mscapi.SunMSCAPI$2 + sun.security.mscapi.SunMSCAPI$ProviderService + sun.security.mscapi.SunMSCAPI$ProviderServiceA + sun.security.smartcardio.SunPCSC + sun.security.smartcardio.SunPCSC$1 + sun.security.smartcardio.SunPCSC$ProviderService + sun.security.ec.SunEC + sun.security.ec.SunEC$ProviderService + sun.security.ec.SunEC$ProviderServiceA + sun.security.ec.SunEC$1 + sun.security.util.CurveDB + java.security.spec.ECField + java.security.spec.ECFieldFp + java.security.spec.EllipticCurve + java.security.spec.ECPoint + java.security.spec.AlgorithmParameterSpec + java.security.spec.ECParameterSpec + sun.security.util.NamedCurve + sun.security.util.DerEncoder + sun.security.util.DerOutputStream + sun.security.util.ByteArrayLexOrder + sun.security.util.ByteArrayTagOrder + sun.security.util.ObjectIdentifier + java.security.spec.ECFieldF2m + sun.security.ssl.SunJSSE + sun.security.ssl.SunJSSE$$Lambda$932/0x000002bb4b1d99b0 + sun.security.ssl.SSLContextImpl + sun.security.ssl.SSLContextImpl$AbstractTLSContext + sun.security.ssl.SSLContextImpl$CustomizedTLSContext + sun.security.ssl.SSLContextImpl$TLSContext + sun.security.ssl.SSLLogger + sun.security.ssl.ProtocolVersion + java.security.AlgorithmConstraints + sun.security.ssl.SSLAlgorithmConstraints + sun.security.util.AbstractAlgorithmConstraints + sun.security.util.DisabledAlgorithmConstraints + sun.security.util.AlgorithmDecomposer + sun.security.ssl.SSLAlgorithmDecomposer + java.util.regex.Pattern$LookBehindEndNode + java.util.regex.Pattern$NotBehind + sun.security.util.AbstractAlgorithmConstraints$1 + sun.security.util.DisabledAlgorithmConstraints$Constraints + sun.security.util.DisabledAlgorithmConstraints$Constraint + sun.security.util.DisabledAlgorithmConstraints$DisabledConstraint + sun.security.util.DisabledAlgorithmConstraints$KeySizeConstraint + sun.security.util.DisabledAlgorithmConstraints$Constraint$Operator + sun.security.util.DisabledAlgorithmConstraints$1 + sun.security.util.DisabledAlgorithmConstraints$jdkCAConstraint + sun.security.util.DisabledAlgorithmConstraints$UsageConstraint + sun.security.util.DisabledAlgorithmConstraints$Constraints$Holder + java.util.regex.Pattern$BnM + java.util.regex.Pattern$SliceS + sun.security.util.DisabledAlgorithmConstraints$DenyAfterConstraint + java.security.CryptoPrimitive + sun.security.ssl.CipherSuite + sun.security.ssl.SSLCipher + sun.security.ssl.CipherType + java.util.AbstractMap$SimpleImmutableEntry + sun.security.ssl.SSLCipher$ReadCipherGenerator + sun.security.ssl.SSLCipher$NullReadCipherGenerator + sun.security.ssl.SSLCipher$WriteCipherGenerator + sun.security.ssl.SSLCipher$NullWriteCipherGenerator + sun.security.ssl.SSLCipher$StreamReadCipherGenerator + sun.security.ssl.SSLCipher$StreamWriteCipherGenerator + javax.crypto.Cipher + javax.crypto.Cipher$Transform + sun.security.jca.ServiceId + sun.security.jca.ProviderList$ServiceList + sun.security.jca.ProviderList$ServiceList$1 + com.sun.crypto.provider.SunJCE + javax.crypto.JceSecurity + javax.crypto.JceSecurity$1 + java.nio.file.AccessMode + sun.nio.fs.WindowsFileSystemProvider$1 + sun.nio.fs.WindowsChannelFactory + sun.nio.fs.WindowsChannelFactory$1 + sun.nio.fs.WindowsChannelFactory$Flags + sun.nio.fs.Globs + java.util.regex.Pattern$SliceU + java.nio.file.PathMatcher + sun.nio.fs.WindowsFileSystem$2 + java.nio.file.Files$1 + java.nio.file.attribute.FileAttribute + sun.nio.fs.WindowsSecurityDescriptor + java.nio.channels.SeekableByteChannel + java.nio.channels.FileChannel + sun.nio.ch.FileChannelImpl + sun.nio.ch.NativeThreadSet + sun.nio.ch.FileDispatcher + sun.nio.ch.FileDispatcherImpl + sun.nio.ch.FileChannelImpl$Closer + java.nio.channels.Channels + sun.nio.ch.ChannelInputStream + javax.crypto.CryptoPermissions + javax.crypto.CryptoPolicyParser + java.io.StreamTokenizer + javax.crypto.CryptoPolicyParser$GrantEntry + javax.crypto.CryptoPolicyParser$CryptoPermissionEntry + java.util.Vector$1 + javax.crypto.CryptoPermission + javax.crypto.CryptoAllPermission + javax.crypto.CryptoAllPermissionCollection + javax.crypto.JceSecurity$IdentityWrapper + javax.crypto.JceSecurity$2 + java.security.AllPermissionCollection + javax.crypto.ProviderVerifier + javax.crypto.ProviderVerifier$1 + javax.crypto.ProviderVerifier$$Lambda$933/0x000002bb4b1e62e8 + javax.crypto.CipherSpi + com.sun.crypto.provider.ARCFOURCipher + sun.security.ssl.SSLCipher$T10BlockReadCipherGenerator + sun.security.ssl.SSLCipher$T10BlockWriteCipherGenerator + com.sun.crypto.provider.DESCipher + com.sun.crypto.provider.CipherCore + com.sun.crypto.provider.DESConstants + com.sun.crypto.provider.SymmetricCipher + com.sun.crypto.provider.DESCrypt + com.sun.crypto.provider.FeedbackCipher + com.sun.crypto.provider.ElectronicCodeBook + com.sun.crypto.provider.Padding + com.sun.crypto.provider.PKCS5Padding + com.sun.crypto.provider.CipherBlockChaining + sun.security.ssl.SSLCipher$T11BlockReadCipherGenerator + sun.security.ssl.SSLCipher$T11BlockWriteCipherGenerator + javax.crypto.JceSecurityManager + java.lang.SecurityManager$$Lambda$934/0x000002bb4b1e8c00 + java.lang.invoke.LambdaForm$DMH/0x000002bb4b2f0000 + java.lang.SecurityManager$$Lambda$935/0x000002bb4b1e8e38 + java.lang.SecurityManager$$Lambda$936/0x000002bb4b1e9088 + java.lang.SecurityManager$$Lambda$937/0x000002bb4b1e92c0 + java.lang.invoke.LambdaForm$DMH/0x000002bb4b2f0400 + java.lang.SecurityManager$$Lambda$938/0x000002bb4b1e94f8 + java.lang.SecurityManager$$Lambda$939/0x000002bb4b1e9720 + java.lang.SecurityManager$$Lambda$940/0x000002bb4b1e9968 + java.lang.SecurityManager$$Lambda$941/0x000002bb4b1e9ba0 + java.lang.SecurityManager$$Lambda$942/0x000002bb4b1e9dd0 + java.lang.SecurityManager$$Lambda$943/0x000002bb4b1ea018 + java.lang.SecurityManager$$Lambda$944/0x000002bb4b1ea250 + javax.crypto.JceSecurityManager$1 + com.sun.crypto.provider.DESedeCipher + com.sun.crypto.provider.DESedeCrypt + com.sun.crypto.provider.AESCipher + com.sun.crypto.provider.AESCipher$General + com.sun.crypto.provider.AESConstants + com.sun.crypto.provider.AESCrypt + sun.security.ssl.SSLCipher$T12GcmReadCipherGenerator + sun.security.ssl.SSLCipher$T12GcmWriteCipherGenerator + com.sun.crypto.provider.GaloisCounterMode + com.sun.crypto.provider.GaloisCounterMode$AESGCM + sun.security.ssl.SSLCipher$T13GcmReadCipherGenerator + sun.security.ssl.SSLCipher$T13GcmWriteCipherGenerator + sun.security.ssl.SSLCipher$T12CC20P1305ReadCipherGenerator + sun.security.ssl.SSLCipher$T13CC20P1305ReadCipherGenerator + sun.security.ssl.SSLCipher$T12CC20P1305WriteCipherGenerator + sun.security.ssl.SSLCipher$T13CC20P1305WriteCipherGenerator + com.sun.crypto.provider.ChaCha20Cipher + com.sun.crypto.provider.ChaCha20Cipher$ChaCha20Poly1305 + sun.security.ssl.SSLCipher$1 + sun.security.ssl.CipherSuite$HashAlg + sun.security.ssl.CipherSuite$MacAlg + sun.security.ssl.CipherSuite$KeyExchange + sun.security.ssl.NamedGroup$NamedGroupScheme + sun.security.ssl.NamedGroup$NamedGroupSpec + sun.security.ssl.NamedGroup$ECDHEScheme + sun.security.ssl.NamedGroup + sun.security.ssl.NamedGroup$FFDHEScheme + sun.security.ssl.NamedGroup$XDHScheme + sun.security.ssl.JsseJce + sun.security.ssl.Utilities + sun.security.ssl.SSLAlgorithmDecomposer$1 + sun.security.ssl.JsseJce$EcAvailability + java.security.SignatureSpi + java.security.Signature + jdk.internal.access.JavaSecuritySignatureAccess + java.security.Signature$1 + sun.security.ec.ECDSASignature + sun.security.ec.ECDSASignature$SHA1 + java.security.Key + java.security.InvalidKeyException + java.security.SignatureException + java.security.InvalidAlgorithmParameterException + java.security.interfaces.ECKey + sun.security.ec.ECOperations$IntermediateValueException + java.security.Signature$Delegate + sun.security.ec.ECDSASignature$RawECDSA + sun.security.ec.ECDSASignature$Raw + javax.crypto.KeyAgreement + java.security.KeyFactory + java.security.KeyFactorySpi + sun.security.ec.ECKeyFactory + java.security.NoSuchProviderException + java.security.spec.InvalidKeySpecException + java.security.PublicKey + javax.security.auth.Destroyable + java.security.PrivateKey + java.security.KeyPairGeneratorSpi + java.security.KeyPairGenerator + sun.security.ec.ECKeyPairGenerator + java.security.spec.InvalidParameterSpecException + sun.security.ec.point.Point + sun.security.util.ECUtil + java.security.AlgorithmParameters + java.security.AlgorithmParametersSpi + sun.security.util.ECParameters + sun.security.util.ECKeySizeParameterSpec + java.security.spec.NamedParameterSpec + java.security.spec.ECGenParameterSpec + java.security.KeyPairGenerator$Delegate + sun.security.ssl.SSLContextImpl$CustomizedSSLProtocols + sun.security.ssl.EphemeralKeyManager + sun.security.ssl.EphemeralKeyManager$EphemeralKeyPair + javax.net.ssl.SSLSessionContext + sun.security.ssl.SSLSessionContextImpl + sun.security.util.Cache + sun.security.util.MemoryCache + javax.net.ssl.X509KeyManager + javax.net.ssl.X509ExtendedKeyManager + sun.security.ssl.DummyX509KeyManager + javax.net.ssl.TrustManagerFactory + javax.net.ssl.TrustManagerFactory$1 + javax.net.ssl.TrustManagerFactorySpi + sun.security.ssl.TrustManagerFactoryImpl + sun.security.ssl.TrustManagerFactoryImpl$PKIXFactory + sun.security.ssl.TrustStoreManager + sun.security.ssl.TrustStoreManager$TrustAnchorManager + sun.security.ssl.TrustStoreManager$TrustStoreDescriptor + sun.security.util.FilePaths + sun.security.ssl.TrustStoreManager$TrustStoreDescriptor$1 + java.security.KeyStore + java.security.KeyStore$1 + java.security.KeyStoreSpi + sun.security.util.KeyStoreDelegator + sun.security.pkcs12.PKCS12KeyStore$DualFormatPKCS12 + sun.security.pkcs12.PKCS12KeyStore + sun.security.provider.JavaKeyStore + sun.security.provider.JavaKeyStore$JKS + sun.security.util.KeyStoreDelegator$$Lambda$945/0x000002bb4b1f7dc0 + sun.security.action.OpenFileInputStreamAction + sun.security.util.DerValue + sun.security.util.DerInputStream + sun.security.provider.JavaKeyStore$TrustedCertEntry + java.security.cert.CertificateFactory + java.security.cert.CertificateFactorySpi + sun.security.provider.X509Factory + sun.security.util.IOUtils + sun.security.util.Cache$EqualByteArray + java.security.cert.X509Extension + java.security.cert.X509Certificate + sun.security.x509.X509CertImpl + sun.security.x509.AlgorithmId + sun.security.x509.CertAttrSet + sun.security.x509.X509CertInfo + sun.security.x509.CertificateVersion + sun.security.x509.CertificateSerialNumber + sun.security.x509.SerialNumber + sun.security.x509.CertificateAlgorithmId + sun.security.x509.GeneralNameInterface + sun.security.x509.X500Name + sun.security.x509.X500Name$1 + javax.security.auth.x500.X500Principal + sun.security.x509.RDN + sun.security.x509.AVA + sun.security.x509.CertificateValidity + sun.security.x509.CertificateX509Key + sun.security.x509.X509Key + sun.security.util.BitArray + java.security.spec.KeySpec + java.security.spec.EncodedKeySpec + java.security.spec.X509EncodedKeySpec + jdk.internal.access.JavaSecuritySpecAccess + java.security.spec.EncodedKeySpec$1 + sun.security.rsa.RSAKeyFactory + sun.security.rsa.RSAKeyFactory$Legacy + java.security.spec.RSAPublicKeySpec + java.security.spec.RSAPrivateKeySpec + java.security.spec.RSAPrivateCrtKeySpec + java.security.spec.PKCS8EncodedKeySpec + sun.security.rsa.RSAUtil$KeyType + java.security.spec.PSSParameterSpec + java.security.interfaces.RSAKey + java.security.interfaces.RSAPublicKey + sun.security.rsa.RSAPublicKeyImpl + sun.security.rsa.RSAUtil + sun.security.x509.CertificateExtensions + java.security.cert.Extension + sun.security.x509.Extension + sun.security.x509.OIDMap + sun.security.x509.PKIXExtensions + sun.security.x509.OIDMap$OIDInfo + sun.security.x509.SubjectKeyIdentifierExtension + sun.security.x509.KeyIdentifier + sun.security.x509.BasicConstraintsExtension + sun.security.x509.AuthorityKeyIdentifierExtension + sun.security.x509.GeneralNames + sun.security.x509.KeyUsageExtension + sun.security.x509.X509AttributeName + sun.security.util.MemoryCache$CacheEntry + sun.security.util.MemoryCache$SoftCacheEntry + sun.security.jca.JCAUtil + jdk.internal.event.X509CertificateEvent + jdk.internal.event.EventHelper + java.lang.System$Logger$Level + jdk.internal.event.EventHelper$ThreadTrackHolder + jdk.internal.misc.ThreadTracker + jdk.internal.misc.ThreadTracker$ThreadRef + jdk.internal.logger.LazyLoggers + jdk.internal.logger.LazyLoggers$1 + jdk.internal.logger.LazyLoggers$LazyLoggerFactories + java.lang.System$LoggerFinder$$Lambda$946/0x000002bb4b2fb5d0 + jdk.internal.logger.LoggerFinderLoader + jdk.internal.logger.LoggerFinderLoader$TemporaryLoggerFinder + sun.util.logging.PlatformLogger$ConfigurableBridge$LoggerConfiguration + sun.util.logging.internal.LoggingProviderImpl$JULWrapper + sun.security.x509.GeneralName + java.security.interfaces.ECPublicKey + sun.security.ec.ECPublicKeyImpl + sun.security.x509.CertificatePoliciesExtension + sun.security.x509.PolicyInformation + sun.security.x509.CertificatePolicyId + java.security.cert.PolicyQualifierInfo + jdk.internal.reflect.GeneratedConstructorAccessor9 + sun.security.x509.CRLDistributionPointsExtension + sun.security.x509.DistributionPoint + sun.security.x509.URIName + sun.security.x509.DNSName + jdk.internal.reflect.GeneratedConstructorAccessor10 + jdk.internal.reflect.GeneratedConstructorAccessor11 + sun.security.x509.NetscapeCertTypeExtension + sun.security.x509.NetscapeCertTypeExtension$MapEntry + sun.security.x509.SubjectAlternativeNameExtension + sun.security.x509.RFC822Name + sun.security.x509.IssuerAlternativeNameExtension + jdk.internal.reflect.GeneratedConstructorAccessor12 + sun.security.x509.PrivateKeyUsageExtension + java.security.cert.CertificateException + jdk.internal.reflect.GeneratedConstructorAccessor13 + sun.security.x509.AuthorityInfoAccessExtension + sun.security.x509.AccessDescription + sun.security.x509.ExtendedKeyUsageExtension + sun.security.validator.TrustStoreUtil + javax.net.ssl.TrustManager + javax.net.ssl.X509TrustManager + javax.net.ssl.X509ExtendedTrustManager + sun.security.ssl.X509TrustManagerImpl + org.apache.http.conn.ssl.DefaultHostnameVerifier%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + java.security.cert.CertificateParsingException + java.net.UnknownHostException + javax.naming.NamingException + javax.naming.InvalidNameException + org.apache.http.conn.util.PublicSuffixMatcherLoader%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.util.Args%20SAHA/.m2/repository/org/apache/httpcomponents/httpcore/4.4.16/httpcore-4.4.16.jar + org.apache.http.conn.util.PublicSuffixListParser%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.Consts%20SAHA/.m2/repository/org/apache/httpcomponents/httpcore/4.4.16/httpcore-4.4.16.jar + org.apache.http.conn.util.DomainType%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.conn.util.PublicSuffixList%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.conn.util.PublicSuffixMatcher%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + java.util.concurrent.ConcurrentHashMap$TreeNode + java.util.concurrent.ConcurrentHashMap$TreeBin + javax.net.SocketFactory + javax.net.ssl.SSLSocketFactory + sun.security.ssl.SSLSocketFactoryImpl + org.apache.http.pool.ConnPoolControl%20SAHA/.m2/repository/org/apache/httpcomponents/httpcore/4.4.16/httpcore-4.4.16.jar + org.apache.http.impl.conn.PoolingHttpClientConnectionManager%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.conn.HttpClientConnectionOperator%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.pool.ConnFactory%20SAHA/.m2/repository/org/apache/httpcomponents/httpcore/4.4.16/httpcore-4.4.16.jar + org.apache.http.pool.PoolEntryCallback%20SAHA/.m2/repository/org/apache/httpcomponents/httpcore/4.4.16/httpcore-4.4.16.jar + org.apache.http.pool.PoolEntry%20SAHA/.m2/repository/org/apache/httpcomponents/httpcore/4.4.16/httpcore-4.4.16.jar + org.apache.http.impl.conn.CPoolEntry%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.concurrent.Cancellable%20SAHA/.m2/repository/org/apache/httpcomponents/httpcore/4.4.16/httpcore-4.4.16.jar + org.apache.http.conn.ConnectionRequest%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + java.util.concurrent.TimeoutException + java.io.InterruptedIOException + org.apache.http.conn.ConnectTimeoutException%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.conn.ConnectionPoolTimeoutException%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.config.RegistryBuilder%20SAHA/.m2/repository/org/apache/httpcomponents/httpcore/4.4.16/httpcore-4.4.16.jar + org.apache.http.conn.socket.PlainConnectionSocketFactory%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.util.TextUtils%20SAHA/.m2/repository/org/apache/httpcomponents/httpcore/4.4.16/httpcore-4.4.16.jar + org.apache.http.config.Registry%20SAHA/.m2/repository/org/apache/httpcomponents/httpcore/4.4.16/httpcore-4.4.16.jar + org.apache.http.impl.conn.DefaultSchemePortResolver%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.conn.UnsupportedSchemeException%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.impl.conn.DefaultHttpClientConnectionOperator%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.conn.DnsResolver%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + java.net.SocketTimeoutException + java.net.ConnectException + java.net.NoRouteToHostException + org.apache.http.conn.HttpHostConnectException%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.impl.conn.SystemDefaultDnsResolver%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.impl.conn.PoolingHttpClientConnectionManager$ConfigData%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.pool.ConnPool%20SAHA/.m2/repository/org/apache/httpcomponents/httpcore/4.4.16/httpcore-4.4.16.jar + org.apache.http.pool.AbstractConnPool%20SAHA/.m2/repository/org/apache/httpcomponents/httpcore/4.4.16/httpcore-4.4.16.jar + org.apache.http.impl.conn.CPool%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.pool.RouteSpecificPool%20SAHA/.m2/repository/org/apache/httpcomponents/httpcore/4.4.16/httpcore-4.4.16.jar + org.apache.http.pool.AbstractConnPool$1%20SAHA/.m2/repository/org/apache/httpcomponents/httpcore/4.4.16/httpcore-4.4.16.jar + org.apache.http.impl.conn.PoolingHttpClientConnectionManager$InternalConnectionFactory%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.conn.HttpConnectionFactory%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.impl.conn.ManagedHttpClientConnectionFactory%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.io.HttpMessageWriterFactory%20SAHA/.m2/repository/org/apache/httpcomponents/httpcore/4.4.16/httpcore-4.4.16.jar + org.apache.http.io.HttpMessageParserFactory%20SAHA/.m2/repository/org/apache/httpcomponents/httpcore/4.4.16/httpcore-4.4.16.jar + org.apache.http.entity.ContentLengthStrategy%20SAHA/.m2/repository/org/apache/httpcomponents/httpcore/4.4.16/httpcore-4.4.16.jar + org.apache.http.HttpConnection%20SAHA/.m2/repository/org/apache/httpcomponents/httpcore/4.4.16/httpcore-4.4.16.jar + org.apache.http.HttpClientConnection%20SAHA/.m2/repository/org/apache/httpcomponents/httpcore/4.4.16/httpcore-4.4.16.jar + org.apache.http.HttpInetConnection%20SAHA/.m2/repository/org/apache/httpcomponents/httpcore/4.4.16/httpcore-4.4.16.jar + org.apache.http.conn.ManagedHttpClientConnection%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.impl.BHttpConnectionBase%20SAHA/.m2/repository/org/apache/httpcomponents/httpcore/4.4.16/httpcore-4.4.16.jar + org.apache.http.impl.DefaultBHttpClientConnection%20SAHA/.m2/repository/org/apache/httpcomponents/httpcore/4.4.16/httpcore-4.4.16.jar + org.apache.http.impl.conn.DefaultManagedHttpClientConnection%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.impl.io.DefaultHttpRequestWriterFactory%20SAHA/.m2/repository/org/apache/httpcomponents/httpcore/4.4.16/httpcore-4.4.16.jar + org.apache.http.message.LineFormatter%20SAHA/.m2/repository/org/apache/httpcomponents/httpcore/4.4.16/httpcore-4.4.16.jar + org.apache.http.io.HttpMessageWriter%20SAHA/.m2/repository/org/apache/httpcomponents/httpcore/4.4.16/httpcore-4.4.16.jar + org.apache.http.message.BasicLineFormatter%20SAHA/.m2/repository/org/apache/httpcomponents/httpcore/4.4.16/httpcore-4.4.16.jar + org.apache.http.impl.conn.DefaultHttpResponseParserFactory%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.message.LineParser%20SAHA/.m2/repository/org/apache/httpcomponents/httpcore/4.4.16/httpcore-4.4.16.jar + org.apache.http.HttpResponseFactory%20SAHA/.m2/repository/org/apache/httpcomponents/httpcore/4.4.16/httpcore-4.4.16.jar + org.apache.http.io.HttpMessageParser%20SAHA/.m2/repository/org/apache/httpcomponents/httpcore/4.4.16/httpcore-4.4.16.jar + org.apache.http.message.BasicLineParser%20SAHA/.m2/repository/org/apache/httpcomponents/httpcore/4.4.16/httpcore-4.4.16.jar + org.apache.http.NameValuePair%20SAHA/.m2/repository/org/apache/httpcomponents/httpcore/4.4.16/httpcore-4.4.16.jar + org.apache.http.Header%20SAHA/.m2/repository/org/apache/httpcomponents/httpcore/4.4.16/httpcore-4.4.16.jar + org.apache.http.ProtocolVersion%20SAHA/.m2/repository/org/apache/httpcomponents/httpcore/4.4.16/httpcore-4.4.16.jar + org.apache.http.HttpVersion%20SAHA/.m2/repository/org/apache/httpcomponents/httpcore/4.4.16/httpcore-4.4.16.jar + org.apache.http.ParseException%20SAHA/.m2/repository/org/apache/httpcomponents/httpcore/4.4.16/httpcore-4.4.16.jar + org.apache.http.StatusLine%20SAHA/.m2/repository/org/apache/httpcomponents/httpcore/4.4.16/httpcore-4.4.16.jar + org.apache.http.RequestLine%20SAHA/.m2/repository/org/apache/httpcomponents/httpcore/4.4.16/httpcore-4.4.16.jar + org.apache.http.impl.DefaultHttpResponseFactory%20SAHA/.m2/repository/org/apache/httpcomponents/httpcore/4.4.16/httpcore-4.4.16.jar + org.apache.http.ReasonPhraseCatalog%20SAHA/.m2/repository/org/apache/httpcomponents/httpcore/4.4.16/httpcore-4.4.16.jar + org.apache.http.HttpResponse%20SAHA/.m2/repository/org/apache/httpcomponents/httpcore/4.4.16/httpcore-4.4.16.jar + org.apache.http.impl.EnglishReasonPhraseCatalog%20SAHA/.m2/repository/org/apache/httpcomponents/httpcore/4.4.16/httpcore-4.4.16.jar + org.apache.http.impl.entity.LaxContentLengthStrategy%20SAHA/.m2/repository/org/apache/httpcomponents/httpcore/4.4.16/httpcore-4.4.16.jar + org.apache.http.HttpException%20SAHA/.m2/repository/org/apache/httpcomponents/httpcore/4.4.16/httpcore-4.4.16.jar + org.apache.http.ProtocolException%20SAHA/.m2/repository/org/apache/httpcomponents/httpcore/4.4.16/httpcore-4.4.16.jar + org.apache.http.impl.entity.StrictContentLengthStrategy%20SAHA/.m2/repository/org/apache/httpcomponents/httpcore/4.4.16/httpcore-4.4.16.jar + org.apache.http.config.SocketConfig%20SAHA/.m2/repository/org/apache/httpcomponents/httpcore/4.4.16/httpcore-4.4.16.jar + org.apache.http.config.SocketConfig$Builder%20SAHA/.m2/repository/org/apache/httpcomponents/httpcore/4.4.16/httpcore-4.4.16.jar + org.apache.http.protocol.HttpRequestExecutor%20SAHA/.m2/repository/org/apache/httpcomponents/httpcore/4.4.16/httpcore-4.4.16.jar + software.amazon.awssdk.http.apache.internal.conn.SdkConnectionKeepAliveStrategy%20SAHA/.m2/repository/software/amazon/awssdk/apache-client/2.39.1/apache-client-2.39.1.jar + software.amazon.awssdk.http.apache.internal.conn.ClientConnectionManagerFactory%20SAHA/.m2/repository/software/amazon/awssdk/apache-client/2.39.1/apache-client-2.39.1.jar + software.amazon.awssdk.http.apache.internal.conn.ClientConnectionManagerFactory$DelegatingHttpClientConnectionManager%20SAHA/.m2/repository/software/amazon/awssdk/apache-client/2.39.1/apache-client-2.39.1.jar + software.amazon.awssdk.http.apache.internal.conn.ClientConnectionManagerFactory$InstrumentedHttpClientConnectionManager%20SAHA/.m2/repository/software/amazon/awssdk/apache-client/2.39.1/apache-client-2.39.1.jar + software.amazon.awssdk.http.apache.internal.conn.IdleConnectionReaper%20SAHA/.m2/repository/software/amazon/awssdk/apache-client/2.39.1/apache-client-2.39.1.jar + software.amazon.awssdk.http.apache.internal.conn.IdleConnectionReaper$$Lambda$947/0x000002bb4b309440 + software.amazon.awssdk.http.apache.internal.conn.IdleConnectionReaper$$Lambda$948/0x000002bb4b309658 + java.util.concurrent.Executors$FinalizableDelegatedExecutorService + software.amazon.awssdk.http.apache.internal.conn.IdleConnectionReaper$ReaperTask%20SAHA/.m2/repository/software/amazon/awssdk/apache-client/2.39.1/apache-client-2.39.1.jar + software.amazon.awssdk.http.apache.internal.impl.ApacheSdkHttpClient%20SAHA/.m2/repository/software/amazon/awssdk/apache-client/2.39.1/apache-client-2.39.1.jar + org.apache.http.impl.DefaultConnectionReuseStrategy%20SAHA/.m2/repository/org/apache/httpcomponents/httpcore/4.4.16/httpcore-4.4.16.jar + org.apache.http.impl.client.DefaultClientConnectionReuseStrategy%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.TokenIterator%20SAHA/.m2/repository/org/apache/httpcomponents/httpcore/4.4.16/httpcore-4.4.16.jar + org.apache.http.HeaderIterator%20SAHA/.m2/repository/org/apache/httpcomponents/httpcore/4.4.16/httpcore-4.4.16.jar + org.apache.http.impl.client.AuthenticationStrategyImpl%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.impl.client.TargetAuthenticationStrategy%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.auth.MalformedChallengeException%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.client.AuthCache%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.impl.client.ProxyAuthenticationStrategy%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.impl.client.DefaultUserTokenHandler%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.protocol.ImmutableHttpProcessor%20SAHA/.m2/repository/org/apache/httpcomponents/httpcore/4.4.16/httpcore-4.4.16.jar + org.apache.http.protocol.RequestTargetHost%20SAHA/.m2/repository/org/apache/httpcomponents/httpcore/4.4.16/httpcore-4.4.16.jar + org.apache.http.protocol.RequestUserAgent%20SAHA/.m2/repository/org/apache/httpcomponents/httpcore/4.4.16/httpcore-4.4.16.jar + org.apache.http.impl.execchain.MainClientExec%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.conn.routing.HttpRouteDirector%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.impl.execchain.TunnelRefusedException%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.impl.conn.ConnectionShutdownException%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.impl.execchain.RequestAbortedException%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.client.NonRepeatableRequestException%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.client.methods.CloseableHttpResponse%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.conn.routing.RouteInfo%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.impl.auth.HttpAuthenticator%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.auth.AuthenticationException%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.conn.routing.BasicRouteDirector%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.protocol.HttpProcessorBuilder%20SAHA/.m2/repository/org/apache/httpcomponents/httpcore/4.4.16/httpcore-4.4.16.jar + org.apache.http.client.protocol.RequestDefaultHeaders%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.protocol.RequestContent%20SAHA/.m2/repository/org/apache/httpcomponents/httpcore/4.4.16/httpcore-4.4.16.jar + org.apache.http.client.protocol.RequestClientConnControl%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.client.protocol.RequestExpectContinue%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.protocol.ChainBuilder%20SAHA/.m2/repository/org/apache/httpcomponents/httpcore/4.4.16/httpcore-4.4.16.jar + org.apache.http.client.protocol.RequestAddCookies%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.client.protocol.RequestAuthCache%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.client.protocol.ResponseProcessCookies%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.cookie.MalformedCookieException%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.impl.execchain.ProtocolExec%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.auth.Credentials%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.impl.conn.DefaultRoutePlanner%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.auth.AuthSchemeFactory%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.auth.AuthSchemeProvider%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.impl.auth.BasicSchemeFactory%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.auth.AuthScheme%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.impl.auth.DigestSchemeFactory%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.impl.auth.NTLMSchemeFactory%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.impl.auth.SPNegoSchemeFactory%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.impl.auth.KerberosSchemeFactory%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.impl.client.CookieSpecRegistries%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.cookie.CookieSpecProvider%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.impl.cookie.DefaultCookieSpecProvider%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.cookie.CookieAttributeHandler%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.cookie.CommonCookieAttributeHandler%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.impl.cookie.BasicPathHandler%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.impl.cookie.DefaultCookieSpecProvider$1%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.cookie.CookieSpec%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.impl.cookie.DefaultCookieSpecProvider$CompatibilityLevel%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.impl.cookie.RFC6265CookieSpecProvider%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.impl.cookie.RFC6265CookieSpecProvider$CompatibilityLevel%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.impl.cookie.NetscapeDraftSpecProvider%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.impl.cookie.IgnoreSpecProvider%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.impl.client.BasicCookieStore%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.cookie.CookieIdentityComparator%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.impl.client.BasicCredentialsProvider%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.impl.client.HttpClientBuilder$2%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.client.ClientProtocolException%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.conn.ClientConnectionManager%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.client.config.RequestConfig%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + org.apache.http.client.config.RequestConfig$Builder%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + software.amazon.awssdk.http.apache.internal.ApacheHttpRequestConfig%20SAHA/.m2/repository/software/amazon/awssdk/apache-client/2.39.1/apache-client-2.39.1.jar + software.amazon.awssdk.http.apache.internal.ApacheHttpRequestConfig$Builder%20SAHA/.m2/repository/software/amazon/awssdk/apache-client/2.39.1/apache-client-2.39.1.jar + software.amazon.awssdk.http.apache.internal.DefaultConfiguration%20SAHA/.m2/repository/software/amazon/awssdk/apache-client/2.39.1/apache-client-2.39.1.jar + software.amazon.awssdk.core.internal.http.loader.DefaultSdkHttpClientBuilder$$Lambda$949/0x000002bb4b313d70 + software.amazon.awssdk.core.client.builder.SdkDefaultClientBuilder$$Lambda$950/0x000002bb4b313f88 + software.amazon.awssdk.core.client.builder.SdkDefaultClientBuilder$$Lambda$951/0x000002bb4b3141a8 + software.amazon.awssdk.core.internal.interceptor.HttpChecksumValidationInterceptor%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.core.internal.interceptor.HttpChecksumValidationInterceptor$$Lambda$952/0x000002bb4b3148d8 + sun.net.ProgressMonitor + sun.net.ProgressMeteringPolicy + sun.net.DefaultProgressMeteringPolicy + software.amazon.lambda.powertools.tracing.internal.TracingUserAgentInterceptor + software.amazon.lambda.powertools.common.internal.UserAgentConfigurator%20SAHA/.m2/repository/software/amazon/lambda/powertools-common/2.8.0/powertools-common-2.8.0.jar + com.amazonaws.xray.interceptors.TracingInterceptor%20SAHA/.m2/repository/com/amazonaws/aws-xray-recorder-sdk-aws-sdk-v2/2.20.0/aws-xray-recorder-sdk-aws-sdk-v2-2.20.0.jar + com.amazonaws.xray.handlers.config.AWSServiceHandlerManifest%20SAHA/.m2/repository/com/amazonaws/aws-xray-recorder-sdk-aws-sdk-core/2.20.0/aws-xray-recorder-sdk-aws-sdk-core-2.20.0.jar + com.amazonaws.xray.handlers.config.AWSOperationHandlerManifest%20SAHA/.m2/repository/com/amazonaws/aws-xray-recorder-sdk-aws-sdk-core/2.20.0/aws-xray-recorder-sdk-aws-sdk-core-2.20.0.jar + sun.reflect.generics.repository.FieldRepository + com.fasterxml.jackson.databind.deser.std.StdKeyDeserializer$StringKD%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.fasterxml.jackson.databind.deser.ContextualKeyDeserializer%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + com.amazonaws.xray.handlers.config.AWSOperationHandler%20SAHA/.m2/repository/com/amazonaws/aws-xray-recorder-sdk-aws-sdk-core/2.20.0/aws-xray-recorder-sdk-aws-sdk-core-2.20.0.jar + com.amazonaws.xray.handlers.config.AWSOperationHandlerRequestDescriptor%20SAHA/.m2/repository/com/amazonaws/aws-xray-recorder-sdk-aws-sdk-core/2.20.0/aws-xray-recorder-sdk-aws-sdk-core-2.20.0.jar + com.amazonaws.xray.handlers.config.AWSOperationHandlerResponseDescriptor%20SAHA/.m2/repository/com/amazonaws/aws-xray-recorder-sdk-aws-sdk-core/2.20.0/aws-xray-recorder-sdk-aws-sdk-core-2.20.0.jar + com.fasterxml.jackson.databind.deser.impl.JavaUtilCollectionsDeserializers%20SAHA/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.20.1/jackson-databind-2.20.1.jar + jdk.internal.reflect.GeneratedConstructorAccessor14 + jdk.internal.reflect.UnsafeBooleanFieldAccessorImpl + jdk.internal.reflect.GeneratedConstructorAccessor15 + software.amazon.awssdk.core.client.builder.SdkDefaultClientBuilder$$Lambda$953/0x000002bb4b316468 + software.amazon.awssdk.core.client.builder.SdkDefaultClientBuilder$$Lambda$954/0x000002bb4b316688 + software.amazon.awssdk.core.client.builder.SdkDefaultClientBuilder$$Lambda$955/0x000002bb4b3168a8 + software.amazon.awssdk.core.client.builder.SdkDefaultClientBuilder$$Lambda$956/0x000002bb4b316ac0 + software.amazon.awssdk.core.client.builder.SdkDefaultClientBuilder$$Lambda$957/0x000002bb4b316cd8 + software.amazon.awssdk.core.client.builder.SdkDefaultClientBuilder$$Lambda$958/0x000002bb4b316ef8 + software.amazon.awssdk.core.client.builder.SdkDefaultClientBuilder$$Lambda$959/0x000002bb4b317130 + software.amazon.awssdk.core.client.builder.SdkDefaultClientBuilder$$Lambda$960/0x000002bb4b317368 + software.amazon.awssdk.core.client.builder.SdkDefaultClientBuilder$$Lambda$961/0x000002bb4b3175a0 + software.amazon.awssdk.core.client.builder.SdkDefaultClientBuilder$$Lambda$962/0x000002bb4b3177c0 + software.amazon.awssdk.core.client.builder.SdkDefaultClientBuilder$$Lambda$963/0x000002bb4b3179e0 + software.amazon.awssdk.core.client.builder.SdkDefaultClientBuilder$$Lambda$964/0x000002bb4b317c18 + software.amazon.awssdk.core.internal.useragent.SdkClientUserAgentProperties%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.core.internal.useragent.AppIdResolver%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.core.internal.useragent.AppIdResolver$$Lambda$965/0x000002bb4b31c410 + software.amazon.awssdk.core.util.SystemUserAgent%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.core.internal.useragent.DefaultSystemUserAgent%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.core.internal.useragent.UserAgentConstant%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.core.internal.useragent.UserAgentLangValues%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.utils.IoUtils%20SAHA/.m2/repository/software/amazon/awssdk/utils/2.39.1/utils-2.39.1.jar + software.amazon.awssdk.core.internal.useragent.SdkUserAgentBuilder%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.core.internal.useragent.SdkUserAgentBuilder$$Lambda$966/0x000002bb4b31d288 + software.amazon.awssdk.utils.ThreadFactoryBuilder%20SAHA/.m2/repository/software/amazon/awssdk/utils/2.39.1/utils-2.39.1.jar + software.amazon.awssdk.utils.NamedThreadFactory%20SAHA/.m2/repository/software/amazon/awssdk/utils/2.39.1/utils-2.39.1.jar + software.amazon.awssdk.utils.DaemonThreadFactory%20SAHA/.m2/repository/software/amazon/awssdk/utils/2.39.1/utils-2.39.1.jar + software.amazon.awssdk.core.SdkPlugin%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.services.s3.internal.plugins.S3DisableChunkEncodingIfConfiguredPlugin%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.internal.s3express.S3ExpressPlugin%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.awscore.AwsServiceClientConfiguration$Builder%20SAHA/.m2/repository/software/amazon/awssdk/aws-core/2.39.1/aws-core-2.39.1.jar + software.amazon.awssdk.services.s3.S3ServiceClientConfiguration$Builder%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.internal.S3ServiceClientConfigurationBuilder%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.s3express.S3ExpressAuthScheme%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.internal.s3express.DefaultS3ExpressAuthScheme%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.internal.S3ServiceClientConfigurationBuilder$$Lambda$967/0x000002bb4b31ef18 + software.amazon.awssdk.utils.AttributeMap$Builder$$Lambda$968/0x000002bb4b31f130 + software.amazon.awssdk.services.s3.internal.s3express.S3ExpressAuthSchemeProvider%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.identity.spi.IdentityProperty%20SAHA/.m2/repository/software/amazon/awssdk/identity-spi/2.39.1/identity-spi-2.39.1.jar + software.amazon.awssdk.core.client.config.ClientOverrideConfiguration$DefaultBuilder%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.core.client.config.ClientOverrideConfiguration%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.core.client.config.ClientOverrideConfiguration$DefaultBuilder$$Lambda$969/0x000002bb4b31fdb8 + software.amazon.awssdk.core.client.config.ClientOverrideConfiguration$DefaultBuilder$$Lambda$970/0x000002bb4b31a000 + software.amazon.awssdk.core.client.config.ClientOverrideConfiguration$DefaultBuilder$$Lambda$971/0x000002bb4b31a230 + software.amazon.awssdk.services.s3.DefaultS3Client%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.core.client.handler.SyncClientHandler%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.services.s3.model.GetObjectRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.metrics.MetricCollector%20SAHA/.m2/repository/software/amazon/awssdk/metrics-spi/2.39.1/metrics-spi-2.39.1.jar + software.amazon.awssdk.core.SdkProtocolMetadata%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.protocols.xml.AwsXmlProtocolFactory%20SAHA/.m2/repository/software/amazon/awssdk/aws-xml-protocol/2.39.1/aws-xml-protocol-2.39.1.jar + software.amazon.awssdk.protocols.xml.AwsS3ProtocolFactory%20SAHA/.m2/repository/software/amazon/awssdk/aws-xml-protocol/2.39.1/aws-xml-protocol-2.39.1.jar + software.amazon.awssdk.core.runtime.transform.Marshaller%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.services.s3.model.GetBucketRequestPaymentRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.DeleteBucketOwnershipControlsRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.GetBucketEncryptionRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.GetBucketNotificationConfigurationRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.CompleteMultipartUploadRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.DeleteBucketEncryptionRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.GetBucketReplicationRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.CreateBucketMetadataConfigurationRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.DeleteBucketLifecycleRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.DeleteBucketMetricsConfigurationRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.DeleteBucketTaggingRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.GetBucketMetadataConfigurationRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.GetBucketOwnershipControlsRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.DeleteBucketInventoryConfigurationRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.GetBucketPolicyStatusRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.GetBucketVersioningRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.DeleteBucketWebsiteRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.DeleteObjectTaggingRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.GetBucketAccelerateConfigurationRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.GetBucketAnalyticsConfigurationRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.GetBucketInventoryConfigurationRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.DeletePublicAccessBlockRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.DeleteBucketReplicationRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.AbortMultipartUploadRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.GetBucketLifecycleConfigurationRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.GetObjectAttributesRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.DeleteBucketAnalyticsConfigurationRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.DeleteBucketMetadataConfigurationRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.GetBucketMetricsConfigurationRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.GetObjectLockConfigurationRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.PutBucketAccelerateConfigurationRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.ListBucketMetricsConfigurationsRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.PutBucketLifecycleConfigurationRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.ListBucketAnalyticsConfigurationsRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.ListMultipartUploadsRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.PutBucketEncryptionRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.ListBucketInventoryConfigurationsRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.PutBucketRequestPaymentRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.PutPublicAccessBlockRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.PutBucketNotificationConfigurationRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.PutBucketReplicationRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.PutBucketAnalyticsConfigurationRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.GetPublicAccessBlockRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.WriteGetObjectResponseRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.PutBucketMetricsConfigurationRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.ListDirectoryBucketsRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.PutBucketInventoryConfigurationRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.PutBucketVersioningRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.PutObjectLockConfigurationRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.PutBucketOwnershipControlsRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.GetBucketMetadataTableConfigurationRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.DeleteBucketMetadataTableConfigurationRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.GetBucketIntelligentTieringConfigurationRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.CreateBucketMetadataTableConfigurationRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.DeleteBucketIntelligentTieringConfigurationRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.ListBucketIntelligentTieringConfigurationsRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.PutBucketIntelligentTieringConfigurationRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.UpdateBucketMetadataInventoryTableConfigurationRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.UpdateBucketMetadataJournalTableConfigurationRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.PutBucketLoggingRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.PutBucketPolicyRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.PutBucketTaggingRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.PutBucketWebsiteRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.PutObjectRetentionRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.PutObjectLegalHoldRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.PutObjectAclRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.PutObjectTaggingRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.RenameObjectRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.UploadPartCopyRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.RestoreObjectRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.UploadPartRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.DeleteBucketRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.CreateBucketRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.CopyObjectRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.CreateSessionRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.DeleteBucketCorsRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.DeleteObjectsRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.DeleteObjectRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.DeleteBucketPolicyRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.GetBucketAclRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.GetBucketCorsRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.GetBucketAbacRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.GetBucketLoggingRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.GetBucketPolicyRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.GetBucketLocationRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.GetBucketWebsiteRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.GetBucketTaggingRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.GetObjectRetentionRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.GetObjectAclRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.GetObjectTorrentRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.GetObjectTaggingRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.GetObjectLegalHoldRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.HeadBucketRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.ListBucketsRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.HeadObjectRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.ListObjectsRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.ListObjectVersionsRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.ListObjectsV2Request%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.PutBucketCorsRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.PutBucketAbacRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.ListPartsRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.PutBucketAclRequest%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.awscore.internal.AwsProtocolMetadata%20SAHA/.m2/repository/software/amazon/awssdk/aws-core/2.39.1/aws-core-2.39.1.jar + software.amazon.awssdk.awscore.internal.AwsProtocolMetadata$Builder%20SAHA/.m2/repository/software/amazon/awssdk/aws-core/2.39.1/aws-core-2.39.1.jar + software.amazon.awssdk.awscore.internal.AwsServiceProtocol%20SAHA/.m2/repository/software/amazon/awssdk/aws-core/2.39.1/aws-core-2.39.1.jar + software.amazon.awssdk.core.internal.handler.BaseClientHandler%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.core.internal.handler.BaseSyncClientHandler%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.core.client.handler.SdkSyncClientHandler%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.awscore.client.handler.AwsSyncClientHandler%20SAHA/.m2/repository/software/amazon/awssdk/aws-core/2.39.1/aws-core-2.39.1.jar + software.amazon.awssdk.http.SdkHttpRequest%20SAHA/.m2/repository/software/amazon/awssdk/http-client-spi/2.39.1/http-client-spi-2.39.1.jar + software.amazon.awssdk.http.SdkHttpResponse%20SAHA/.m2/repository/software/amazon/awssdk/http-client-spi/2.39.1/http-client-spi-2.39.1.jar + software.amazon.awssdk.core.interceptor.Context$BeforeUnmarshalling%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.core.interceptor.Context$AfterUnmarshalling%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.core.sync.RequestBody%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.core.internal.handler.SdkInternalOnlyRequestBody%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.utils.io.LengthAwareInputStream%20SAHA/.m2/repository/software/amazon/awssdk/utils/2.39.1/utils-2.39.1.jar + software.amazon.awssdk.core.http.HttpResponseHandler%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.core.internal.http.AmazonSyncHttpClient%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.core.internal.http.HttpClientDependencies%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.core.internal.http.HttpClientDependencies$Builder%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.core.internal.http.SdkClientTime%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.core.SdkGlobalTime%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.core.internal.retry.ClockSkewAdjuster%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.core.client.config.SdkClientOptionValidation%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.awscore.internal.client.config.AwsClientOptionValidation%20SAHA/.m2/repository/software/amazon/awssdk/aws-core/2.39.1/aws-core-2.39.1.jar + software.amazon.awssdk.protocols.query.unmarshall.XmlErrorUnmarshaller%20SAHA/.m2/repository/software/amazon/awssdk/aws-query-protocol/2.39.1/aws-query-protocol-2.39.1.jar + software.amazon.awssdk.protocols.core.ProtocolMarshaller%20SAHA/.m2/repository/software/amazon/awssdk/protocol-core/2.39.1/protocol-core-2.39.1.jar + software.amazon.awssdk.protocols.xml.AwsXmlProtocolFactory$Builder%20SAHA/.m2/repository/software/amazon/awssdk/aws-xml-protocol/2.39.1/aws-xml-protocol-2.39.1.jar + software.amazon.awssdk.protocols.xml.AwsS3ProtocolFactory$Builder%20SAHA/.m2/repository/software/amazon/awssdk/aws-xml-protocol/2.39.1/aws-xml-protocol-2.39.1.jar + software.amazon.awssdk.protocols.core.OperationMetadataAttribute%20SAHA/.m2/repository/software/amazon/awssdk/protocol-core/2.39.1/protocol-core-2.39.1.jar + software.amazon.awssdk.protocols.xml.internal.unmarshall.XmlProtocolUnmarshaller%20SAHA/.m2/repository/software/amazon/awssdk/aws-xml-protocol/2.39.1/aws-xml-protocol-2.39.1.jar + software.amazon.awssdk.protocols.core.StringToValueConverter$StringToValue%20SAHA/.m2/repository/software/amazon/awssdk/protocol-core/2.39.1/protocol-core-2.39.1.jar + software.amazon.awssdk.core.protocol.MarshallLocation%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.core.traits.TimestampFormatTrait$Format%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.protocols.core.StringToInstant%20SAHA/.m2/repository/software/amazon/awssdk/protocol-core/2.39.1/protocol-core-2.39.1.jar + software.amazon.awssdk.protocols.core.AbstractMarshallingRegistry%20SAHA/.m2/repository/software/amazon/awssdk/protocol-core/2.39.1/protocol-core-2.39.1.jar + software.amazon.awssdk.protocols.xml.internal.unmarshall.XmlUnmarshallerRegistry%20SAHA/.m2/repository/software/amazon/awssdk/aws-xml-protocol/2.39.1/aws-xml-protocol-2.39.1.jar + software.amazon.awssdk.protocols.core.AbstractMarshallingRegistry$Builder%20SAHA/.m2/repository/software/amazon/awssdk/protocol-core/2.39.1/protocol-core-2.39.1.jar + software.amazon.awssdk.protocols.xml.internal.unmarshall.XmlUnmarshallerRegistry$Builder%20SAHA/.m2/repository/software/amazon/awssdk/aws-xml-protocol/2.39.1/aws-xml-protocol-2.39.1.jar + software.amazon.awssdk.protocols.core.AbstractMarshallingRegistry$MarshallingLocationRegistry%20SAHA/.m2/repository/software/amazon/awssdk/protocol-core/2.39.1/protocol-core-2.39.1.jar + software.amazon.awssdk.protocols.core.AbstractMarshallingRegistry$MarshallingLocationRegistry$Builder%20SAHA/.m2/repository/software/amazon/awssdk/protocol-core/2.39.1/protocol-core-2.39.1.jar + software.amazon.awssdk.core.protocol.MarshallingType%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.core.protocol.MarshallingType$1%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.core.protocol.MarshallingKnownType%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.core.BytesWrapper%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.core.SdkBytes%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.core.document.Document%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.protocols.xml.internal.unmarshall.XmlUnmarshaller%20SAHA/.m2/repository/software/amazon/awssdk/aws-xml-protocol/2.39.1/aws-xml-protocol-2.39.1.jar + software.amazon.awssdk.protocols.xml.internal.unmarshall.XmlUnmarshallerContext%20SAHA/.m2/repository/software/amazon/awssdk/aws-xml-protocol/2.39.1/aws-xml-protocol-2.39.1.jar + software.amazon.awssdk.core.SdkField%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + java.lang.invoke.LambdaForm$DMH/0x000002bb4b338000 + software.amazon.awssdk.protocols.xml.internal.unmarshall.XmlProtocolUnmarshaller$$Lambda$972/0x000002bb4b3362f0 + software.amazon.awssdk.protocols.core.AbstractMarshallingRegistry$MarshallingTypeRegistry$Builder%20SAHA/.m2/repository/software/amazon/awssdk/protocol-core/2.39.1/protocol-core-2.39.1.jar + software.amazon.awssdk.protocols.core.AbstractMarshallingRegistry$MarshallingLocationRegistry$Builder$$Lambda$973/0x000002bb4b336720 + software.amazon.awssdk.protocols.core.AbstractMarshallingRegistry$MarshallingTypeRegistry%20SAHA/.m2/repository/software/amazon/awssdk/protocol-core/2.39.1/protocol-core-2.39.1.jar + software.amazon.awssdk.protocols.xml.internal.unmarshall.HeaderUnmarshaller%20SAHA/.m2/repository/software/amazon/awssdk/aws-xml-protocol/2.39.1/aws-xml-protocol-2.39.1.jar + software.amazon.awssdk.protocols.xml.internal.unmarshall.HeaderUnmarshaller$SimpleHeaderUnmarshaller%20SAHA/.m2/repository/software/amazon/awssdk/aws-xml-protocol/2.39.1/aws-xml-protocol-2.39.1.jar + software.amazon.awssdk.protocols.core.StringToValueConverter%20SAHA/.m2/repository/software/amazon/awssdk/protocol-core/2.39.1/protocol-core-2.39.1.jar + software.amazon.awssdk.protocols.core.StringToValueConverter$SimpleStringToValue%20SAHA/.m2/repository/software/amazon/awssdk/protocol-core/2.39.1/protocol-core-2.39.1.jar + software.amazon.awssdk.protocols.core.StringToValueConverter$$Lambda$974/0x000002bb4b337390 + software.amazon.awssdk.protocols.core.StringToValueConverter$$Lambda$975/0x000002bb4b3375d0 + java.lang.invoke.LambdaForm$DMH/0x000002bb4b338400 + software.amazon.awssdk.protocols.core.StringToValueConverter$$Lambda$976/0x000002bb4b337810 + software.amazon.awssdk.protocols.core.StringToValueConverter$$Lambda$977/0x000002bb4b337a50 + software.amazon.awssdk.protocols.core.StringToValueConverter$$Lambda$978/0x000002bb4b337c90 + java.lang.invoke.LambdaForm$DMH/0x000002bb4b338800 + software.amazon.awssdk.protocols.core.StringToValueConverter$$Lambda$979/0x000002bb4b33c000 + java.lang.invoke.LambdaForm$DMH/0x000002bb4b338c00 + software.amazon.awssdk.protocols.core.StringToValueConverter$$Lambda$980/0x000002bb4b33c240 + software.amazon.awssdk.protocols.core.StringToValueConverter$$Lambda$981/0x000002bb4b33c480 + software.amazon.awssdk.protocols.core.StringToValueConverter$$Lambda$982/0x000002bb4b33c6c0 + software.amazon.awssdk.protocols.core.StringToValueConverter$$Lambda$983/0x000002bb4b33c900 + software.amazon.awssdk.protocols.xml.internal.unmarshall.HeaderUnmarshaller$$Lambda$984/0x000002bb4b33cb40 + software.amazon.awssdk.protocols.xml.internal.unmarshall.HeaderUnmarshaller$$Lambda$985/0x000002bb4b33cd58 + software.amazon.awssdk.protocols.xml.internal.unmarshall.XmlPayloadUnmarshaller%20SAHA/.m2/repository/software/amazon/awssdk/aws-xml-protocol/2.39.1/aws-xml-protocol-2.39.1.jar + software.amazon.awssdk.protocols.xml.internal.unmarshall.XmlPayloadUnmarshaller$SimpleTypePayloadUnmarshaller%20SAHA/.m2/repository/software/amazon/awssdk/aws-xml-protocol/2.39.1/aws-xml-protocol-2.39.1.jar + software.amazon.awssdk.protocols.xml.internal.unmarshall.XmlProtocolUnmarshaller$$Lambda$986/0x000002bb4b33d398 + software.amazon.awssdk.protocols.xml.internal.unmarshall.XmlProtocolUnmarshaller$$Lambda$987/0x000002bb4b33d5b0 + software.amazon.awssdk.protocols.xml.internal.unmarshall.XmlProtocolUnmarshaller$$Lambda$988/0x000002bb4b33d7c8 + software.amazon.awssdk.protocols.core.AbstractMarshallingRegistry$MarshallingLocationRegistry$$Lambda$989/0x000002bb4b33d9e0 + java.util.EnumMap$EntrySet + java.util.EnumMap$EnumMapIterator + java.util.EnumMap$EntryIterator + java.util.EnumMap$EntryIterator$Entry + software.amazon.awssdk.protocols.core.ExceptionMetadata%20SAHA/.m2/repository/software/amazon/awssdk/protocol-core/2.39.1/protocol-core-2.39.1.jar + software.amazon.awssdk.protocols.core.ExceptionMetadata$Builder%20SAHA/.m2/repository/software/amazon/awssdk/protocol-core/2.39.1/protocol-core-2.39.1.jar + software.amazon.awssdk.services.s3.model.S3Exception%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.EncryptionTypeMismatchException%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.core.exception.SdkException$Builder%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.core.exception.SdkServiceException$Builder%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.awscore.exception.AwsServiceException$Builder%20SAHA/.m2/repository/software/amazon/awssdk/aws-core/2.39.1/aws-core-2.39.1.jar + software.amazon.awssdk.services.s3.model.S3Exception$Builder%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.EncryptionTypeMismatchException$Builder%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.DefaultS3Client$$Lambda$990/0x000002bb4b33f040 + software.amazon.awssdk.services.s3.model.NoSuchUploadException%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.NoSuchUploadException$Builder%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.DefaultS3Client$$Lambda$991/0x000002bb4b33f788 + software.amazon.awssdk.services.s3.model.InvalidObjectStateException%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.InvalidObjectStateException$Builder%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.DefaultS3Client$$Lambda$992/0x000002bb4b33a000 + software.amazon.awssdk.services.s3.model.InvalidWriteOffsetException%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.InvalidWriteOffsetException$Builder%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.DefaultS3Client$$Lambda$993/0x000002bb4b33a748 + software.amazon.awssdk.services.s3.model.BucketAlreadyOwnedByYouException%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.BucketAlreadyOwnedByYouException$Builder%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.DefaultS3Client$$Lambda$994/0x000002bb4b33ae90 + software.amazon.awssdk.services.s3.model.NoSuchKeyException%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.NoSuchKeyException$Builder%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.DefaultS3Client$$Lambda$995/0x000002bb4b33b5d8 + software.amazon.awssdk.services.s3.model.InvalidRequestException%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.InvalidRequestException$Builder%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.DefaultS3Client$$Lambda$996/0x000002bb4b33bd20 + software.amazon.awssdk.services.s3.model.ObjectAlreadyInActiveTierErrorException%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.ObjectAlreadyInActiveTierErrorException$Builder%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.DefaultS3Client$$Lambda$997/0x000002bb4b339530 + software.amazon.awssdk.services.s3.model.IdempotencyParameterMismatchException%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.IdempotencyParameterMismatchException$Builder%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.DefaultS3Client$$Lambda$998/0x000002bb4b339c78 + software.amazon.awssdk.services.s3.model.BucketAlreadyExistsException%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.BucketAlreadyExistsException$Builder%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.DefaultS3Client$$Lambda$999/0x000002bb4b340530 + software.amazon.awssdk.services.s3.model.NoSuchBucketException%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.NoSuchBucketException$Builder%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.DefaultS3Client$$Lambda$1000/0x000002bb4b340c78 + software.amazon.awssdk.services.s3.model.TooManyPartsException%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.TooManyPartsException$Builder%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.DefaultS3Client$$Lambda$1001/0x000002bb4b3413c0 + software.amazon.awssdk.services.s3.model.ObjectNotInActiveTierErrorException%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.model.ObjectNotInActiveTierErrorException$Builder%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.DefaultS3Client$$Lambda$1002/0x000002bb4b341b08 + software.amazon.awssdk.services.s3.DefaultS3Client$$Lambda$1003/0x000002bb4b341d20 + software.amazon.awssdk.protocols.query.unmarshall.AwsXmlErrorProtocolUnmarshaller%20SAHA/.m2/repository/software/amazon/awssdk/aws-query-protocol/2.39.1/aws-query-protocol-2.39.1.jar + software.amazon.awssdk.protocols.query.unmarshall.AwsXmlErrorProtocolUnmarshaller$Builder%20SAHA/.m2/repository/software/amazon/awssdk/aws-query-protocol/2.39.1/aws-query-protocol-2.39.1.jar + software.amazon.awssdk.protocols.query.unmarshall.XmlElement%20SAHA/.m2/repository/software/amazon/awssdk/aws-query-protocol/2.39.1/aws-query-protocol-2.39.1.jar + software.amazon.awssdk.protocols.xml.AwsXmlProtocolFactory$$Lambda$1004/0x000002bb4b342578 + software.amazon.awssdk.protocols.query.internal.unmarshall.AwsXmlErrorUnmarshaller%20SAHA/.m2/repository/software/amazon/awssdk/aws-query-protocol/2.39.1/aws-query-protocol-2.39.1.jar + software.amazon.awssdk.protocols.query.internal.unmarshall.AwsXmlErrorUnmarshaller$Builder%20SAHA/.m2/repository/software/amazon/awssdk/aws-query-protocol/2.39.1/aws-query-protocol-2.39.1.jar + software.amazon.awssdk.core.metrics.CoreMetric%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.metrics.MetricLevel%20SAHA/.m2/repository/software/amazon/awssdk/metrics-spi/2.39.1/metrics-spi-2.39.1.jar + software.amazon.awssdk.metrics.MetricCategory%20SAHA/.m2/repository/software/amazon/awssdk/metrics-spi/2.39.1/metrics-spi-2.39.1.jar + software.amazon.awssdk.metrics.SdkMetric%20SAHA/.m2/repository/software/amazon/awssdk/metrics-spi/2.39.1/metrics-spi-2.39.1.jar + software.amazon.awssdk.metrics.internal.DefaultSdkMetric%20SAHA/.m2/repository/software/amazon/awssdk/metrics-spi/2.39.1/metrics-spi-2.39.1.jar + software.amazon.awssdk.core.http.MetricCollectingHttpResponseHandler%20SAHA/.m2/repository/software/amazon/awssdk/sdk-core/2.39.1/sdk-core-2.39.1.jar + software.amazon.awssdk.services.s3.internal.client.S3SyncClientDecorator%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.internal.client.S3SyncClientDecorator$$Lambda$1005/0x000002bb4b343e88 + software.amazon.awssdk.services.s3.DelegatingS3Client%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.internal.crossregion.S3CrossRegionSyncClient%20SAHA/.m2/repository/software/amazon/awssdk/s3/2.39.1/s3-2.39.1.jar + software.amazon.awssdk.services.s3.internal.client.S3SyncClientDecorator$$Lambda$1006/0x000002bb4b346538 + software.amazon.awssdk.utils.ConditionalDecorator%20SAHA/.m2/repository/software/amazon/awssdk/utils/2.39.1/utils-2.39.1.jar + software.amazon.awssdk.utils.internal.DefaultConditionalDecorator$Builder%20SAHA/.m2/repository/software/amazon/awssdk/utils/2.39.1/utils-2.39.1.jar + software.amazon.awssdk.utils.internal.DefaultConditionalDecorator%20SAHA/.m2/repository/software/amazon/awssdk/utils/2.39.1/utils-2.39.1.jar + software.amazon.awssdk.utils.ConditionalDecorator$$Lambda$1007/0x000002bb4b346db0 + software.amazon.awssdk.utils.ConditionalDecorator$$Lambda$1008/0x000002bb4b347000 + software.amazon.awssdk.utils.ConditionalDecorator$$Lambda$1009/0x000002bb4b347228 + java.lang.invoke.LambdaForm$DMH/0x000002bb4b348000 + org.assertj.core.internal.Strings$$Lambda$1010/0x000002bb4b347468 + org.assertj.core.internal.Strings$$Lambda$1011/0x000002bb4b3476b8 + software.amazon.lambda.powertools.tracing.TracingUtils$$Lambda$1012/0x000002bb4b3478d0 + software.amazon.lambda.powertools.tracing.TracingUtils$$Lambda$1013/0x000002bb4b347b00 + software.amazon.lambda.powertools.tracing.TracingUtils$$Lambda$1014/0x000002bb4b347d30 + jdk.internal.reflect.GeneratedMethodAccessor28 + jdk.internal.reflect.GeneratedMethodAccessor29 + org.apache.http.impl.conn.PoolingHttpClientConnectionManager$2%20SAHA/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar + software.amazon.lambda.powertools.tracing.TracingUtilsTest$$Lambda$1015/0x000002bb4b34c228 + software.amazon.lambda.powertools.tracing.TracingUtilsTest$$Lambda$1016/0x000002bb4b34c448 + software.amazon.lambda.powertools.tracing.TracingUtilsTest$$Lambda$1017/0x000002bb4b34c670 + software.amazon.lambda.powertools.tracing.TracingUtilsTest$$Lambda$1018/0x000002bb4b34c8c0 + org.assertj.core.internal.WholeNumbers%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.internal.Numbers%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + org.assertj.core.internal.Integers%20SAHA/.m2/repository/org/assertj/assertj-core/3.27.6/assertj-core-3.27.6.jar + software.amazon.lambda.powertools.tracing.TracingUtils$$Lambda$1019/0x000002bb4b34d3a8 + software.amazon.lambda.powertools.tracing.TracingUtils$$Lambda$1020/0x000002bb4b34d5e0 + software.amazon.lambda.powertools.tracing.TracingUtilsTest$$Lambda$1021/0x000002bb4b34d810 + software.amazon.lambda.powertools.tracing.TracingUtilsTest$$Lambda$1022/0x000002bb4b34da30 + software.amazon.lambda.powertools.tracing.TracingUtilsTest$$Lambda$1023/0x000002bb4b34dc58 + software.amazon.lambda.powertools.tracing.TracingUtilsTest$$Lambda$1024/0x000002bb4b34dea8 + software.amazon.lambda.powertools.tracing.TracingUtilsTest$$Lambda$1025/0x000002bb4b34e0d0 + software.amazon.lambda.powertools.tracing.TracingUtilsTest$$Lambda$1026/0x000002bb4b34e320 + software.amazon.lambda.powertools.tracing.TracingUtilsTest$$Lambda$1027/0x000002bb4b34e548 + software.amazon.lambda.powertools.tracing.TracingUtilsTest$$Lambda$1028/0x000002bb4b34e798 + org.slf4j.event.Level%20SAHA/.m2/repository/org/slf4j/slf4j-api/2.0.17/slf4j-api-2.0.17.jar + org.slf4j.helpers.MessageFormatter%20SAHA/.m2/repository/org/slf4j/slf4j-api/2.0.17/slf4j-api-2.0.17.jar + org.slf4j.helpers.FormattingTuple%20SAHA/.m2/repository/org/slf4j/slf4j-api/2.0.17/slf4j-api-2.0.17.jar + software.amazon.lambda.powertools.tracing.TracingUtilsTest$$Lambda$1029/0x000002bb4b34f240 + org.junit.platform.launcher.core.OutcomeDelayingEngineExecutionListener$Outcome%20SAHA/.m2/repository/org/junit/platform/junit-platform-launcher/1.14.0/junit-platform-launcher-1.14.0.jar + java.util.concurrent.CompletableFuture + java.util.concurrent.CompletableFuture$AltResult + java.util.concurrent.ForkJoinPool + java.lang.invoke.VarHandleInts$FieldStaticReadOnly + java.lang.invoke.VarHandleInts$FieldStaticReadWrite + java.util.concurrent.ForkJoinPool$ForkJoinWorkerThreadFactory + java.util.concurrent.ForkJoinPool$DefaultForkJoinWorkerThreadFactory + java.util.concurrent.ForkJoinPool$1 + java.util.concurrent.ForkJoinPool$DefaultCommonPoolForkJoinWorkerThreadFactory + java.util.concurrent.ForkJoinPool$WorkQueue + java.util.concurrent.CompletableFuture$AsynchronousCompletionTask + java.util.concurrent.ForkJoinTask + java.util.concurrent.CompletableFuture$Completion + org.junit.platform.launcher.core.CompositeTestExecutionListener$$Lambda$1030/0x000002bb4b34f898 + org.junit.platform.launcher.core.CompositeTestExecutionListener$$Lambda$1031/0x000002bb4b34fac8 + java.lang.invoke.LambdaForm$DMH/0x000002bb4b348c00 + org.junit.platform.launcher.core.EngineExecutionOrchestrator$$Lambda$1032/0x000002bb4b34fce8 + org.junit.platform.launcher.core.DefaultLauncherSession$ClosedLauncher%20SAHA/.m2/repository/org/junit/platform/junit-platform-launcher/1.14.0/junit-platform-launcher-1.14.0.jar + org.apache.maven.surefire.api.suite.RunResult%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-api/3.5.4/surefire-api-3.5.4.jar + org.apache.maven.surefire.booter.ForkedBooter$6%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-booter/3.5.4/surefire-booter-3.5.4.jar + org.apache.maven.surefire.booter.ForkedBooter$7%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-booter/3.5.4/surefire-booter-3.5.4.jar + java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode + java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode + org.apache.maven.surefire.booter.ForkedBooter$1%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-booter/3.5.4/surefire-booter-3.5.4.jar + org.apache.maven.surefire.booter.spi.AbstractMasterProcessChannelProcessorFactory$2%20SAHA/.m2/repository/org/apache/maven/surefire/surefire-booter/3.5.4/surefire-booter-3.5.4.jar + java.util.IdentityHashMap$KeyIterator diff --git a/powertools-tracing/src/test/java/software/amazon/lambda/powertools/tracing/TracingUtilsTest.java b/powertools-tracing/src/test/java/software/amazon/lambda/powertools/tracing/TracingUtilsTest.java index db9807dbd..c2496766f 100644 --- a/powertools-tracing/src/test/java/software/amazon/lambda/powertools/tracing/TracingUtilsTest.java +++ b/powertools-tracing/src/test/java/software/amazon/lambda/powertools/tracing/TracingUtilsTest.java @@ -14,18 +14,25 @@ package software.amazon.lambda.powertools.tracing; +import static org.assertj.core.api.Assertions.assertThatNoException; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.entry; +import static org.mockito.Mockito.mock; import static software.amazon.lambda.powertools.tracing.TracingUtils.withEntitySubsegment; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.crac.Context; +import org.crac.Resource; import com.amazonaws.xray.AWSXRay; import com.amazonaws.xray.entities.Entity; class TracingUtilsTest { + TracingUtils tracingUtils = new TracingUtils(); + Context context = mock(Context.class); + @BeforeEach void setUp() { AWSXRay.beginSegment("test"); @@ -205,4 +212,13 @@ void shouldInvokeCodeBlockWrappedWithinNamespacedEntitySubsegment() throws Inter .containsEntry("key", "val"); }); } + @Test + void testBeforeCheckpointDoesNotThrowException() { + assertThatNoException().isThrownBy(() -> tracingUtils.beforeCheckpoint(context)); + } + + @Test + void testAfterRestoreDoesNotThrowException() { + assertThatNoException().isThrownBy(() -> tracingUtils.afterRestore(context)); + } } diff --git a/spotbugs-exclude.xml b/spotbugs-exclude.xml index 53226e3c2..b4c92c5c7 100644 --- a/spotbugs-exclude.xml +++ b/spotbugs-exclude.xml @@ -196,6 +196,11 @@ + + + + + From 093f5fcfdb63ee903df442b416bd51f215aaa3e3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 16 Jan 2026 14:11:29 +0100 Subject: [PATCH 078/202] chore: bump squidfunk/mkdocs-material in /docs (#2341) Bumps squidfunk/mkdocs-material from `980e11f` to `3bba0a9`. --- updated-dependencies: - dependency-name: squidfunk/mkdocs-material dependency-version: 3bba0a99bc6e635bb8e53f379d32ab9cecb554adee9cc8f59a347f93ecf82f3b dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- docs/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Dockerfile b/docs/Dockerfile index 56c4c19ea..ee71acb0e 100644 --- a/docs/Dockerfile +++ b/docs/Dockerfile @@ -1,4 +1,4 @@ -FROM squidfunk/mkdocs-material@sha256:980e11fed03b8e7851e579be9f34b1210f516c9f0b4da1a1457f21a460bd6628 +FROM squidfunk/mkdocs-material@sha256:3bba0a99bc6e635bb8e53f379d32ab9cecb554adee9cc8f59a347f93ecf82f3b COPY requirements.txt /tmp/ RUN pip install --require-hashes -r /tmp/requirements.txt From 78676d0a2d4ba974a5f1d7f8b99dbbbed6cdc57a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 16 Jan 2026 14:12:24 +0100 Subject: [PATCH 079/202] chore: bump com.google.protobuf:protobuf-java from 4.33.1 to 4.33.2 (#2347) Bumps [com.google.protobuf:protobuf-java](https://github.com/protocolbuffers/protobuf) from 4.33.1 to 4.33.2. - [Release notes](https://github.com/protocolbuffers/protobuf/releases) - [Commits](https://github.com/protocolbuffers/protobuf/commits) --- updated-dependencies: - dependency-name: com.google.protobuf:protobuf-java dependency-version: 4.33.2 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- examples/powertools-examples-kafka/pom.xml | 2 +- powertools-kafka/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/powertools-examples-kafka/pom.xml b/examples/powertools-examples-kafka/pom.xml index d152f46c0..99e04e8a8 100644 --- a/examples/powertools-examples-kafka/pom.xml +++ b/examples/powertools-examples-kafka/pom.xml @@ -12,7 +12,7 @@ 11 1.9.20.1 1.12.1 - 4.33.1 + 4.33.2 diff --git a/powertools-kafka/pom.xml b/powertools-kafka/pom.xml index c71ef94f6..ccb63e38f 100644 --- a/powertools-kafka/pom.xml +++ b/powertools-kafka/pom.xml @@ -36,7 +36,7 @@ 4.1.1 1.12.1 - 4.33.1 + 4.33.2 1.1.6 From 966fcec39793eb717200283e69a41a96d2107702 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 16 Jan 2026 14:12:45 +0100 Subject: [PATCH 080/202] chore: bump aws.sdk.version from 2.40.9 to 2.40.13 (#2346) Bumps `aws.sdk.version` from 2.40.9 to 2.40.13. Updates `software.amazon.awssdk:bom` from 2.40.9 to 2.40.13 Updates `software.amazon.awssdk:http-client-spi` from 2.40.9 to 2.40.13 Updates `software.amazon.awssdk:url-connection-client` from 2.39.3 to 2.40.13 Updates `software.amazon.awssdk:s3` from 2.39.3 to 2.40.13 Updates `software.amazon.awssdk:dynamodb` from 2.40.9 to 2.40.13 Updates `software.amazon.awssdk:lambda` from 2.40.9 to 2.40.13 Updates `software.amazon.awssdk:kinesis` from 2.39.3 to 2.40.13 Updates `software.amazon.awssdk:cloudwatch` from 2.40.9 to 2.40.13 Updates `software.amazon.awssdk:xray` from 2.40.9 to 2.40.13 Updates `software.amazon.awssdk:sqs` from 2.39.3 to 2.40.13 Updates `software.amazon.awssdk:cloudformation` from 2.40.9 to 2.40.13 Updates `software.amazon.awssdk:sts` from 2.40.9 to 2.40.13 --- updated-dependencies: - dependency-name: software.amazon.awssdk:bom dependency-version: 2.40.13 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: software.amazon.awssdk:http-client-spi dependency-version: 2.40.13 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: software.amazon.awssdk:url-connection-client dependency-version: 2.40.13 dependency-type: direct:development update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:s3 dependency-version: 2.40.13 dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:dynamodb dependency-version: 2.40.13 dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: software.amazon.awssdk:lambda dependency-version: 2.40.13 dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: software.amazon.awssdk:kinesis dependency-version: 2.40.13 dependency-type: direct:development update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:cloudwatch dependency-version: 2.40.13 dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: software.amazon.awssdk:xray dependency-version: 2.40.13 dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: software.amazon.awssdk:sqs dependency-version: 2.40.13 dependency-type: direct:development update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:cloudformation dependency-version: 2.40.13 dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: software.amazon.awssdk:sts dependency-version: 2.40.13 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- examples/powertools-examples-cloudformation/pom.xml | 2 +- pom.xml | 2 +- powertools-e2e-tests/handlers/pom.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/powertools-examples-cloudformation/pom.xml b/examples/powertools-examples-cloudformation/pom.xml index 212c0966b..02af522d3 100644 --- a/examples/powertools-examples-cloudformation/pom.xml +++ b/examples/powertools-examples-cloudformation/pom.xml @@ -14,7 +14,7 @@ 11 1.4.0 3.16.1 - 2.40.9 + 2.40.13 1.9.20.1 diff --git a/pom.xml b/pom.xml index e6cf78b14..0f514042c 100644 --- a/pom.xml +++ b/pom.xml @@ -85,7 +85,7 @@ 2.25.3 2.0.17 2.20.1 - 2.40.9 + 2.40.13 2.20.0 2.2.0 UTF-8 diff --git a/powertools-e2e-tests/handlers/pom.xml b/powertools-e2e-tests/handlers/pom.xml index 477b49dc0..6285d2249 100644 --- a/powertools-e2e-tests/handlers/pom.xml +++ b/powertools-e2e-tests/handlers/pom.xml @@ -19,7 +19,7 @@ 3.6.1 1.14.1 3.14.1 - 2.40.9 + 2.40.13 1.9.20.1 true From 52fd8faba23131e281e7b5a3683ec09029124acc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 16 Jan 2026 14:15:07 +0100 Subject: [PATCH 081/202] chore: bump github/codeql-action from 4.31.9 to 4.31.10 (#2350) Bumps [github/codeql-action](https://github.com/github/codeql-action) from 4.31.9 to 4.31.10. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/5d4e8d1aca955e8d8589aabd499c5cae939e33c7...cdefb33c0f6224e58673d9004f47f7cb3e328b89) --- updated-dependencies: - dependency-name: github/codeql-action dependency-version: 4.31.10 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/security-scorecard.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/security-scorecard.yml b/.github/workflows/security-scorecard.yml index b91e78c69..774bd2745 100644 --- a/.github/workflows/security-scorecard.yml +++ b/.github/workflows/security-scorecard.yml @@ -52,6 +52,6 @@ jobs: path: results.sarif retention-days: 5 - name: Upload to Code-Scanning - uses: github/codeql-action/upload-sarif@5d4e8d1aca955e8d8589aabd499c5cae939e33c7 # v3.29.5 + uses: github/codeql-action/upload-sarif@cdefb33c0f6224e58673d9004f47f7cb3e328b89 # v3.29.5 with: sarif_file: results.sarif From 4f82cd6ecab43a69a4e9b71601e49ce6cbf70148 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 16 Jan 2026 14:31:12 +0100 Subject: [PATCH 082/202] chore: bump graalvm/setup-graalvm from 1.4.4 to 1.4.5 (#2349) Bumps [graalvm/setup-graalvm](https://github.com/graalvm/setup-graalvm) from 1.4.4 to 1.4.5. - [Release notes](https://github.com/graalvm/setup-graalvm/releases) - [Commits](https://github.com/graalvm/setup-graalvm/compare/790e28947b79a9c09c3391c0f18bf8d0f102ed69...54b4f5a65c1a84b2fdfdc2078fe43df32819e4b1) --- updated-dependencies: - dependency-name: graalvm/setup-graalvm dependency-version: 1.4.5 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/check-build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/check-build.yml b/.github/workflows/check-build.yml index 339d6fab8..31a286318 100644 --- a/.github/workflows/check-build.yml +++ b/.github/workflows/check-build.yml @@ -105,7 +105,7 @@ jobs: powertools-*/** pom.xml - name: Setup GraalVM - uses: graalvm/setup-graalvm@790e28947b79a9c09c3391c0f18bf8d0f102ed69 # v1.4.4 + uses: graalvm/setup-graalvm@54b4f5a65c1a84b2fdfdc2078fe43df32819e4b1 # v1.4.5 with: java-version: "21" distribution: "graalvm" From 41208890361f3830804cf929d9d553c7e4c8b229 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 20 Jan 2026 14:04:04 +0100 Subject: [PATCH 083/202] chore: bump mockito.version from 5.18.0 to 5.21.0 (#2352) Bumps `mockito.version` from 5.18.0 to 5.21.0. Updates `org.mockito:mockito-core` from 5.18.0 to 5.21.0 - [Release notes](https://github.com/mockito/mockito/releases) - [Commits](https://github.com/mockito/mockito/compare/v5.18.0...v5.21.0) Updates `org.mockito:mockito-subclass` from 5.20.0 to 5.21.0 - [Release notes](https://github.com/mockito/mockito/releases) - [Commits](https://github.com/mockito/mockito/compare/v5.20.0...v5.21.0) --- updated-dependencies: - dependency-name: org.mockito:mockito-core dependency-version: 5.21.0 dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: org.mockito:mockito-subclass dependency-version: 5.21.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> --- examples/powertools-examples-parameters/sam-graalvm/pom.xml | 2 +- examples/powertools-examples-parameters/sam/pom.xml | 2 +- examples/powertools-examples-validation/pom.xml | 2 +- pom.xml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/examples/powertools-examples-parameters/sam-graalvm/pom.xml b/examples/powertools-examples-parameters/sam-graalvm/pom.xml index 2aaffd9d1..ee3631d8b 100644 --- a/examples/powertools-examples-parameters/sam-graalvm/pom.xml +++ b/examples/powertools-examples-parameters/sam-graalvm/pom.xml @@ -76,7 +76,7 @@ org.mockito mockito-core - 5.18.0 + 5.21.0 test diff --git a/examples/powertools-examples-parameters/sam/pom.xml b/examples/powertools-examples-parameters/sam/pom.xml index d2c3e68d2..d59e494f2 100644 --- a/examples/powertools-examples-parameters/sam/pom.xml +++ b/examples/powertools-examples-parameters/sam/pom.xml @@ -50,7 +50,7 @@ org.mockito mockito-core - 5.18.0 + 5.21.0 test diff --git a/examples/powertools-examples-validation/pom.xml b/examples/powertools-examples-validation/pom.xml index 2fa8462a5..95f2a064b 100644 --- a/examples/powertools-examples-validation/pom.xml +++ b/examples/powertools-examples-validation/pom.xml @@ -53,7 +53,7 @@ org.mockito mockito-core - 5.18.0 + 5.21.0 test diff --git a/pom.xml b/pom.xml index 0f514042c..afbc1a18a 100644 --- a/pom.xml +++ b/pom.xml @@ -113,7 +113,7 @@ 1.12.781 2.20.1 1.7.0 - 5.20.0 + 5.21.0 5.21.0 2.3.0 1.5.0 From fb69075fca33948df6b9ff69f527ffaa2d2acaf1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 20 Jan 2026 14:04:20 +0100 Subject: [PATCH 084/202] chore: bump org.codehaus.mojo:aspectj-maven-plugin from 1.15.0 to 1.16.0 (#2353) Bumps [org.codehaus.mojo:aspectj-maven-plugin](https://github.com/mojohaus/aspectj-maven-plugin) from 1.15.0 to 1.16.0. - [Release notes](https://github.com/mojohaus/aspectj-maven-plugin/releases) - [Commits](https://github.com/mojohaus/aspectj-maven-plugin/compare/aspectj-maven-plugin-1.15.0...aspectj-maven-plugin-1.16.0) --- updated-dependencies: - dependency-name: org.codehaus.mojo:aspectj-maven-plugin dependency-version: 1.16.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> --- examples/powertools-examples-core-utilities/sam-graalvm/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/powertools-examples-core-utilities/sam-graalvm/pom.xml b/examples/powertools-examples-core-utilities/sam-graalvm/pom.xml index eea0357e9..cf50e5128 100644 --- a/examples/powertools-examples-core-utilities/sam-graalvm/pom.xml +++ b/examples/powertools-examples-core-utilities/sam-graalvm/pom.xml @@ -78,7 +78,7 @@ org.codehaus.mojo aspectj-maven-plugin - 1.15.0 + 1.16.0 ${maven.compiler.source} ${maven.compiler.target} From 2ab02fd71b24b3259ec4be41219c07de88ffdd11 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 20 Jan 2026 14:04:32 +0100 Subject: [PATCH 085/202] chore: bump aws.sdk.version from 2.40.13 to 2.41.10 (#2354) Bumps `aws.sdk.version` from 2.40.13 to 2.41.10. Updates `software.amazon.awssdk:bom` from 2.40.13 to 2.41.10 Updates `software.amazon.awssdk:http-client-spi` from 2.40.13 to 2.41.10 Updates `software.amazon.awssdk:url-connection-client` from 2.39.3 to 2.41.10 Updates `software.amazon.awssdk:s3` from 2.39.3 to 2.41.10 Updates `software.amazon.awssdk:dynamodb` from 2.40.13 to 2.41.10 Updates `software.amazon.awssdk:lambda` from 2.40.13 to 2.41.10 Updates `software.amazon.awssdk:kinesis` from 2.39.3 to 2.41.10 Updates `software.amazon.awssdk:cloudwatch` from 2.40.13 to 2.41.10 Updates `software.amazon.awssdk:xray` from 2.40.13 to 2.41.10 Updates `software.amazon.awssdk:sqs` from 2.39.3 to 2.41.10 Updates `software.amazon.awssdk:cloudformation` from 2.40.13 to 2.41.10 Updates `software.amazon.awssdk:sts` from 2.40.13 to 2.41.10 --- updated-dependencies: - dependency-name: software.amazon.awssdk:bom dependency-version: 2.41.10 dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:http-client-spi dependency-version: 2.41.10 dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:url-connection-client dependency-version: 2.41.10 dependency-type: direct:development update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:s3 dependency-version: 2.41.10 dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:dynamodb dependency-version: 2.41.10 dependency-type: direct:development update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:lambda dependency-version: 2.41.10 dependency-type: direct:development update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:kinesis dependency-version: 2.41.10 dependency-type: direct:development update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:cloudwatch dependency-version: 2.41.10 dependency-type: direct:development update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:xray dependency-version: 2.41.10 dependency-type: direct:development update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:sqs dependency-version: 2.41.10 dependency-type: direct:development update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:cloudformation dependency-version: 2.41.10 dependency-type: direct:development update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:sts dependency-version: 2.41.10 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> --- examples/powertools-examples-cloudformation/pom.xml | 2 +- pom.xml | 2 +- powertools-e2e-tests/handlers/pom.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/powertools-examples-cloudformation/pom.xml b/examples/powertools-examples-cloudformation/pom.xml index 02af522d3..fcee22d49 100644 --- a/examples/powertools-examples-cloudformation/pom.xml +++ b/examples/powertools-examples-cloudformation/pom.xml @@ -14,7 +14,7 @@ 11 1.4.0 3.16.1 - 2.40.13 + 2.41.10 1.9.20.1 diff --git a/pom.xml b/pom.xml index afbc1a18a..f42f95299 100644 --- a/pom.xml +++ b/pom.xml @@ -85,7 +85,7 @@ 2.25.3 2.0.17 2.20.1 - 2.40.13 + 2.41.10 2.20.0 2.2.0 UTF-8 diff --git a/powertools-e2e-tests/handlers/pom.xml b/powertools-e2e-tests/handlers/pom.xml index 6285d2249..585bb83db 100644 --- a/powertools-e2e-tests/handlers/pom.xml +++ b/powertools-e2e-tests/handlers/pom.xml @@ -19,7 +19,7 @@ 3.6.1 1.14.1 3.14.1 - 2.40.13 + 2.41.10 1.9.20.1 true From 25586b33faff0cf2efaad24e2a0998ca1329712f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 20 Jan 2026 14:04:45 +0100 Subject: [PATCH 086/202] chore: bump release-drafter/release-drafter from 6.1.0 to 6.1.1 (#2357) Bumps [release-drafter/release-drafter](https://github.com/release-drafter/release-drafter) from 6.1.0 to 6.1.1. - [Release notes](https://github.com/release-drafter/release-drafter/releases) - [Commits](https://github.com/release-drafter/release-drafter/compare/b1476f6e6eb133afa41ed8589daba6dc69b4d3f5...267d2e0268deae5d44f3ba5029dd4d6e85f9d52d) --- updated-dependencies: - dependency-name: release-drafter/release-drafter dependency-version: 6.1.1 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/release-drafter.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release-drafter.yml b/.github/workflows/release-drafter.yml index 39d453ced..46f6db489 100644 --- a/.github/workflows/release-drafter.yml +++ b/.github/workflows/release-drafter.yml @@ -22,6 +22,6 @@ jobs: id-token: write steps: - name: Relase Drafter - uses: release-drafter/release-drafter@b1476f6e6eb133afa41ed8589daba6dc69b4d3f5 + uses: release-drafter/release-drafter@267d2e0268deae5d44f3ba5029dd4d6e85f9d52d env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file From dd92845898bf2637530dfbb670c93d372af4d331 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 27 Jan 2026 15:13:49 +0100 Subject: [PATCH 087/202] chore: bump github/codeql-action from 4.31.10 to 4.32.0 (#2369) Bumps [github/codeql-action](https://github.com/github/codeql-action) from 4.31.10 to 4.32.0. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/cdefb33c0f6224e58673d9004f47f7cb3e328b89...b20883b0cd1f46c72ae0ba6d1090936928f9fa30) --- updated-dependencies: - dependency-name: github/codeql-action dependency-version: 4.32.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> --- .github/workflows/security-scorecard.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/security-scorecard.yml b/.github/workflows/security-scorecard.yml index 774bd2745..29c98c0e7 100644 --- a/.github/workflows/security-scorecard.yml +++ b/.github/workflows/security-scorecard.yml @@ -52,6 +52,6 @@ jobs: path: results.sarif retention-days: 5 - name: Upload to Code-Scanning - uses: github/codeql-action/upload-sarif@cdefb33c0f6224e58673d9004f47f7cb3e328b89 # v3.29.5 + uses: github/codeql-action/upload-sarif@b20883b0cd1f46c72ae0ba6d1090936928f9fa30 # v3.29.5 with: sarif_file: results.sarif From ae1ac47f67c827780289ed661d695c51f4d4b94c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 27 Jan 2026 15:14:09 +0100 Subject: [PATCH 088/202] chore: bump actions/checkout from 6.0.1 to 6.0.2 (#2365) Bumps [actions/checkout](https://github.com/actions/checkout) from 6.0.1 to 6.0.2. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/8e8c483db84b4bee98b60c0593521ed34d9990e8...de0fac2e4500dabe0009e67214ff5f5447ce83dd) --- updated-dependencies: - dependency-name: actions/checkout dependency-version: 6.0.2 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/build-docs.yml | 2 +- .github/workflows/check-build.yml | 4 ++-- .github/workflows/check-e2e.yml | 4 ++-- .github/workflows/check-pmd.yml | 2 +- .github/workflows/check-spotbugs.yml | 2 +- .github/workflows/release.yml | 6 +++--- .github/workflows/security-dependencies-check.yml | 2 +- .github/workflows/security-scorecard.yml | 2 +- 8 files changed, 12 insertions(+), 12 deletions(-) diff --git a/.github/workflows/build-docs.yml b/.github/workflows/build-docs.yml index a94ace711..fbe7ec659 100644 --- a/.github/workflows/build-docs.yml +++ b/.github/workflows/build-docs.yml @@ -32,7 +32,7 @@ jobs: environment: Docs steps: - name: Checkout Repository - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd with: fetch-depth: 0 - name: Build diff --git a/.github/workflows/check-build.yml b/.github/workflows/check-build.yml index 31a286318..b3773944c 100644 --- a/.github/workflows/check-build.yml +++ b/.github/workflows/check-build.yml @@ -77,7 +77,7 @@ jobs: steps: - id: checkout name: Checkout repository - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Setup Java uses: actions/setup-java@f2beeb24e141e01a676f977032f5a29d81c9e27e with: @@ -94,7 +94,7 @@ jobs: steps: - id: checkout name: Checkout repository - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: fetch-depth: 0 - name: Get changed files diff --git a/.github/workflows/check-e2e.yml b/.github/workflows/check-e2e.yml index 378d48a60..27b8fd95a 100644 --- a/.github/workflows/check-e2e.yml +++ b/.github/workflows/check-e2e.yml @@ -57,7 +57,7 @@ jobs: - 25 steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Setup java uses: actions/setup-java@f2beeb24e141e01a676f977032f5a29d81c9e27e # v5.1.0 with: @@ -88,7 +88,7 @@ jobs: - 25 steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Setup java uses: actions/setup-java@f2beeb24e141e01a676f977032f5a29d81c9e27e # v5.1.0 with: diff --git a/.github/workflows/check-pmd.yml b/.github/workflows/check-pmd.yml index 7e7dce429..3955d2072 100644 --- a/.github/workflows/check-pmd.yml +++ b/.github/workflows/check-pmd.yml @@ -29,7 +29,7 @@ jobs: id-token: write steps: - name: Checkout Repository - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Setup Java uses: actions/setup-java@f2beeb24e141e01a676f977032f5a29d81c9e27e # v5.1.0 with: diff --git a/.github/workflows/check-spotbugs.yml b/.github/workflows/check-spotbugs.yml index c5c8197f9..09ed1c224 100644 --- a/.github/workflows/check-spotbugs.yml +++ b/.github/workflows/check-spotbugs.yml @@ -41,7 +41,7 @@ jobs: codecheck: runs-on: ubuntu-latest steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Setup Java uses: actions/setup-java@f2beeb24e141e01a676f977032f5a29d81c9e27e # v5.1.0 with: diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 630b91321..7b52d88de 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -103,7 +103,7 @@ jobs: steps: - id: checkout name: Checkout repository - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - id: version name: version uses: ./.github/actions/version @@ -224,7 +224,7 @@ jobs: steps: - id: checkout name: Checkout repository - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: ref: ${{ env.RELEASE_COMMIT }} - id: download_source @@ -272,7 +272,7 @@ jobs: steps: - id: checkout name: Checkout repository - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: # Checkout PR branch to make sure we build the version-bumped docs ref: ci-${{ github.run_id }} diff --git a/.github/workflows/security-dependencies-check.yml b/.github/workflows/security-dependencies-check.yml index 6729fd304..bbf53db8a 100644 --- a/.github/workflows/security-dependencies-check.yml +++ b/.github/workflows/security-dependencies-check.yml @@ -24,7 +24,7 @@ jobs: pull-requests: write steps: - name: Checkout Repository - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Verify Contents uses: actions/dependency-review-action@3c4e3dcb1aa7874d2c16be7d79418e9b7efd6261 # v4.8.2 with: diff --git a/.github/workflows/security-scorecard.yml b/.github/workflows/security-scorecard.yml index 29c98c0e7..019de1435 100644 --- a/.github/workflows/security-scorecard.yml +++ b/.github/workflows/security-scorecard.yml @@ -35,7 +35,7 @@ jobs: id-token: write steps: - name: Checkout Repository - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: persist-credentials: false - name: Run Analysis From c387dd7e28318fbcb719f7e0c46dd9f0a00330bd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 27 Jan 2026 15:14:26 +0100 Subject: [PATCH 089/202] chore: bump actions/setup-java from 5.1.0 to 5.2.0 (#2363) Bumps [actions/setup-java](https://github.com/actions/setup-java) from 5.1.0 to 5.2.0. - [Release notes](https://github.com/actions/setup-java/releases) - [Commits](https://github.com/actions/setup-java/compare/f2beeb24e141e01a676f977032f5a29d81c9e27e...be666c2fcd27ec809703dec50e508c2fdc7f6654) --- updated-dependencies: - dependency-name: actions/setup-java dependency-version: 5.2.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> --- .github/workflows/check-build.yml | 2 +- .github/workflows/check-e2e.yml | 4 ++-- .github/workflows/check-pmd.yml | 2 +- .github/workflows/check-spotbugs.yml | 2 +- .github/workflows/release.yml | 6 +++--- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/check-build.yml b/.github/workflows/check-build.yml index b3773944c..06566d17a 100644 --- a/.github/workflows/check-build.yml +++ b/.github/workflows/check-build.yml @@ -79,7 +79,7 @@ jobs: name: Checkout repository uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Setup Java - uses: actions/setup-java@f2beeb24e141e01a676f977032f5a29d81c9e27e + uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 with: distribution: corretto java-version: ${{ matrix.java }} diff --git a/.github/workflows/check-e2e.yml b/.github/workflows/check-e2e.yml index 27b8fd95a..f18a1438b 100644 --- a/.github/workflows/check-e2e.yml +++ b/.github/workflows/check-e2e.yml @@ -59,7 +59,7 @@ jobs: steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Setup java - uses: actions/setup-java@f2beeb24e141e01a676f977032f5a29d81c9e27e # v5.1.0 + uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0 with: distribution: 'corretto' java-version: ${{ matrix.java }} @@ -90,7 +90,7 @@ jobs: steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Setup java - uses: actions/setup-java@f2beeb24e141e01a676f977032f5a29d81c9e27e # v5.1.0 + uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0 with: distribution: 'corretto' java-version: ${{ matrix.java }} diff --git a/.github/workflows/check-pmd.yml b/.github/workflows/check-pmd.yml index 3955d2072..78b872744 100644 --- a/.github/workflows/check-pmd.yml +++ b/.github/workflows/check-pmd.yml @@ -31,7 +31,7 @@ jobs: - name: Checkout Repository uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Setup Java - uses: actions/setup-java@f2beeb24e141e01a676f977032f5a29d81c9e27e # v5.1.0 + uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0 with: java-version: 21 distribution: corretto diff --git a/.github/workflows/check-spotbugs.yml b/.github/workflows/check-spotbugs.yml index 09ed1c224..4e5fbcea3 100644 --- a/.github/workflows/check-spotbugs.yml +++ b/.github/workflows/check-spotbugs.yml @@ -43,7 +43,7 @@ jobs: steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Setup Java - uses: actions/setup-java@f2beeb24e141e01a676f977032f5a29d81c9e27e # v5.1.0 + uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0 with: distribution: 'corretto' java-version: 21 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 7b52d88de..b71237ae3 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -137,7 +137,7 @@ jobs: with: name: source - name: Setup Java - uses: actions/setup-java@f2beeb24e141e01a676f977032f5a29d81c9e27e + uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 with: distribution: corretto java-version: 21 @@ -172,7 +172,7 @@ jobs: with: name: source - name: Setup Java - uses: actions/setup-java@f2beeb24e141e01a676f977032f5a29d81c9e27e + uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 with: distribution: corretto java-version: ${{ matrix.java }} @@ -195,7 +195,7 @@ jobs: with: name: source - name: Setup Java - uses: actions/setup-java@f2beeb24e141e01a676f977032f5a29d81c9e27e + uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 with: distribution: corretto java-version: 21 From 8c1f59b57dcb0cad62471bd2d67f9223ab9e8f42 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 27 Jan 2026 15:14:47 +0100 Subject: [PATCH 090/202] chore: bump release-drafter/release-drafter from 6.1.1 to 6.2.0 (#2362) Bumps [release-drafter/release-drafter](https://github.com/release-drafter/release-drafter) from 6.1.1 to 6.2.0. - [Release notes](https://github.com/release-drafter/release-drafter/releases) - [Commits](https://github.com/release-drafter/release-drafter/compare/267d2e0268deae5d44f3ba5029dd4d6e85f9d52d...6db134d15f3909ccc9eefd369f02bd1e9cffdf97) --- updated-dependencies: - dependency-name: release-drafter/release-drafter dependency-version: 6.2.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> --- .github/workflows/release-drafter.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release-drafter.yml b/.github/workflows/release-drafter.yml index 46f6db489..71416342e 100644 --- a/.github/workflows/release-drafter.yml +++ b/.github/workflows/release-drafter.yml @@ -22,6 +22,6 @@ jobs: id-token: write steps: - name: Relase Drafter - uses: release-drafter/release-drafter@267d2e0268deae5d44f3ba5029dd4d6e85f9d52d + uses: release-drafter/release-drafter@6db134d15f3909ccc9eefd369f02bd1e9cffdf97 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file From 61fd80a6c5dab1d0ffd3cb163b0e120ae643d1fa Mon Sep 17 00:00:00 2001 From: Philipp Page Date: Thu, 29 Jan 2026 12:46:23 +0000 Subject: [PATCH 091/202] chore(ci): harden GitHub Actions workflow permissions (#2370) --- .github/workflows/build-docs.yml | 6 ++++-- .github/workflows/check-pmd.yml | 8 +++----- .github/workflows/release-drafter.yml | 7 ++++--- .github/workflows/release.yml | 20 +++++++++++-------- .../workflows/security-dependencies-check.yml | 7 +++---- .github/workflows/security-scorecard.yml | 7 ++++--- .../demo/kafka/protobuf/ProtobufProduct.java | 4 ++-- .../protobuf/ProtobufProductOrBuilder.java | 2 +- .../protobuf/ProtobufProductOuterClass.java | 4 ++-- 9 files changed, 35 insertions(+), 30 deletions(-) diff --git a/.github/workflows/build-docs.yml b/.github/workflows/build-docs.yml index fbe7ec659..deadf289a 100644 --- a/.github/workflows/build-docs.yml +++ b/.github/workflows/build-docs.yml @@ -23,12 +23,14 @@ on: name: Build Latest Docs run-name: Build Latest Docs - ${{ inputs.version }} +permissions: {} + jobs: docs: runs-on: ubuntu-latest permissions: - contents: read - id-token: write + contents: read # checkout repository + id-token: write # OIDC for AWS credentials environment: Docs steps: - name: Checkout Repository diff --git a/.github/workflows/check-pmd.yml b/.github/workflows/check-pmd.yml index 78b872744..cc6c53766 100644 --- a/.github/workflows/check-pmd.yml +++ b/.github/workflows/check-pmd.yml @@ -18,15 +18,13 @@ on: name: PMD run-name: PMD - ${{ github.event_name }} -permissions: - contents: read +permissions: {} jobs: pmd_analyse: runs-on: ubuntu-latest permissions: - contents: write - id-token: write + contents: read # checkout repository steps: - name: Checkout Repository uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 @@ -39,4 +37,4 @@ jobs: - uses: pmd/pmd-github-action@d9c1f3c5940cbf5923f1354e83fa858b4496ebaa # v2.0.0 with: rulesets: '.github/pmd-ruleset.xml' - token: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file + token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/release-drafter.yml b/.github/workflows/release-drafter.yml index 71416342e..9ef7426f9 100644 --- a/.github/workflows/release-drafter.yml +++ b/.github/workflows/release-drafter.yml @@ -14,14 +14,15 @@ on: name: Release Drafter run-name: Release Drafter +permissions: {} + jobs: update_release: runs-on: ubuntu-latest permissions: - contents: write - id-token: write + contents: write # required for creating draft releases steps: - name: Relase Drafter uses: release-drafter/release-drafter@6db134d15f3909ccc9eefd369f02bd1e9cffdf97 env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index b71237ae3..e1a35a4ac 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -55,8 +55,7 @@ on: name: Release run-name: Release – ${{ inputs.version }} -permissions: - contents: read +permissions: {} env: RELEASE_COMMIT: ${{ github.sha }} @@ -98,6 +97,8 @@ jobs: runs-on: ubuntu-latest needs: - setup + permissions: + contents: read # checkout repository outputs: source_hash: ${{ steps.upload_source.outputs.artifact-digest }} steps: @@ -128,8 +129,7 @@ jobs: - version_seal if: ${{ inputs.skip_checks == false }} permissions: - contents: write - id-token: write + contents: read # checkout and run tests steps: - id: download_source name: Download artifacts @@ -162,6 +162,8 @@ jobs: - quality - version_seal if: ${{ always() && !contains(needs.*.result, 'failure') && !contains(needs.*.result, 'cancelled') }} + permissions: + contents: read # download artifacts strategy: matrix: java: ${{ fromJson(needs.setup.outputs.build_matrix) }} @@ -187,6 +189,8 @@ jobs: if: ${{ github.repository == 'aws-powertools/powertools-lambda-java' && inputs.skip_publish == false && always() && !contains(needs.*.result, 'failure') && !contains(needs.*.result, 'cancelled') }} needs: - build + permissions: + contents: read # download artifacts environment: Release steps: - id: download_source @@ -219,8 +223,8 @@ jobs: - build - publish permissions: - pull-requests: write - contents: write + contents: write # create tag and branch + pull-requests: write # create PR steps: - id: checkout name: Checkout repository @@ -266,8 +270,8 @@ jobs: needs: - create_pr permissions: - contents: read - id-token: write + contents: read # checkout repository + id-token: write # OIDC for AWS credentials environment: Docs steps: - id: checkout diff --git a/.github/workflows/security-dependencies-check.yml b/.github/workflows/security-dependencies-check.yml index bbf53db8a..31f7491a2 100644 --- a/.github/workflows/security-dependencies-check.yml +++ b/.github/workflows/security-dependencies-check.yml @@ -13,15 +13,14 @@ on: name: Verify Dependencies run-name: Verify Dependencies – ${{ github.event_name }} -permissions: - contents: read +permissions: {} jobs: verify: runs-on: ubuntu-latest permissions: - contents: read - pull-requests: write + contents: read # checkout repository and read dependency snapshots + pull-requests: write # post review comments steps: - name: Checkout Repository uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 diff --git a/.github/workflows/security-scorecard.yml b/.github/workflows/security-scorecard.yml index 019de1435..e98c97662 100644 --- a/.github/workflows/security-scorecard.yml +++ b/.github/workflows/security-scorecard.yml @@ -23,7 +23,7 @@ on: name: OpenSSF Scorecard run-name: OpenSSF Scorecard -permissions: read-all +permissions: {} jobs: analysis: @@ -31,8 +31,9 @@ jobs: runs-on: ubuntu-latest environment: Security permissions: - security-events: write - id-token: write + contents: read # checkout repository + security-events: write # upload SARIF results + id-token: write # OIDC authentication steps: - name: Checkout Repository uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 diff --git a/examples/powertools-examples-kafka/src/main/java/org/demo/kafka/protobuf/ProtobufProduct.java b/examples/powertools-examples-kafka/src/main/java/org/demo/kafka/protobuf/ProtobufProduct.java index 2bf5db844..196c0fa52 100644 --- a/examples/powertools-examples-kafka/src/main/java/org/demo/kafka/protobuf/ProtobufProduct.java +++ b/examples/powertools-examples-kafka/src/main/java/org/demo/kafka/protobuf/ProtobufProduct.java @@ -1,7 +1,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // NO CHECKED-IN PROTOBUF GENCODE // source: ProtobufProduct.proto -// Protobuf Java Version: 4.33.1 +// Protobuf Java Version: 4.33.2 package org.demo.kafka.protobuf; @@ -19,7 +19,7 @@ public final class ProtobufProduct extends com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, /* major= */ 4, /* minor= */ 33, - /* patch= */ 1, + /* patch= */ 2, /* suffix= */ "", "ProtobufProduct"); } diff --git a/examples/powertools-examples-kafka/src/main/java/org/demo/kafka/protobuf/ProtobufProductOrBuilder.java b/examples/powertools-examples-kafka/src/main/java/org/demo/kafka/protobuf/ProtobufProductOrBuilder.java index caf17ad50..714a2c110 100644 --- a/examples/powertools-examples-kafka/src/main/java/org/demo/kafka/protobuf/ProtobufProductOrBuilder.java +++ b/examples/powertools-examples-kafka/src/main/java/org/demo/kafka/protobuf/ProtobufProductOrBuilder.java @@ -1,7 +1,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // NO CHECKED-IN PROTOBUF GENCODE // source: ProtobufProduct.proto -// Protobuf Java Version: 4.33.1 +// Protobuf Java Version: 4.33.2 package org.demo.kafka.protobuf; diff --git a/examples/powertools-examples-kafka/src/main/java/org/demo/kafka/protobuf/ProtobufProductOuterClass.java b/examples/powertools-examples-kafka/src/main/java/org/demo/kafka/protobuf/ProtobufProductOuterClass.java index ce3214777..abefa922f 100644 --- a/examples/powertools-examples-kafka/src/main/java/org/demo/kafka/protobuf/ProtobufProductOuterClass.java +++ b/examples/powertools-examples-kafka/src/main/java/org/demo/kafka/protobuf/ProtobufProductOuterClass.java @@ -1,7 +1,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // NO CHECKED-IN PROTOBUF GENCODE // source: ProtobufProduct.proto -// Protobuf Java Version: 4.33.1 +// Protobuf Java Version: 4.33.2 package org.demo.kafka.protobuf; @@ -13,7 +13,7 @@ private ProtobufProductOuterClass() {} com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, /* major= */ 4, /* minor= */ 33, - /* patch= */ 1, + /* patch= */ 2, /* suffix= */ "", "ProtobufProductOuterClass"); } From fc6ce9f673116f63a94c7ab7e18e36c5a0172821 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 18 Feb 2026 14:13:08 +0100 Subject: [PATCH 092/202] chore: bump github/codeql-action from 4.32.0 to 4.32.3 (#2387) Bumps [github/codeql-action](https://github.com/github/codeql-action) from 4.32.0 to 4.32.3. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/b20883b0cd1f46c72ae0ba6d1090936928f9fa30...9e907b5e64f6b83e7804b09294d44122997950d6) --- updated-dependencies: - dependency-name: github/codeql-action dependency-version: 4.32.3 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/security-scorecard.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/security-scorecard.yml b/.github/workflows/security-scorecard.yml index e98c97662..5b3d91efc 100644 --- a/.github/workflows/security-scorecard.yml +++ b/.github/workflows/security-scorecard.yml @@ -53,6 +53,6 @@ jobs: path: results.sarif retention-days: 5 - name: Upload to Code-Scanning - uses: github/codeql-action/upload-sarif@b20883b0cd1f46c72ae0ba6d1090936928f9fa30 # v3.29.5 + uses: github/codeql-action/upload-sarif@9e907b5e64f6b83e7804b09294d44122997950d6 # v3.29.5 with: sarif_file: results.sarif From 6f6c219f53ebd843b0f26b54aea4fa5dba7027af Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 18 Feb 2026 14:13:25 +0100 Subject: [PATCH 093/202] chore: bump tj-actions/changed-files from 47.0.1 to 47.0.4 (#2388) Bumps [tj-actions/changed-files](https://github.com/tj-actions/changed-files) from 47.0.1 to 47.0.4. - [Release notes](https://github.com/tj-actions/changed-files/releases) - [Changelog](https://github.com/tj-actions/changed-files/blob/main/HISTORY.md) - [Commits](https://github.com/tj-actions/changed-files/compare/e0021407031f5be11a464abee9a0776171c79891...7dee1b0c1557f278e5c7dc244927139d78c0e22a) --- updated-dependencies: - dependency-name: tj-actions/changed-files dependency-version: 47.0.4 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/check-build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/check-build.yml b/.github/workflows/check-build.yml index 06566d17a..e2c1e5053 100644 --- a/.github/workflows/check-build.yml +++ b/.github/workflows/check-build.yml @@ -99,7 +99,7 @@ jobs: fetch-depth: 0 - name: Get changed files id: changed-files - uses: tj-actions/changed-files@e0021407031f5be11a464abee9a0776171c79891 # v47.0.1 + uses: tj-actions/changed-files@7dee1b0c1557f278e5c7dc244927139d78c0e22a # v47.0.4 with: files: | powertools-*/** From 11233c8eb4aaceb7abf599b8786bb08088d0d1a1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 18 Feb 2026 14:13:44 +0100 Subject: [PATCH 094/202] chore: bump org.apache.avro:avro (#2386) Bumps org.apache.avro:avro from 1.12.0 to 1.12.1. --- updated-dependencies: - dependency-name: org.apache.avro:avro dependency-version: 1.12.1 dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- examples/powertools-examples-kafka/tools/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/powertools-examples-kafka/tools/pom.xml b/examples/powertools-examples-kafka/tools/pom.xml index e6f2654d1..7fb12f136 100644 --- a/examples/powertools-examples-kafka/tools/pom.xml +++ b/examples/powertools-examples-kafka/tools/pom.xml @@ -11,7 +11,7 @@ 11 11 - 1.12.0 + 1.12.1 4.31.0 4.0.0 From 31b4677e7a76430ba7cfc88ef5407ae766cb2455 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 18 Feb 2026 14:14:04 +0100 Subject: [PATCH 095/202] chore: bump sam/build-java25 (#2385) Bumps sam/build-java25 from `bffac7d` to `15e69d9`. --- updated-dependencies: - dependency-name: sam/build-java25 dependency-version: 15e69d9776709e299d2913e546d8d7fb30b9ca0b66e4fce6f3beb41604242bd8 dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- powertools-e2e-tests/src/test/resources/docker/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/powertools-e2e-tests/src/test/resources/docker/Dockerfile b/powertools-e2e-tests/src/test/resources/docker/Dockerfile index 1ceb29aa0..2b587e0a0 100644 --- a/powertools-e2e-tests/src/test/resources/docker/Dockerfile +++ b/powertools-e2e-tests/src/test/resources/docker/Dockerfile @@ -1,5 +1,5 @@ # Use the official AWS SAM base image for Java 25 -FROM public.ecr.aws/sam/build-java25@sha256:bffac7de6e418a93d2aefc1e8e7c79eda0971e7a026725fe618b58ddfba7a128 +FROM public.ecr.aws/sam/build-java25@sha256:15e69d9776709e299d2913e546d8d7fb30b9ca0b66e4fce6f3beb41604242bd8 # Install GraalVM dependencies RUN curl -4 -L https://download.oracle.com/graalvm/25/latest/graalvm-jdk-25_linux-x64_bin.tar.gz | tar -xvz From 66b0c14116a1b6f285f683c3ccd54cf18182b55a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 18 Feb 2026 14:14:40 +0100 Subject: [PATCH 096/202] chore: bump aws-actions/configure-aws-credentials from 5.1.1 to 6.0.0 (#2382) Bumps [aws-actions/configure-aws-credentials](https://github.com/aws-actions/configure-aws-credentials) from 5.1.1 to 6.0.0. - [Release notes](https://github.com/aws-actions/configure-aws-credentials/releases) - [Changelog](https://github.com/aws-actions/configure-aws-credentials/blob/main/CHANGELOG.md) - [Commits](https://github.com/aws-actions/configure-aws-credentials/compare/61815dcd50bd041e203e49132bacad1fd04d2708...8df5847569e6427dd6c4fb1cf565c83acfa8afa7) --- updated-dependencies: - dependency-name: aws-actions/configure-aws-credentials dependency-version: 6.0.0 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/build-docs.yml | 2 +- .github/workflows/check-e2e.yml | 4 ++-- .github/workflows/release.yml | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build-docs.yml b/.github/workflows/build-docs.yml index deadf289a..6a33820c7 100644 --- a/.github/workflows/build-docs.yml +++ b/.github/workflows/build-docs.yml @@ -43,7 +43,7 @@ jobs: docker build -t squidfunk/mkdocs-material ./docs/ docker run --rm -t -v ${PWD}:/docs squidfunk/mkdocs-material build - name: Configure AWS credentials - uses: aws-actions/configure-aws-credentials@61815dcd50bd041e203e49132bacad1fd04d2708 + uses: aws-actions/configure-aws-credentials@8df5847569e6427dd6c4fb1cf565c83acfa8afa7 with: aws-region: us-east-1 role-to-assume: ${{ secrets.AWS_DOCS_ROLE_ARN }} diff --git a/.github/workflows/check-e2e.yml b/.github/workflows/check-e2e.yml index f18a1438b..e89051154 100644 --- a/.github/workflows/check-e2e.yml +++ b/.github/workflows/check-e2e.yml @@ -65,7 +65,7 @@ jobs: java-version: ${{ matrix.java }} cache: maven - name: Setup AWS credentials - uses: aws-actions/configure-aws-credentials@61815dcd50bd041e203e49132bacad1fd04d2708 # v5.1.1 + uses: aws-actions/configure-aws-credentials@8df5847569e6427dd6c4fb1cf565c83acfa8afa7 # v6.0.0 with: role-to-assume: ${{ secrets.AWS_IAM_ROLE }} aws-region: us-east-1 @@ -96,7 +96,7 @@ jobs: java-version: ${{ matrix.java }} cache: maven - name: Setup AWS credentials - uses: aws-actions/configure-aws-credentials@61815dcd50bd041e203e49132bacad1fd04d2708 # v5.1.1 + uses: aws-actions/configure-aws-credentials@8df5847569e6427dd6c4fb1cf565c83acfa8afa7 # v6.0.0 with: role-to-assume: ${{ secrets.AWS_IAM_ROLE }} aws-region: us-east-1 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index e1a35a4ac..ee6582551 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -286,7 +286,7 @@ jobs: docker build -t squidfunk/mkdocs-material ./docs/ docker run --rm -t -v ${PWD}:/docs squidfunk/mkdocs-material build - name: Configure AWS credentials - uses: aws-actions/configure-aws-credentials@61815dcd50bd041e203e49132bacad1fd04d2708 + uses: aws-actions/configure-aws-credentials@8df5847569e6427dd6c4fb1cf565c83acfa8afa7 with: aws-region: us-east-1 role-to-assume: ${{ secrets.AWS_DOCS_ROLE_ARN }} From 7a188fa9ce910bc001b5f3480fbca9e944dedf6a Mon Sep 17 00:00:00 2001 From: cmtjk Date: Mon, 2 Mar 2026 14:27:43 +0100 Subject: [PATCH 097/202] feat(logging): add support for key-value pairs in using SLF4J fluent API and Logback backend (#2377) * feat(logging): add support for key-value pairs in LambdaJsonEncoder * feat(logging): add support for key-value pairs in LambdaEcsEncoder * feat(logging): add e2e tests for fluent api * feat(logging): cleanup, remove unused import * feat(logging/logback): exclude Powertools reserved keys from key-value pairs and sort remaining entries to match existing MDC handling behavior * feat(logging/logback): fix typos * feat(logging/logback): add logging docs regarding SLF4J Fluent Logging API * feat(logging/logback): remove test cases related to key-value pair deduplication and refactor * feat(logging/logback): update docs, align logback with log4j implementation --- docs/core/logging.md | 12 +++ .../handlers/logging-log4j-fluent-api/pom.xml | 82 +++++++++++++++++++ .../lambda/powertools/e2e/Function.java | 41 ++++++++++ .../amazon/lambda/powertools/e2e/Input.java | 38 +++++++++ .../aws-lambda-java-core/reflect-config.json | 13 +++ .../reflect-config.json | 35 ++++++++ .../jni-config.json | 11 +++ .../native-image.properties | 1 + .../reflect-config.json | 62 ++++++++++++++ .../resource-config.json | 19 +++++ .../reflect-config.json | 25 ++++++ .../reflect-config.json | 20 +++++ .../resource-config.json | 7 ++ .../src/main/resources/log4j2.xml | 17 ++++ .../logging-logback-fluent-api/pom.xml | 82 +++++++++++++++++++ .../lambda/powertools/e2e/Function.java | 41 ++++++++++ .../amazon/lambda/powertools/e2e/Input.java | 38 +++++++++ .../aws-lambda-java-core/reflect-config.json | 13 +++ .../reflect-config.json | 35 ++++++++ .../jni-config.json | 11 +++ .../native-image.properties | 1 + .../reflect-config.json | 62 ++++++++++++++ .../resource-config.json | 19 +++++ .../reflect-config.json | 25 ++++++ .../reflect-config.json | 20 +++++ .../resource-config.json | 7 ++ .../src/main/resources/logback.xml | 16 ++++ powertools-e2e-tests/handlers/pom.xml | 2 + .../amazon/lambda/powertools/LoggingE2ET.java | 2 +- .../logging/logback/LambdaEcsEncoder.java | 18 ++-- .../logging/logback/LambdaJsonEncoder.java | 19 +++-- .../internal/LambdaEcsEncoderTest.java | 40 +++++++++ .../internal/LambdaJsonEncoderTest.java | 39 +++++++++ 33 files changed, 858 insertions(+), 15 deletions(-) create mode 100644 powertools-e2e-tests/handlers/logging-log4j-fluent-api/pom.xml create mode 100644 powertools-e2e-tests/handlers/logging-log4j-fluent-api/src/main/java/software/amazon/lambda/powertools/e2e/Function.java create mode 100644 powertools-e2e-tests/handlers/logging-log4j-fluent-api/src/main/java/software/amazon/lambda/powertools/e2e/Input.java create mode 100644 powertools-e2e-tests/handlers/logging-log4j-fluent-api/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-core/reflect-config.json create mode 100644 powertools-e2e-tests/handlers/logging-log4j-fluent-api/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-events/reflect-config.json create mode 100644 powertools-e2e-tests/handlers/logging-log4j-fluent-api/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/jni-config.json create mode 100644 powertools-e2e-tests/handlers/logging-log4j-fluent-api/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/native-image.properties create mode 100644 powertools-e2e-tests/handlers/logging-log4j-fluent-api/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/reflect-config.json create mode 100644 powertools-e2e-tests/handlers/logging-log4j-fluent-api/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/resource-config.json create mode 100644 powertools-e2e-tests/handlers/logging-log4j-fluent-api/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-serialization/reflect-config.json create mode 100644 powertools-e2e-tests/handlers/logging-log4j-fluent-api/src/main/resources/META-INF/native-image/software.amazon.lambda.powertools.e2e/reflect-config.json create mode 100644 powertools-e2e-tests/handlers/logging-log4j-fluent-api/src/main/resources/META-INF/native-image/software.amazon.lambda.powertools.e2e/resource-config.json create mode 100644 powertools-e2e-tests/handlers/logging-log4j-fluent-api/src/main/resources/log4j2.xml create mode 100644 powertools-e2e-tests/handlers/logging-logback-fluent-api/pom.xml create mode 100644 powertools-e2e-tests/handlers/logging-logback-fluent-api/src/main/java/software/amazon/lambda/powertools/e2e/Function.java create mode 100644 powertools-e2e-tests/handlers/logging-logback-fluent-api/src/main/java/software/amazon/lambda/powertools/e2e/Input.java create mode 100644 powertools-e2e-tests/handlers/logging-logback-fluent-api/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-core/reflect-config.json create mode 100644 powertools-e2e-tests/handlers/logging-logback-fluent-api/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-events/reflect-config.json create mode 100644 powertools-e2e-tests/handlers/logging-logback-fluent-api/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/jni-config.json create mode 100644 powertools-e2e-tests/handlers/logging-logback-fluent-api/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/native-image.properties create mode 100644 powertools-e2e-tests/handlers/logging-logback-fluent-api/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/reflect-config.json create mode 100644 powertools-e2e-tests/handlers/logging-logback-fluent-api/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/resource-config.json create mode 100644 powertools-e2e-tests/handlers/logging-logback-fluent-api/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-serialization/reflect-config.json create mode 100644 powertools-e2e-tests/handlers/logging-logback-fluent-api/src/main/resources/META-INF/native-image/software.amazon.lambda.powertools.e2e/reflect-config.json create mode 100644 powertools-e2e-tests/handlers/logging-logback-fluent-api/src/main/resources/META-INF/native-image/software.amazon.lambda.powertools.e2e/resource-config.json create mode 100644 powertools-e2e-tests/handlers/logging-logback-fluent-api/src/main/resources/logback.xml diff --git a/docs/core/logging.md b/docs/core/logging.md index 8358087d2..4a53e06e2 100644 --- a/docs/core/logging.md +++ b/docs/core/logging.md @@ -378,6 +378,18 @@ You can use Powertools for AWS Lambda Logging with either the `@Logging` annotat } ``` +???+ warning "Do not reuse reserved keys" + + Do not reuse reserved keys listed in [standard structured keys](#standard-structured-keys) and [additional structured keys](#additional-structured-keys). + This restriction applies to all structured logging mechanisms, including: + + - Log arguments + - MDC entries + - `addKeyValue(...)` or `addArgument(...)` of [SLF4J Fluent Logging API](https://www.slf4j.org/manual.html#fluent) + - Any other structured data fields + + Reusing reserved keys in any of these contexts may result in unintended or inconsistent behavior. + ## Standard structured keys Your logs will always include the following keys in your structured logging: diff --git a/powertools-e2e-tests/handlers/logging-log4j-fluent-api/pom.xml b/powertools-e2e-tests/handlers/logging-log4j-fluent-api/pom.xml new file mode 100644 index 000000000..8432aa604 --- /dev/null +++ b/powertools-e2e-tests/handlers/logging-log4j-fluent-api/pom.xml @@ -0,0 +1,82 @@ + + 4.0.0 + + + software.amazon.lambda + e2e-test-handlers-parent + 2.9.0 + + + e2e-test-handler-logging-log4j-fluent-api + jar + E2E test handler – Logging Log4j Fluent API + + + + software.amazon.lambda + powertools-logging-log4j + + + org.aspectj + aspectjrt + + + com.amazonaws + aws-lambda-java-events + + + com.amazonaws + aws-lambda-java-runtime-interface-client + + + com.amazonaws + aws-lambda-java-core + + + + + + + dev.aspectj + aspectj-maven-plugin + + ${maven.compiler.source} + ${maven.compiler.target} + ${maven.compiler.target} + + + software.amazon.lambda + powertools-logging + + + + + + + compile + + + + + + org.apache.maven.plugins + maven-shade-plugin + + + + + + + native-image + + + + org.graalvm.buildtools + native-maven-plugin + + + + + + diff --git a/powertools-e2e-tests/handlers/logging-log4j-fluent-api/src/main/java/software/amazon/lambda/powertools/e2e/Function.java b/powertools-e2e-tests/handlers/logging-log4j-fluent-api/src/main/java/software/amazon/lambda/powertools/e2e/Function.java new file mode 100644 index 000000000..fbd6d7286 --- /dev/null +++ b/powertools-e2e-tests/handlers/logging-log4j-fluent-api/src/main/java/software/amazon/lambda/powertools/e2e/Function.java @@ -0,0 +1,41 @@ +/* + * Copyright 2023 Amazon.com, Inc. or its affiliates. + * Licensed under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * 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. + * + */ + +package software.amazon.lambda.powertools.e2e; + +import com.amazonaws.services.lambda.runtime.Context; +import com.amazonaws.services.lambda.runtime.RequestHandler; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.slf4j.spi.LoggingEventBuilder; +import software.amazon.lambda.powertools.logging.Logging; +import software.amazon.lambda.powertools.logging.PowertoolsLogging; + +public class Function implements RequestHandler { + private static final Logger LOG = LoggerFactory.getLogger(Function.class); + + @Logging + public String handleRequest(Input input, Context context) { + + LoggingEventBuilder loggingEventBuilder = LOG.atInfo().setMessage(input.getMessage()); + //noinspection ResultOfMethodCallIgnored + input.getKeys().forEach(loggingEventBuilder::addKeyValue); + loggingEventBuilder.log(); + + // Flush buffer manually since we buffer at INFO level to test log buffering + PowertoolsLogging.flushBuffer(); + + return "OK"; + } +} diff --git a/powertools-e2e-tests/handlers/logging-log4j-fluent-api/src/main/java/software/amazon/lambda/powertools/e2e/Input.java b/powertools-e2e-tests/handlers/logging-log4j-fluent-api/src/main/java/software/amazon/lambda/powertools/e2e/Input.java new file mode 100644 index 000000000..66fd49ddc --- /dev/null +++ b/powertools-e2e-tests/handlers/logging-log4j-fluent-api/src/main/java/software/amazon/lambda/powertools/e2e/Input.java @@ -0,0 +1,38 @@ +/* + * Copyright 2023 Amazon.com, Inc. or its affiliates. + * Licensed under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * 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. + * + */ + +package software.amazon.lambda.powertools.e2e; + +import java.util.Map; + +public class Input { + private String message; + private Map keys; + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public Map getKeys() { + return keys; + } + + public void setKeys(Map keys) { + this.keys = keys; + } +} diff --git a/powertools-e2e-tests/handlers/logging-log4j-fluent-api/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-core/reflect-config.json b/powertools-e2e-tests/handlers/logging-log4j-fluent-api/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-core/reflect-config.json new file mode 100644 index 000000000..2780aca09 --- /dev/null +++ b/powertools-e2e-tests/handlers/logging-log4j-fluent-api/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-core/reflect-config.json @@ -0,0 +1,13 @@ +[ + { + "name":"com.amazonaws.services.lambda.runtime.LambdaRuntime", + "methods":[{"name":"","parameterTypes":[] }], + "fields":[{"name":"logger"}], + "allPublicMethods":true + }, + { + "name":"com.amazonaws.services.lambda.runtime.LambdaRuntimeInternal", + "methods":[{"name":"","parameterTypes":[] }], + "allPublicMethods":true + } +] \ No newline at end of file diff --git a/powertools-e2e-tests/handlers/logging-log4j-fluent-api/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-events/reflect-config.json b/powertools-e2e-tests/handlers/logging-log4j-fluent-api/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-events/reflect-config.json new file mode 100644 index 000000000..ddda5d5f1 --- /dev/null +++ b/powertools-e2e-tests/handlers/logging-log4j-fluent-api/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-events/reflect-config.json @@ -0,0 +1,35 @@ +[ + { + "name": "com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent", + "allDeclaredFields": true, + "allDeclaredMethods": true, + "allDeclaredConstructors": true + }, + { + "name": "com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent$ProxyRequestContext", + "allDeclaredFields": true, + "allDeclaredMethods": true, + "allDeclaredConstructors": true + }, + { + "name": "com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent$RequestIdentity", + "allDeclaredFields": true, + "allDeclaredMethods": true, + "allDeclaredConstructors": true + }, + { + "name": "com.amazonaws.services.lambda.runtime.events.APIGatewayProxyResponseEvent", + "allDeclaredFields": true, + "allDeclaredMethods": true, + "allDeclaredConstructors": true + }, + { + "name": "com.amazonaws.services.lambda.runtime.events.APIGatewayProxyResponseEvent", + "allDeclaredConstructors": true, + "allPublicConstructors": true, + "allDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + } +] \ No newline at end of file diff --git a/powertools-e2e-tests/handlers/logging-log4j-fluent-api/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/jni-config.json b/powertools-e2e-tests/handlers/logging-log4j-fluent-api/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/jni-config.json new file mode 100644 index 000000000..91be72f7a --- /dev/null +++ b/powertools-e2e-tests/handlers/logging-log4j-fluent-api/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/jni-config.json @@ -0,0 +1,11 @@ +[ + { + "name":"com.amazonaws.services.lambda.runtime.api.client.runtimeapi.LambdaRuntimeClientException", + "methods":[{"name":"","parameterTypes":["java.lang.String","int"] }] + }, + { + "name":"com.amazonaws.services.lambda.runtime.api.client.runtimeapi.dto.InvocationRequest", + "fields":[{"name":"id"}, {"name":"invokedFunctionArn"}, {"name":"deadlineTimeInMs"}, {"name":"xrayTraceId"}, {"name":"clientContext"}, {"name":"cognitoIdentity"}, {"name": "tenantId"}, {"name":"content"}], + "allPublicMethods":true + } +] \ No newline at end of file diff --git a/powertools-e2e-tests/handlers/logging-log4j-fluent-api/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/native-image.properties b/powertools-e2e-tests/handlers/logging-log4j-fluent-api/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/native-image.properties new file mode 100644 index 000000000..20f8b7801 --- /dev/null +++ b/powertools-e2e-tests/handlers/logging-log4j-fluent-api/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/native-image.properties @@ -0,0 +1 @@ +Args = --initialize-at-build-time=jdk.xml.internal.SecuritySupport \ No newline at end of file diff --git a/powertools-e2e-tests/handlers/logging-log4j-fluent-api/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/reflect-config.json b/powertools-e2e-tests/handlers/logging-log4j-fluent-api/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/reflect-config.json new file mode 100644 index 000000000..467af67a0 --- /dev/null +++ b/powertools-e2e-tests/handlers/logging-log4j-fluent-api/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/reflect-config.json @@ -0,0 +1,62 @@ +[ + { + "name": "com.amazonaws.lambda.thirdparty.com.fasterxml.jackson.databind.deser.Deserializers[]" + }, + { + "name": "com.amazonaws.lambda.thirdparty.com.fasterxml.jackson.databind.ext.Java7SupportImpl", + "methods": [{ "name": "", "parameterTypes": [] }] + }, + { + "name": "com.amazonaws.services.lambda.runtime.LambdaRuntime", + "fields": [{ "name": "logger" }] + }, + { + "name": "com.amazonaws.services.lambda.runtime.logging.LogLevel", + "allDeclaredConstructors": true, + "allPublicConstructors": true, + "allDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredFields": true, + "allPublicFields": true + }, + { + "name": "com.amazonaws.services.lambda.runtime.logging.LogFormat", + "allDeclaredConstructors": true, + "allPublicConstructors": true, + "allDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredFields": true, + "allPublicFields": true + }, + { + "name": "java.lang.Void", + "methods": [{ "name": "", "parameterTypes": [] }] + }, + { + "name": "java.util.Collections$UnmodifiableMap", + "fields": [{ "name": "m" }] + }, + { + "name": "jdk.internal.module.IllegalAccessLogger", + "fields": [{ "name": "logger" }] + }, + { + "name": "sun.misc.Unsafe", + "fields": [{ "name": "theUnsafe" }] + }, + { + "name": "com.amazonaws.services.lambda.runtime.api.client.runtimeapi.dto.InvocationRequest", + "fields": [ + { "name": "id" }, + { "name": "invokedFunctionArn" }, + { "name": "deadlineTimeInMs" }, + { "name": "xrayTraceId" }, + { "name": "clientContext" }, + { "name": "cognitoIdentity" }, + { "name": "tenantId" }, + { "name": "content" } + ], + "allPublicMethods": true, + "unsafeAllocated": true + } +] diff --git a/powertools-e2e-tests/handlers/logging-log4j-fluent-api/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/resource-config.json b/powertools-e2e-tests/handlers/logging-log4j-fluent-api/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/resource-config.json new file mode 100644 index 000000000..1062b4249 --- /dev/null +++ b/powertools-e2e-tests/handlers/logging-log4j-fluent-api/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/resource-config.json @@ -0,0 +1,19 @@ +{ + "resources": { + "includes": [ + { + "pattern": "\\Qjni/libaws-lambda-jni.linux-aarch_64.so\\E" + }, + { + "pattern": "\\Qjni/libaws-lambda-jni.linux-x86_64.so\\E" + }, + { + "pattern": "\\Qjni/libaws-lambda-jni.linux_musl-aarch_64.so\\E" + }, + { + "pattern": "\\Qjni/libaws-lambda-jni.linux_musl-x86_64.so\\E" + } + ] + }, + "bundles": [] +} \ No newline at end of file diff --git a/powertools-e2e-tests/handlers/logging-log4j-fluent-api/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-serialization/reflect-config.json b/powertools-e2e-tests/handlers/logging-log4j-fluent-api/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-serialization/reflect-config.json new file mode 100644 index 000000000..9890688f9 --- /dev/null +++ b/powertools-e2e-tests/handlers/logging-log4j-fluent-api/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-serialization/reflect-config.json @@ -0,0 +1,25 @@ +[ + { + "name": "com.amazonaws.lambda.thirdparty.com.fasterxml.jackson.databind.deser.Deserializers[]" + }, + { + "name": "com.amazonaws.lambda.thirdparty.com.fasterxml.jackson.databind.ext.Java7HandlersImpl", + "methods": [{ "name": "", "parameterTypes": [] }] + }, + { + "name": "com.amazonaws.lambda.thirdparty.com.fasterxml.jackson.databind.ext.Java7SupportImpl", + "methods": [{ "name": "", "parameterTypes": [] }] + }, + { + "name": "com.amazonaws.lambda.thirdparty.com.fasterxml.jackson.databind.ser.Serializers[]" + }, + { + "name": "org.joda.time.DateTime", + "allDeclaredConstructors": true, + "allPublicConstructors": true, + "allDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + } +] diff --git a/powertools-e2e-tests/handlers/logging-log4j-fluent-api/src/main/resources/META-INF/native-image/software.amazon.lambda.powertools.e2e/reflect-config.json b/powertools-e2e-tests/handlers/logging-log4j-fluent-api/src/main/resources/META-INF/native-image/software.amazon.lambda.powertools.e2e/reflect-config.json new file mode 100644 index 000000000..9ddd235e2 --- /dev/null +++ b/powertools-e2e-tests/handlers/logging-log4j-fluent-api/src/main/resources/META-INF/native-image/software.amazon.lambda.powertools.e2e/reflect-config.json @@ -0,0 +1,20 @@ +[ + { + "name": "software.amazon.lambda.powertools.e2e.Function", + "allDeclaredConstructors": true, + "allPublicConstructors": true, + "allDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "software.amazon.lambda.powertools.e2e.Input", + "allDeclaredConstructors": true, + "allPublicConstructors": true, + "allDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + } +] diff --git a/powertools-e2e-tests/handlers/logging-log4j-fluent-api/src/main/resources/META-INF/native-image/software.amazon.lambda.powertools.e2e/resource-config.json b/powertools-e2e-tests/handlers/logging-log4j-fluent-api/src/main/resources/META-INF/native-image/software.amazon.lambda.powertools.e2e/resource-config.json new file mode 100644 index 000000000..be6aac3f6 --- /dev/null +++ b/powertools-e2e-tests/handlers/logging-log4j-fluent-api/src/main/resources/META-INF/native-image/software.amazon.lambda.powertools.e2e/resource-config.json @@ -0,0 +1,7 @@ +{ + "resources":{ + "includes":[{ + "pattern":"\\Qlog4j2.xml\\E" + }]}, + "bundles":[] +} diff --git a/powertools-e2e-tests/handlers/logging-log4j-fluent-api/src/main/resources/log4j2.xml b/powertools-e2e-tests/handlers/logging-log4j-fluent-api/src/main/resources/log4j2.xml new file mode 100644 index 000000000..28e03a9e0 --- /dev/null +++ b/powertools-e2e-tests/handlers/logging-log4j-fluent-api/src/main/resources/log4j2.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/powertools-e2e-tests/handlers/logging-logback-fluent-api/pom.xml b/powertools-e2e-tests/handlers/logging-logback-fluent-api/pom.xml new file mode 100644 index 000000000..83d0abddb --- /dev/null +++ b/powertools-e2e-tests/handlers/logging-logback-fluent-api/pom.xml @@ -0,0 +1,82 @@ + + 4.0.0 + + + software.amazon.lambda + e2e-test-handlers-parent + 2.9.0 + + + e2e-test-handler-logging-logback-fluent-api + jar + E2E test handler – Logging Logback Fluent API + + + + software.amazon.lambda + powertools-logging-logback + + + org.aspectj + aspectjrt + + + com.amazonaws + aws-lambda-java-events + + + com.amazonaws + aws-lambda-java-runtime-interface-client + + + com.amazonaws + aws-lambda-java-core + + + + + + + dev.aspectj + aspectj-maven-plugin + + ${maven.compiler.source} + ${maven.compiler.target} + ${maven.compiler.target} + + + software.amazon.lambda + powertools-logging + + + + + + + compile + + + + + + org.apache.maven.plugins + maven-shade-plugin + + + + + + + native-image + + + + org.graalvm.buildtools + native-maven-plugin + + + + + + diff --git a/powertools-e2e-tests/handlers/logging-logback-fluent-api/src/main/java/software/amazon/lambda/powertools/e2e/Function.java b/powertools-e2e-tests/handlers/logging-logback-fluent-api/src/main/java/software/amazon/lambda/powertools/e2e/Function.java new file mode 100644 index 000000000..fbd6d7286 --- /dev/null +++ b/powertools-e2e-tests/handlers/logging-logback-fluent-api/src/main/java/software/amazon/lambda/powertools/e2e/Function.java @@ -0,0 +1,41 @@ +/* + * Copyright 2023 Amazon.com, Inc. or its affiliates. + * Licensed under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * 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. + * + */ + +package software.amazon.lambda.powertools.e2e; + +import com.amazonaws.services.lambda.runtime.Context; +import com.amazonaws.services.lambda.runtime.RequestHandler; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.slf4j.spi.LoggingEventBuilder; +import software.amazon.lambda.powertools.logging.Logging; +import software.amazon.lambda.powertools.logging.PowertoolsLogging; + +public class Function implements RequestHandler { + private static final Logger LOG = LoggerFactory.getLogger(Function.class); + + @Logging + public String handleRequest(Input input, Context context) { + + LoggingEventBuilder loggingEventBuilder = LOG.atInfo().setMessage(input.getMessage()); + //noinspection ResultOfMethodCallIgnored + input.getKeys().forEach(loggingEventBuilder::addKeyValue); + loggingEventBuilder.log(); + + // Flush buffer manually since we buffer at INFO level to test log buffering + PowertoolsLogging.flushBuffer(); + + return "OK"; + } +} diff --git a/powertools-e2e-tests/handlers/logging-logback-fluent-api/src/main/java/software/amazon/lambda/powertools/e2e/Input.java b/powertools-e2e-tests/handlers/logging-logback-fluent-api/src/main/java/software/amazon/lambda/powertools/e2e/Input.java new file mode 100644 index 000000000..66fd49ddc --- /dev/null +++ b/powertools-e2e-tests/handlers/logging-logback-fluent-api/src/main/java/software/amazon/lambda/powertools/e2e/Input.java @@ -0,0 +1,38 @@ +/* + * Copyright 2023 Amazon.com, Inc. or its affiliates. + * Licensed under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * 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. + * + */ + +package software.amazon.lambda.powertools.e2e; + +import java.util.Map; + +public class Input { + private String message; + private Map keys; + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public Map getKeys() { + return keys; + } + + public void setKeys(Map keys) { + this.keys = keys; + } +} diff --git a/powertools-e2e-tests/handlers/logging-logback-fluent-api/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-core/reflect-config.json b/powertools-e2e-tests/handlers/logging-logback-fluent-api/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-core/reflect-config.json new file mode 100644 index 000000000..2780aca09 --- /dev/null +++ b/powertools-e2e-tests/handlers/logging-logback-fluent-api/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-core/reflect-config.json @@ -0,0 +1,13 @@ +[ + { + "name":"com.amazonaws.services.lambda.runtime.LambdaRuntime", + "methods":[{"name":"","parameterTypes":[] }], + "fields":[{"name":"logger"}], + "allPublicMethods":true + }, + { + "name":"com.amazonaws.services.lambda.runtime.LambdaRuntimeInternal", + "methods":[{"name":"","parameterTypes":[] }], + "allPublicMethods":true + } +] \ No newline at end of file diff --git a/powertools-e2e-tests/handlers/logging-logback-fluent-api/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-events/reflect-config.json b/powertools-e2e-tests/handlers/logging-logback-fluent-api/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-events/reflect-config.json new file mode 100644 index 000000000..ddda5d5f1 --- /dev/null +++ b/powertools-e2e-tests/handlers/logging-logback-fluent-api/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-events/reflect-config.json @@ -0,0 +1,35 @@ +[ + { + "name": "com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent", + "allDeclaredFields": true, + "allDeclaredMethods": true, + "allDeclaredConstructors": true + }, + { + "name": "com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent$ProxyRequestContext", + "allDeclaredFields": true, + "allDeclaredMethods": true, + "allDeclaredConstructors": true + }, + { + "name": "com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent$RequestIdentity", + "allDeclaredFields": true, + "allDeclaredMethods": true, + "allDeclaredConstructors": true + }, + { + "name": "com.amazonaws.services.lambda.runtime.events.APIGatewayProxyResponseEvent", + "allDeclaredFields": true, + "allDeclaredMethods": true, + "allDeclaredConstructors": true + }, + { + "name": "com.amazonaws.services.lambda.runtime.events.APIGatewayProxyResponseEvent", + "allDeclaredConstructors": true, + "allPublicConstructors": true, + "allDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + } +] \ No newline at end of file diff --git a/powertools-e2e-tests/handlers/logging-logback-fluent-api/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/jni-config.json b/powertools-e2e-tests/handlers/logging-logback-fluent-api/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/jni-config.json new file mode 100644 index 000000000..91be72f7a --- /dev/null +++ b/powertools-e2e-tests/handlers/logging-logback-fluent-api/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/jni-config.json @@ -0,0 +1,11 @@ +[ + { + "name":"com.amazonaws.services.lambda.runtime.api.client.runtimeapi.LambdaRuntimeClientException", + "methods":[{"name":"","parameterTypes":["java.lang.String","int"] }] + }, + { + "name":"com.amazonaws.services.lambda.runtime.api.client.runtimeapi.dto.InvocationRequest", + "fields":[{"name":"id"}, {"name":"invokedFunctionArn"}, {"name":"deadlineTimeInMs"}, {"name":"xrayTraceId"}, {"name":"clientContext"}, {"name":"cognitoIdentity"}, {"name": "tenantId"}, {"name":"content"}], + "allPublicMethods":true + } +] \ No newline at end of file diff --git a/powertools-e2e-tests/handlers/logging-logback-fluent-api/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/native-image.properties b/powertools-e2e-tests/handlers/logging-logback-fluent-api/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/native-image.properties new file mode 100644 index 000000000..20f8b7801 --- /dev/null +++ b/powertools-e2e-tests/handlers/logging-logback-fluent-api/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/native-image.properties @@ -0,0 +1 @@ +Args = --initialize-at-build-time=jdk.xml.internal.SecuritySupport \ No newline at end of file diff --git a/powertools-e2e-tests/handlers/logging-logback-fluent-api/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/reflect-config.json b/powertools-e2e-tests/handlers/logging-logback-fluent-api/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/reflect-config.json new file mode 100644 index 000000000..467af67a0 --- /dev/null +++ b/powertools-e2e-tests/handlers/logging-logback-fluent-api/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/reflect-config.json @@ -0,0 +1,62 @@ +[ + { + "name": "com.amazonaws.lambda.thirdparty.com.fasterxml.jackson.databind.deser.Deserializers[]" + }, + { + "name": "com.amazonaws.lambda.thirdparty.com.fasterxml.jackson.databind.ext.Java7SupportImpl", + "methods": [{ "name": "", "parameterTypes": [] }] + }, + { + "name": "com.amazonaws.services.lambda.runtime.LambdaRuntime", + "fields": [{ "name": "logger" }] + }, + { + "name": "com.amazonaws.services.lambda.runtime.logging.LogLevel", + "allDeclaredConstructors": true, + "allPublicConstructors": true, + "allDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredFields": true, + "allPublicFields": true + }, + { + "name": "com.amazonaws.services.lambda.runtime.logging.LogFormat", + "allDeclaredConstructors": true, + "allPublicConstructors": true, + "allDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredFields": true, + "allPublicFields": true + }, + { + "name": "java.lang.Void", + "methods": [{ "name": "", "parameterTypes": [] }] + }, + { + "name": "java.util.Collections$UnmodifiableMap", + "fields": [{ "name": "m" }] + }, + { + "name": "jdk.internal.module.IllegalAccessLogger", + "fields": [{ "name": "logger" }] + }, + { + "name": "sun.misc.Unsafe", + "fields": [{ "name": "theUnsafe" }] + }, + { + "name": "com.amazonaws.services.lambda.runtime.api.client.runtimeapi.dto.InvocationRequest", + "fields": [ + { "name": "id" }, + { "name": "invokedFunctionArn" }, + { "name": "deadlineTimeInMs" }, + { "name": "xrayTraceId" }, + { "name": "clientContext" }, + { "name": "cognitoIdentity" }, + { "name": "tenantId" }, + { "name": "content" } + ], + "allPublicMethods": true, + "unsafeAllocated": true + } +] diff --git a/powertools-e2e-tests/handlers/logging-logback-fluent-api/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/resource-config.json b/powertools-e2e-tests/handlers/logging-logback-fluent-api/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/resource-config.json new file mode 100644 index 000000000..1062b4249 --- /dev/null +++ b/powertools-e2e-tests/handlers/logging-logback-fluent-api/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/resource-config.json @@ -0,0 +1,19 @@ +{ + "resources": { + "includes": [ + { + "pattern": "\\Qjni/libaws-lambda-jni.linux-aarch_64.so\\E" + }, + { + "pattern": "\\Qjni/libaws-lambda-jni.linux-x86_64.so\\E" + }, + { + "pattern": "\\Qjni/libaws-lambda-jni.linux_musl-aarch_64.so\\E" + }, + { + "pattern": "\\Qjni/libaws-lambda-jni.linux_musl-x86_64.so\\E" + } + ] + }, + "bundles": [] +} \ No newline at end of file diff --git a/powertools-e2e-tests/handlers/logging-logback-fluent-api/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-serialization/reflect-config.json b/powertools-e2e-tests/handlers/logging-logback-fluent-api/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-serialization/reflect-config.json new file mode 100644 index 000000000..9890688f9 --- /dev/null +++ b/powertools-e2e-tests/handlers/logging-logback-fluent-api/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-serialization/reflect-config.json @@ -0,0 +1,25 @@ +[ + { + "name": "com.amazonaws.lambda.thirdparty.com.fasterxml.jackson.databind.deser.Deserializers[]" + }, + { + "name": "com.amazonaws.lambda.thirdparty.com.fasterxml.jackson.databind.ext.Java7HandlersImpl", + "methods": [{ "name": "", "parameterTypes": [] }] + }, + { + "name": "com.amazonaws.lambda.thirdparty.com.fasterxml.jackson.databind.ext.Java7SupportImpl", + "methods": [{ "name": "", "parameterTypes": [] }] + }, + { + "name": "com.amazonaws.lambda.thirdparty.com.fasterxml.jackson.databind.ser.Serializers[]" + }, + { + "name": "org.joda.time.DateTime", + "allDeclaredConstructors": true, + "allPublicConstructors": true, + "allDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + } +] diff --git a/powertools-e2e-tests/handlers/logging-logback-fluent-api/src/main/resources/META-INF/native-image/software.amazon.lambda.powertools.e2e/reflect-config.json b/powertools-e2e-tests/handlers/logging-logback-fluent-api/src/main/resources/META-INF/native-image/software.amazon.lambda.powertools.e2e/reflect-config.json new file mode 100644 index 000000000..9ddd235e2 --- /dev/null +++ b/powertools-e2e-tests/handlers/logging-logback-fluent-api/src/main/resources/META-INF/native-image/software.amazon.lambda.powertools.e2e/reflect-config.json @@ -0,0 +1,20 @@ +[ + { + "name": "software.amazon.lambda.powertools.e2e.Function", + "allDeclaredConstructors": true, + "allPublicConstructors": true, + "allDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "software.amazon.lambda.powertools.e2e.Input", + "allDeclaredConstructors": true, + "allPublicConstructors": true, + "allDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + } +] diff --git a/powertools-e2e-tests/handlers/logging-logback-fluent-api/src/main/resources/META-INF/native-image/software.amazon.lambda.powertools.e2e/resource-config.json b/powertools-e2e-tests/handlers/logging-logback-fluent-api/src/main/resources/META-INF/native-image/software.amazon.lambda.powertools.e2e/resource-config.json new file mode 100644 index 000000000..a603a9398 --- /dev/null +++ b/powertools-e2e-tests/handlers/logging-logback-fluent-api/src/main/resources/META-INF/native-image/software.amazon.lambda.powertools.e2e/resource-config.json @@ -0,0 +1,7 @@ +{ + "resources":{ + "includes":[{ + "pattern":"\\Qlogback.xml\\E" + }]}, + "bundles":[] +} diff --git a/powertools-e2e-tests/handlers/logging-logback-fluent-api/src/main/resources/logback.xml b/powertools-e2e-tests/handlers/logging-logback-fluent-api/src/main/resources/logback.xml new file mode 100644 index 000000000..0a5e4d146 --- /dev/null +++ b/powertools-e2e-tests/handlers/logging-logback-fluent-api/src/main/resources/logback.xml @@ -0,0 +1,16 @@ + + + + + + + + + INFO + + + + + + + \ No newline at end of file diff --git a/powertools-e2e-tests/handlers/pom.xml b/powertools-e2e-tests/handlers/pom.xml index 585bb83db..c9a4826a2 100644 --- a/powertools-e2e-tests/handlers/pom.xml +++ b/powertools-e2e-tests/handlers/pom.xml @@ -30,7 +30,9 @@ largemessage-functional largemessage_idempotent logging-log4j + logging-log4j-fluent-api logging-logback + logging-logback-fluent-api logging-functional tracing metrics diff --git a/powertools-e2e-tests/src/test/java/software/amazon/lambda/powertools/LoggingE2ET.java b/powertools-e2e-tests/src/test/java/software/amazon/lambda/powertools/LoggingE2ET.java index 20bc5394d..364029214 100644 --- a/powertools-e2e-tests/src/test/java/software/amazon/lambda/powertools/LoggingE2ET.java +++ b/powertools-e2e-tests/src/test/java/software/amazon/lambda/powertools/LoggingE2ET.java @@ -70,7 +70,7 @@ void tearDown() { } @ParameterizedTest - @ValueSource(strings = { "logging-log4j", "logging-logback", "logging-functional" }) + @ValueSource(strings = { "logging-log4j", "logging-log4j-fluent-api", "logging-logback", "logging-logback-fluent-api", "logging-functional" }) @Timeout(value = 15, unit = TimeUnit.MINUTES) void test_logInfoWithAdditionalKeys(String pathToFunction) throws JsonProcessingException { setupInfrastructure(pathToFunction); diff --git a/powertools-logging/powertools-logging-logback/src/main/java/software/amazon/lambda/powertools/logging/logback/LambdaEcsEncoder.java b/powertools-logging/powertools-logging-logback/src/main/java/software/amazon/lambda/powertools/logging/logback/LambdaEcsEncoder.java index 6a82d8e67..b934f378d 100644 --- a/powertools-logging/powertools-logging-logback/src/main/java/software/amazon/lambda/powertools/logging/logback/LambdaEcsEncoder.java +++ b/powertools-logging/powertools-logging-logback/src/main/java/software/amazon/lambda/powertools/logging/logback/LambdaEcsEncoder.java @@ -23,9 +23,7 @@ import static software.amazon.lambda.powertools.logging.internal.PowertoolsLoggedFields.FUNCTION_REQUEST_ID; import static software.amazon.lambda.powertools.logging.internal.PowertoolsLoggedFields.FUNCTION_TRACE_ID; import static software.amazon.lambda.powertools.logging.internal.PowertoolsLoggedFields.FUNCTION_VERSION; -import static software.amazon.lambda.powertools.logging.logback.JsonUtils.serializeArguments; -import static software.amazon.lambda.powertools.logging.logback.JsonUtils.serializeMDCEntries; -import static software.amazon.lambda.powertools.logging.logback.JsonUtils.serializeTimestamp; +import static software.amazon.lambda.powertools.logging.logback.JsonUtils.*; import ch.qos.logback.classic.pattern.ThrowableHandlingConverter; import ch.qos.logback.classic.pattern.ThrowableProxyConverter; @@ -34,8 +32,8 @@ import ch.qos.logback.classic.spi.ThrowableProxy; import ch.qos.logback.core.encoder.EncoderBase; import java.io.IOException; -import java.util.Arrays; -import java.util.Map; +import java.util.*; + import software.amazon.lambda.powertools.common.internal.LambdaHandlerProcessor; import software.amazon.lambda.powertools.logging.internal.JsonSerializer; @@ -99,7 +97,8 @@ public byte[] headerBytes() { @SuppressWarnings("java:S106") @Override public byte[] encode(ILoggingEvent event) { - final Map mdcPropertyMap = event.getMDCPropertyMap(); + final Map mdcPropertyMap = new TreeMap<>(event.getMDCPropertyMap()); + mdcPropertyMap.putAll(getKeyValuePairs(event)); StringBuilder builder = new StringBuilder(); try (JsonSerializer serializer = new JsonSerializer(builder)) { @@ -142,6 +141,13 @@ public byte[] encode(ILoggingEvent event) { return builder.toString().getBytes(UTF_8); } + private Map getKeyValuePairs(ILoggingEvent event) { + return Optional.ofNullable(event.getKeyValuePairs()) + .orElse(Collections.emptyList()).stream() + .filter(Objects::nonNull) + .collect(TreeMap::new, (map, kvp) -> map.put(String.valueOf(kvp.key), String.valueOf(kvp.value)), TreeMap::putAll); + } + private void serializeFunctionInfo(JsonSerializer serializer, String arn, Map mdcPropertyMap) { if (includeFaasInfo) { serializer.writeRaw(','); diff --git a/powertools-logging/powertools-logging-logback/src/main/java/software/amazon/lambda/powertools/logging/logback/LambdaJsonEncoder.java b/powertools-logging/powertools-logging-logback/src/main/java/software/amazon/lambda/powertools/logging/logback/LambdaJsonEncoder.java index 9afaf0ab7..49368ae99 100644 --- a/powertools-logging/powertools-logging-logback/src/main/java/software/amazon/lambda/powertools/logging/logback/LambdaJsonEncoder.java +++ b/powertools-logging/powertools-logging-logback/src/main/java/software/amazon/lambda/powertools/logging/logback/LambdaJsonEncoder.java @@ -15,10 +15,7 @@ package software.amazon.lambda.powertools.logging.logback; import static java.nio.charset.StandardCharsets.UTF_8; -import static software.amazon.lambda.powertools.logging.logback.JsonUtils.serializeArguments; -import static software.amazon.lambda.powertools.logging.logback.JsonUtils.serializeMDCEntries; -import static software.amazon.lambda.powertools.logging.logback.JsonUtils.serializeMDCEntry; -import static software.amazon.lambda.powertools.logging.logback.JsonUtils.serializeTimestamp; +import static software.amazon.lambda.powertools.logging.logback.JsonUtils.*; import ch.qos.logback.classic.pattern.ThrowableHandlingConverter; import ch.qos.logback.classic.pattern.ThrowableProxyConverter; @@ -27,10 +24,8 @@ import ch.qos.logback.classic.spi.ThrowableProxy; import ch.qos.logback.core.encoder.EncoderBase; import java.io.IOException; -import java.util.Arrays; -import java.util.HashMap; -import java.util.Map; -import java.util.TreeMap; +import java.util.*; + import software.amazon.lambda.powertools.logging.internal.JsonSerializer; import software.amazon.lambda.powertools.logging.internal.PowertoolsLoggedFields; @@ -84,6 +79,7 @@ public byte[] encode(ILoggingEvent event) { serializeException(event, serializer); TreeMap sortedMap = new TreeMap<>(event.getMDCPropertyMap()); + sortedMap.putAll(getKeyValuePairs(event)); serializePowertools(sortedMap, serializer); serializeMDCEntries(sortedMap, serializer); @@ -104,6 +100,13 @@ public byte[] encode(ILoggingEvent event) { return builder.toString().getBytes(UTF_8); } + private Map getKeyValuePairs(ILoggingEvent event) { + return Optional.ofNullable(event.getKeyValuePairs()) + .orElse(Collections.emptyList()).stream() + .filter(Objects::nonNull) + .collect(TreeMap::new, (map, kvp) -> map.put(String.valueOf(kvp.key), String.valueOf(kvp.value)), TreeMap::putAll); + } + private void serializeThreadInfo(ILoggingEvent event, JsonSerializer serializer) { if (includeThreadInfo) { if (event.getThreadName() != null) { diff --git a/powertools-logging/powertools-logging-logback/src/test/java/software/amazon/lambda/powertools/logging/internal/LambdaEcsEncoderTest.java b/powertools-logging/powertools-logging-logback/src/test/java/software/amazon/lambda/powertools/logging/internal/LambdaEcsEncoderTest.java index 30ede8ba8..2d5cb0a00 100644 --- a/powertools-logging/powertools-logging-logback/src/test/java/software/amazon/lambda/powertools/logging/internal/LambdaEcsEncoderTest.java +++ b/powertools-logging/powertools-logging-logback/src/test/java/software/amazon/lambda/powertools/logging/internal/LambdaEcsEncoderTest.java @@ -25,6 +25,7 @@ import java.nio.file.NoSuchFileException; import java.nio.file.Paths; import java.nio.file.StandardOpenOption; +import java.util.List; import java.util.concurrent.atomic.AtomicBoolean; import org.junit.jupiter.api.AfterEach; @@ -40,9 +41,11 @@ import ch.qos.logback.classic.Logger; import ch.qos.logback.classic.pattern.RootCauseFirstThrowableProxyConverter; import ch.qos.logback.classic.spi.LoggingEvent; +import org.slf4j.event.KeyValuePair; import software.amazon.lambda.powertools.common.internal.LambdaHandlerProcessor; import software.amazon.lambda.powertools.common.stubs.TestLambdaContext; import software.amazon.lambda.powertools.logging.PowertoolsLogging; +import software.amazon.lambda.powertools.logging.argument.StructuredArguments; import software.amazon.lambda.powertools.logging.internal.handler.PowertoolsLogEnabled; import software.amazon.lambda.powertools.logging.logback.LambdaEcsEncoder; @@ -179,4 +182,41 @@ private void setMDC() { MDC.put(PowertoolsLoggedFields.CORRELATION_ID.getName(), "test-correlation-id"); } + @Test + void shouldLogKeyValuePairs() { + // GIVEN + LambdaEcsEncoder encoder = new LambdaEcsEncoder(); + encoder.start(); + + LoggingEvent keyValuePairsLoggingEvent = new LoggingEvent("fqcn", logger, Level.INFO, "Key Value Pairs Test", + null, new Object[0]); + + keyValuePairsLoggingEvent.setKeyValuePairs(List.of( + new KeyValuePair("key_01_string", "value_01"), + new KeyValuePair("key_02_numeric", 2), + new KeyValuePair("key_03_decimal", 2.333), + new KeyValuePair("key_04_null", null), + new KeyValuePair("", "value_05_empty_key"), + new KeyValuePair(null, "value_06_null_key"), + new KeyValuePair("key_07_boolean_true", true), + new KeyValuePair("key_08_boolean_false", false) + )); + + // WHEN + byte[] encoded = encoder.encode(keyValuePairsLoggingEvent); + String result = new String(encoded, StandardCharsets.UTF_8); + + // THEN + assertThat(result) + .contains("\"key_01_string\":\"value_01\"") + .contains("\"key_02_numeric\":2") + .contains("\"key_03_decimal\":2.333") + .contains("\"key_04_null\":\"null\"") + .contains("\"\":\"value_05_empty_key\"") + .contains("\"null\":\"value_06_null_key\"") + .contains("\"key_07_boolean_true\":true") + .contains("\"key_08_boolean_false\":false") + ; + } + } diff --git a/powertools-logging/powertools-logging-logback/src/test/java/software/amazon/lambda/powertools/logging/internal/LambdaJsonEncoderTest.java b/powertools-logging/powertools-logging-logback/src/test/java/software/amazon/lambda/powertools/logging/internal/LambdaJsonEncoderTest.java index 16bd9e92a..ca256ad5d 100644 --- a/powertools-logging/powertools-logging-logback/src/test/java/software/amazon/lambda/powertools/logging/internal/LambdaJsonEncoderTest.java +++ b/powertools-logging/powertools-logging-logback/src/test/java/software/amazon/lambda/powertools/logging/internal/LambdaJsonEncoderTest.java @@ -40,6 +40,7 @@ import java.nio.file.StandardOpenOption; import java.text.SimpleDateFormat; import java.util.Arrays; +import java.util.List; import java.util.Collections; import java.util.Date; import java.util.TimeZone; @@ -50,6 +51,7 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Order; import org.junit.jupiter.api.Test; +import org.slf4j.event.KeyValuePair; import software.amazon.lambda.powertools.common.stubs.TestLambdaContext; import org.slf4j.LoggerFactory; import org.slf4j.MDC; @@ -442,4 +444,41 @@ void shouldLogException() { .contains("\"stack\":\"java.lang.IllegalStateException: Unexpected value\\n"); } + @Test + void shouldLogKeyValuePairs() { + // GIVEN + LambdaJsonEncoder encoder = new LambdaJsonEncoder(); + encoder.start(); + + LoggingEvent keyValuePairsLoggingEvent = new LoggingEvent("fqcn", logger, Level.INFO, "Key Value Pairs Test", + null, new Object[0]); + + keyValuePairsLoggingEvent.setKeyValuePairs(List.of( + new KeyValuePair("key_01_string", "value_01"), + new KeyValuePair("key_02_numeric", 2), + new KeyValuePair("key_03_decimal", 2.333), + new KeyValuePair("key_04_null", null), + new KeyValuePair("", "value_05_empty_key"), + new KeyValuePair(null, "value_06_null_key"), + new KeyValuePair("key_07_boolean_true", true), + new KeyValuePair("key_08_boolean_false", false) + )); + + // WHEN + byte[] encoded = encoder.encode(keyValuePairsLoggingEvent); + String result = new String(encoded, StandardCharsets.UTF_8); + + // THEN + assertThat(result) + .contains("\"key_01_string\":\"value_01\"") + .contains("\"key_02_numeric\":2") + .contains("\"key_03_decimal\":2.333") + .contains("\"key_04_null\":\"null\"") + .contains("\"\":\"value_05_empty_key\"") + .contains("\"null\":\"value_06_null_key\"") + .contains("\"key_07_boolean_true\":true") + .contains("\"key_08_boolean_false\":false") + ; + } + } From c04034984b28477d772c879201d1204249ae71c8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 2 Mar 2026 14:28:08 +0100 Subject: [PATCH 098/202] chore: bump github/codeql-action from 4.32.3 to 4.32.5 (#2396) Bumps [github/codeql-action](https://github.com/github/codeql-action) from 4.32.3 to 4.32.5. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/9e907b5e64f6b83e7804b09294d44122997950d6...c793b717bc78562f491db7b0e93a3a178b099162) --- updated-dependencies: - dependency-name: github/codeql-action dependency-version: 4.32.5 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/security-scorecard.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/security-scorecard.yml b/.github/workflows/security-scorecard.yml index 5b3d91efc..65ecbbd50 100644 --- a/.github/workflows/security-scorecard.yml +++ b/.github/workflows/security-scorecard.yml @@ -53,6 +53,6 @@ jobs: path: results.sarif retention-days: 5 - name: Upload to Code-Scanning - uses: github/codeql-action/upload-sarif@9e907b5e64f6b83e7804b09294d44122997950d6 # v3.29.5 + uses: github/codeql-action/upload-sarif@c793b717bc78562f491db7b0e93a3a178b099162 # v3.29.5 with: sarif_file: results.sarif From f4f216254c7ab3f7c8b595db4eb02ce9dff6cf3d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 2 Mar 2026 16:56:48 +0100 Subject: [PATCH 099/202] chore: bump actions/upload-artifact from 6.0.0 to 7.0.0 (#2394) Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 6.0.0 to 7.0.0. - [Release notes](https://github.com/actions/upload-artifact/releases) - [Commits](https://github.com/actions/upload-artifact/compare/b7c566a772e6b6bfb58ed0dc250532a479d7789f...bbbca2ddaa5d8feaa63e36b76fdaad77386f024f) --- updated-dependencies: - dependency-name: actions/upload-artifact dependency-version: 7.0.0 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/release.yml | 2 +- .github/workflows/security-scorecard.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index ee6582551..d6105e282 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -113,7 +113,7 @@ jobs: snapshot: ${{ inputs.snapshot}} - id: upload_source name: Upload artifacts - uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 + uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 with: if-no-files-found: error name: source diff --git a/.github/workflows/security-scorecard.yml b/.github/workflows/security-scorecard.yml index 65ecbbd50..23957036c 100644 --- a/.github/workflows/security-scorecard.yml +++ b/.github/workflows/security-scorecard.yml @@ -47,7 +47,7 @@ jobs: publish_results: true repo_token: ${{ secrets.SCORECARD_TOKEN }} - name: Upload Results - uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 + uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 with: name: SARIF file path: results.sarif From 6f18fb9acb51ec2c98b025478b6a7ad37db9236c Mon Sep 17 00:00:00 2001 From: Philipp Page Date: Tue, 3 Mar 2026 15:56:50 +0100 Subject: [PATCH 100/202] chore(ci): Run E2E tests in a per-test matrix (#2398) * Setup initial test matrix for test classes. * Increase concurrency and move build to its own step. * Add dynamic discovery of test classes to avoid duplication between pom.xml and GH actions script. * output single-line JSON as multi-line is not supported with GITHUB_OUTPUT. * increase degree of concurreny to max 25 (20 for e2e and 5 for e2e-graal). * Update .github/workflows/check-e2e.yml Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Address PR comments by Copilot. * Update .github/workflows/check-e2e.yml Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update .github/workflows/check-e2e.yml Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Fix syntax error caused by Copilot. --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .github/workflows/check-e2e.yml | 74 +++++++++++++++++++++++++++++---- 1 file changed, 67 insertions(+), 7 deletions(-) diff --git a/.github/workflows/check-e2e.yml b/.github/workflows/check-e2e.yml index e89051154..daf079efe 100644 --- a/.github/workflows/check-e2e.yml +++ b/.github/workflows/check-e2e.yml @@ -40,21 +40,69 @@ permissions: contents: read jobs: - e2e: - name: End-to-end Tests (Java ${{ matrix.java }}) + discover-tests: + name: Discover E2E test classes + runs-on: ubuntu-latest + outputs: + e2e-classes: ${{ steps.parse.outputs.e2e-classes }} + e2e-graal-classes: ${{ steps.parse.outputs.e2e-graal-classes }} + steps: + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + - name: Parse test classes from POM profiles + id: parse + run: | + TEST_DIR="powertools-e2e-tests/src/test/java" + POM="powertools-e2e-tests/pom.xml" + + # Extracts patterns from a POM profile, resolves them + # against the test directory, and outputs a compact JSON array + # of class names (without .java suffix). + resolve_classes() { + local profile_id="$1" + awk "/${profile_id}<\\/id>/,/<\\/profile>/" "$POM" \ + | { grep '' || true; } \ + | sed 's/.*\(.*\)<\/include>.*/\1/' \ + | while read -r pattern; do + find "$TEST_DIR" -type f -path "$TEST_DIR/$pattern" -print0 | xargs -0 -r basename -a + done \ + | sed 's/\.java$//' | sort -u | jq -R . | jq -sc . + } + + E2E_CLASSES=$(resolve_classes "e2e") + GRAAL_CLASSES=$(resolve_classes "e2e-graal") + + echo "e2e test classes: $E2E_CLASSES" + echo "e2e-graal test classes: $GRAAL_CLASSES" + + if [ "$E2E_CLASSES" = "[]" ] || [ -z "$E2E_CLASSES" ]; then + echo "::error::No e2e test classes found — check POM includes and test directory" + exit 1 + fi + if [ "$GRAAL_CLASSES" = "[]" ] || [ -z "$GRAAL_CLASSES" ]; then + echo "::error::No e2e-graal test classes found — check POM includes and test directory" + exit 1 + fi + + echo "e2e-classes=$E2E_CLASSES" >> "$GITHUB_OUTPUT" + echo "e2e-graal-classes=$GRAAL_CLASSES" >> "$GITHUB_OUTPUT" + + e2e: + name: E2E ${{ matrix.test-class }} (Java ${{ matrix.java }}) + needs: discover-tests runs-on: ubuntu-latest permissions: id-token: write environment: E2E strategy: fail-fast: false - max-parallel: 4 + max-parallel: 20 matrix: java: - 11 - 17 - 21 - 25 + test-class: ${{ fromJSON(needs.discover-tests.outputs.e2e-classes) }} steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 @@ -64,6 +112,8 @@ jobs: distribution: 'corretto' java-version: ${{ matrix.java }} cache: maven + - name: Build all modules + run: mvn -B -DskipTests -ntp install --file pom.xml - name: Setup AWS credentials uses: aws-actions/configure-aws-credentials@8df5847569e6427dd6c4fb1cf565c83acfa8afa7 # v6.0.0 with: @@ -72,20 +122,25 @@ jobs: - name: Run e2e test with Maven env: JAVA_VERSION: ${{ matrix.java }} - run: mvn -DskipTests -ntp install --file pom.xml && mvn -Pe2e -B -ntp verify --file powertools-e2e-tests/pom.xml + run: > + mvn -Pe2e -B -ntp + -Dit.test="${{ matrix.test-class }}" + verify --file powertools-e2e-tests/pom.xml e2e-graal: - name: End-to-end GraalVM Tests (Java ${{ matrix.java }}) + name: E2E GraalVM ${{ matrix.test-class }} (Java ${{ matrix.java }}) + needs: discover-tests runs-on: ubuntu-latest permissions: id-token: write environment: E2E strategy: fail-fast: false - max-parallel: 1 + max-parallel: 5 matrix: java: - 25 + test-class: ${{ fromJSON(needs.discover-tests.outputs.e2e-graal-classes) }} steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 @@ -95,6 +150,8 @@ jobs: distribution: 'corretto' java-version: ${{ matrix.java }} cache: maven + - name: Build all modules + run: mvn -B -DskipTests -ntp install --file pom.xml - name: Setup AWS credentials uses: aws-actions/configure-aws-credentials@8df5847569e6427dd6c4fb1cf565c83acfa8afa7 # v6.0.0 with: @@ -103,4 +160,7 @@ jobs: - name: Run e2e-graal test with Maven env: JAVA_VERSION: ${{ matrix.java }} - run: mvn -DskipTests -ntp install --file pom.xml && mvn -Pe2e-graal -B -ntp verify --file powertools-e2e-tests/pom.xml + run: > + mvn -Pe2e-graal -B -ntp + -Dit.test="${{ matrix.test-class }}" + verify --file powertools-e2e-tests/pom.xml From c8c3e85650e8eca5911ca7351fb10244aa1dfe35 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 3 Mar 2026 15:57:29 +0100 Subject: [PATCH 101/202] chore: bump tj-actions/changed-files from 47.0.4 to 47.0.5 (#2399) Bumps [tj-actions/changed-files](https://github.com/tj-actions/changed-files) from 47.0.4 to 47.0.5. - [Release notes](https://github.com/tj-actions/changed-files/releases) - [Changelog](https://github.com/tj-actions/changed-files/blob/main/HISTORY.md) - [Commits](https://github.com/tj-actions/changed-files/compare/7dee1b0c1557f278e5c7dc244927139d78c0e22a...22103cc46bda19c2b464ffe86db46df6922fd323) --- updated-dependencies: - dependency-name: tj-actions/changed-files dependency-version: 47.0.5 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/check-build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/check-build.yml b/.github/workflows/check-build.yml index e2c1e5053..5507ccc6f 100644 --- a/.github/workflows/check-build.yml +++ b/.github/workflows/check-build.yml @@ -99,7 +99,7 @@ jobs: fetch-depth: 0 - name: Get changed files id: changed-files - uses: tj-actions/changed-files@7dee1b0c1557f278e5c7dc244927139d78c0e22a # v47.0.4 + uses: tj-actions/changed-files@22103cc46bda19c2b464ffe86db46df6922fd323 # v47.0.5 with: files: | powertools-*/** From 1f23d85ee9c1bfe65c33abb198079216a5754224 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 3 Mar 2026 15:57:51 +0100 Subject: [PATCH 102/202] chore: bump aws.sdk.version from 2.39.3 to 2.41.11 (#2359) Bumps `aws.sdk.version` from 2.39.3 to 2.41.11. Updates `software.amazon.awssdk:url-connection-client` from 2.39.3 to 2.41.11 Updates `software.amazon.awssdk:sdk-core` from 2.39.3 to 2.41.11 Updates `software.amazon.awssdk:s3` from 2.39.3 to 2.41.11 Updates `software.amazon.awssdk:kinesis` from 2.39.3 to 2.41.11 Updates `software.amazon.awssdk:sqs` from 2.39.3 to 2.41.11 Updates `software.amazon.awssdk:dynamodb-enhanced` from 2.39.3 to 2.41.11 --- updated-dependencies: - dependency-name: software.amazon.awssdk:url-connection-client dependency-version: 2.41.11 dependency-type: direct:development update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:sdk-core dependency-version: 2.41.11 dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:s3 dependency-version: 2.41.11 dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:kinesis dependency-version: 2.41.11 dependency-type: direct:development update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:sqs dependency-version: 2.41.11 dependency-type: direct:development update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:dynamodb-enhanced dependency-version: 2.41.11 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> --- examples/powertools-examples-batch/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/powertools-examples-batch/pom.xml b/examples/powertools-examples-batch/pom.xml index 0091fb5ca..7d1253d7d 100644 --- a/examples/powertools-examples-batch/pom.xml +++ b/examples/powertools-examples-batch/pom.xml @@ -14,7 +14,7 @@ 11 11 1.9.20.1 - 2.39.3 + 2.41.11 From 61e954e63a7c93e6c70d50a8eece5989292b80c5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 3 Mar 2026 15:58:14 +0100 Subject: [PATCH 103/202] chore: bump com.google.protobuf:protobuf-java from 4.33.2 to 4.33.4 (#2360) Bumps [com.google.protobuf:protobuf-java](https://github.com/protocolbuffers/protobuf) from 4.33.2 to 4.33.4. - [Release notes](https://github.com/protocolbuffers/protobuf/releases) - [Commits](https://github.com/protocolbuffers/protobuf/commits) --- updated-dependencies: - dependency-name: com.google.protobuf:protobuf-java dependency-version: 4.33.4 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- examples/powertools-examples-kafka/pom.xml | 2 +- powertools-kafka/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/powertools-examples-kafka/pom.xml b/examples/powertools-examples-kafka/pom.xml index 99e04e8a8..70eef52c1 100644 --- a/examples/powertools-examples-kafka/pom.xml +++ b/examples/powertools-examples-kafka/pom.xml @@ -12,7 +12,7 @@ 11 1.9.20.1 1.12.1 - 4.33.2 + 4.33.4 diff --git a/powertools-kafka/pom.xml b/powertools-kafka/pom.xml index ccb63e38f..6cade6bbf 100644 --- a/powertools-kafka/pom.xml +++ b/powertools-kafka/pom.xml @@ -36,7 +36,7 @@ 4.1.1 1.12.1 - 4.33.2 + 4.33.4 1.1.6 From b025010a93d214b781d2362141e127787169d824 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 3 Mar 2026 15:58:54 +0100 Subject: [PATCH 104/202] chore: bump actions/download-artifact from 7.0.0 to 8.0.0 (#2393) Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 7.0.0 to 8.0.0. - [Release notes](https://github.com/actions/download-artifact/releases) - [Commits](https://github.com/actions/download-artifact/compare/37930b1c2abaa49bbe596cd826c3c89aef350131...70fc10c6e5e1ce46ad2ea6f2b72d43f7d47b13c3) --- updated-dependencies: - dependency-name: actions/download-artifact dependency-version: 8.0.0 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/release.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index d6105e282..8a074740a 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -133,7 +133,7 @@ jobs: steps: - id: download_source name: Download artifacts - uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v4.6.1 + uses: actions/download-artifact@70fc10c6e5e1ce46ad2ea6f2b72d43f7d47b13c3 # v4.6.1 with: name: source - name: Setup Java @@ -170,7 +170,7 @@ jobs: steps: - id: download_source name: Download artifacts - uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v4.6.1 + uses: actions/download-artifact@70fc10c6e5e1ce46ad2ea6f2b72d43f7d47b13c3 # v4.6.1 with: name: source - name: Setup Java @@ -195,7 +195,7 @@ jobs: steps: - id: download_source name: Download artifacts - uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v4.6.1 + uses: actions/download-artifact@70fc10c6e5e1ce46ad2ea6f2b72d43f7d47b13c3 # v4.6.1 with: name: source - name: Setup Java @@ -233,7 +233,7 @@ jobs: ref: ${{ env.RELEASE_COMMIT }} - id: download_source name: Download artifacts - uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v4.6.1 + uses: actions/download-artifact@70fc10c6e5e1ce46ad2ea6f2b72d43f7d47b13c3 # v4.6.1 with: name: source - id: setup-git From 3968419b8d8949fb71a61b312aedc60d489bb7d0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 3 Mar 2026 15:59:15 +0100 Subject: [PATCH 105/202] chore: bump squidfunk/mkdocs-material in /docs (#2392) Bumps squidfunk/mkdocs-material from `3bba0a9` to `8f41b60`. --- updated-dependencies: - dependency-name: squidfunk/mkdocs-material dependency-version: 8f41b6089700e1c32212c3857936f14e88a3306a35be4ffd1826420e2f3e4197 dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- docs/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Dockerfile b/docs/Dockerfile index ee71acb0e..08635aa72 100644 --- a/docs/Dockerfile +++ b/docs/Dockerfile @@ -1,4 +1,4 @@ -FROM squidfunk/mkdocs-material@sha256:3bba0a99bc6e635bb8e53f379d32ab9cecb554adee9cc8f59a347f93ecf82f3b +FROM squidfunk/mkdocs-material@sha256:8f41b6089700e1c32212c3857936f14e88a3306a35be4ffd1826420e2f3e4197 COPY requirements.txt /tmp/ RUN pip install --require-hashes -r /tmp/requirements.txt From 69ee83aa8464a6810b3a7eadd6b8419891749735 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 3 Mar 2026 15:59:34 +0100 Subject: [PATCH 106/202] chore: bump actions/dependency-review-action from 4.8.2 to 4.8.3 (#2390) Bumps [actions/dependency-review-action](https://github.com/actions/dependency-review-action) from 4.8.2 to 4.8.3. - [Release notes](https://github.com/actions/dependency-review-action/releases) - [Commits](https://github.com/actions/dependency-review-action/compare/3c4e3dcb1aa7874d2c16be7d79418e9b7efd6261...05fe4576374b728f0c523d6a13d64c25081e0803) --- updated-dependencies: - dependency-name: actions/dependency-review-action dependency-version: 4.8.3 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/security-dependencies-check.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/security-dependencies-check.yml b/.github/workflows/security-dependencies-check.yml index 31f7491a2..79022bece 100644 --- a/.github/workflows/security-dependencies-check.yml +++ b/.github/workflows/security-dependencies-check.yml @@ -25,6 +25,6 @@ jobs: - name: Checkout Repository uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Verify Contents - uses: actions/dependency-review-action@3c4e3dcb1aa7874d2c16be7d79418e9b7efd6261 # v4.8.2 + uses: actions/dependency-review-action@05fe4576374b728f0c523d6a13d64c25081e0803 # v4.8.3 with: config-file: './.github/dependency-review-config.yml' From 3638af6d1c36c7ea6e06669155e496a3392f5783 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 5 Mar 2026 16:03:36 +0100 Subject: [PATCH 107/202] chore: bump actions/dependency-review-action from 4.8.3 to 4.9.0 (#2402) Bumps [actions/dependency-review-action](https://github.com/actions/dependency-review-action) from 4.8.3 to 4.9.0. - [Release notes](https://github.com/actions/dependency-review-action/releases) - [Commits](https://github.com/actions/dependency-review-action/compare/05fe4576374b728f0c523d6a13d64c25081e0803...2031cfc080254a8a887f58cffee85186f0e49e48) --- updated-dependencies: - dependency-name: actions/dependency-review-action dependency-version: 4.9.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> --- .github/workflows/security-dependencies-check.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/security-dependencies-check.yml b/.github/workflows/security-dependencies-check.yml index 79022bece..b2b5c7f8b 100644 --- a/.github/workflows/security-dependencies-check.yml +++ b/.github/workflows/security-dependencies-check.yml @@ -25,6 +25,6 @@ jobs: - name: Checkout Repository uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Verify Contents - uses: actions/dependency-review-action@05fe4576374b728f0c523d6a13d64c25081e0803 # v4.8.3 + uses: actions/dependency-review-action@2031cfc080254a8a887f58cffee85186f0e49e48 # v4.9.0 with: config-file: './.github/dependency-review-config.yml' From 1debdb9ec9c301b1bb565172ca2c97586eaa9ef7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 5 Mar 2026 16:03:42 +0100 Subject: [PATCH 108/202] chore: bump squidfunk/mkdocs-material in /docs (#2401) Bumps squidfunk/mkdocs-material from `8f41b60` to `f4332a8`. --- updated-dependencies: - dependency-name: squidfunk/mkdocs-material dependency-version: f4332a8e8895aa303bf7f3ceede749980a98cf79f5d87ad567b4d41f037b0101 dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- docs/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Dockerfile b/docs/Dockerfile index 08635aa72..31d375d32 100644 --- a/docs/Dockerfile +++ b/docs/Dockerfile @@ -1,4 +1,4 @@ -FROM squidfunk/mkdocs-material@sha256:8f41b6089700e1c32212c3857936f14e88a3306a35be4ffd1826420e2f3e4197 +FROM squidfunk/mkdocs-material@sha256:f4332a8e8895aa303bf7f3ceede749980a98cf79f5d87ad567b4d41f037b0101 COPY requirements.txt /tmp/ RUN pip install --require-hashes -r /tmp/requirements.txt From 3b6b670f22b938272b214583b4bae18f186ced4b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 16 Mar 2026 18:29:33 +0100 Subject: [PATCH 109/202] chore: bump graalvm/setup-graalvm from 1.4.5 to 1.5.0 (#2412) Bumps [graalvm/setup-graalvm](https://github.com/graalvm/setup-graalvm) from 1.4.5 to 1.5.0. - [Release notes](https://github.com/graalvm/setup-graalvm/releases) - [Commits](https://github.com/graalvm/setup-graalvm/compare/54b4f5a65c1a84b2fdfdc2078fe43df32819e4b1...f744c72a42b1995d7b0cbc314bde4bace7ac1fe1) --- updated-dependencies: - dependency-name: graalvm/setup-graalvm dependency-version: 1.5.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> --- .github/workflows/check-build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/check-build.yml b/.github/workflows/check-build.yml index 5507ccc6f..f8c79b1aa 100644 --- a/.github/workflows/check-build.yml +++ b/.github/workflows/check-build.yml @@ -105,7 +105,7 @@ jobs: powertools-*/** pom.xml - name: Setup GraalVM - uses: graalvm/setup-graalvm@54b4f5a65c1a84b2fdfdc2078fe43df32819e4b1 # v1.4.5 + uses: graalvm/setup-graalvm@f744c72a42b1995d7b0cbc314bde4bace7ac1fe1 # v1.5.0 with: java-version: "21" distribution: "graalvm" From c73ac7feef27af4be84ce408d1f60ba54334653f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 16 Mar 2026 18:29:57 +0100 Subject: [PATCH 110/202] chore: bump markdown from 3.7 to 3.8.1 in /docs (#2405) Bumps [markdown](https://github.com/Python-Markdown/markdown) from 3.7 to 3.8.1. - [Release notes](https://github.com/Python-Markdown/markdown/releases) - [Changelog](https://github.com/Python-Markdown/markdown/blob/master/docs/changelog.md) - [Commits](https://github.com/Python-Markdown/markdown/compare/3.7...3.8.1) --- updated-dependencies: - dependency-name: markdown dependency-version: 3.8.1 dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- docs/requirements.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/requirements.txt b/docs/requirements.txt index 16529cf3b..ab4b1d48f 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -39,9 +39,9 @@ jinja2==3.1.6 \ # mkdocs # mkdocs-git-revision-date-plugin # mkdocs-macros-plugin -markdown==3.7 \ - --hash=sha256:2ae2471477cfd02dbbf038d5d9bc226d40def84b4fe2986e49b59b6b472bbed2 \ - --hash=sha256:7eb6df5690b81a1d7942992c97fad2938e956e79df20cbc6186e9c3a77b1c803 +markdown==3.8.1 \ + --hash=sha256:46cc0c0f1e5211ab2e9d453582f0b28a1bfaf058a9f7d5c50386b99b588d8811 \ + --hash=sha256:a2e2f01cead4828ee74ecca9623045f62216aef2212a7685d6eb9163f590b8c1 # via mkdocs markdown-it-py==3.0.0 \ --hash=sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1 \ From 3e8d8ae6c0caa4f4b616e8e9b74f4b8a50f223fc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 16 Mar 2026 18:43:07 +0100 Subject: [PATCH 111/202] chore: bump squidfunk/mkdocs-material in /docs (#2410) Bumps squidfunk/mkdocs-material from `f4332a8` to `c373999`. --- updated-dependencies: - dependency-name: squidfunk/mkdocs-material dependency-version: c3739993c3e7c92cfe649ba03cbc04f4fa9b1497886abd16267eb413cda8aecf dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- docs/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Dockerfile b/docs/Dockerfile index 31d375d32..b72dc7057 100644 --- a/docs/Dockerfile +++ b/docs/Dockerfile @@ -1,4 +1,4 @@ -FROM squidfunk/mkdocs-material@sha256:f4332a8e8895aa303bf7f3ceede749980a98cf79f5d87ad567b4d41f037b0101 +FROM squidfunk/mkdocs-material@sha256:c3739993c3e7c92cfe649ba03cbc04f4fa9b1497886abd16267eb413cda8aecf COPY requirements.txt /tmp/ RUN pip install --require-hashes -r /tmp/requirements.txt From d1f34af4ee40732d0e21b93a1a4c7a08f7bd7282 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 16 Mar 2026 18:43:17 +0100 Subject: [PATCH 112/202] chore: bump actions/download-artifact from 8.0.0 to 8.0.1 (#2411) Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 8.0.0 to 8.0.1. - [Release notes](https://github.com/actions/download-artifact/releases) - [Commits](https://github.com/actions/download-artifact/compare/70fc10c6e5e1ce46ad2ea6f2b72d43f7d47b13c3...3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c) --- updated-dependencies: - dependency-name: actions/download-artifact dependency-version: 8.0.1 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/release.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 8a074740a..eab539ee1 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -133,7 +133,7 @@ jobs: steps: - id: download_source name: Download artifacts - uses: actions/download-artifact@70fc10c6e5e1ce46ad2ea6f2b72d43f7d47b13c3 # v4.6.1 + uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v4.6.1 with: name: source - name: Setup Java @@ -170,7 +170,7 @@ jobs: steps: - id: download_source name: Download artifacts - uses: actions/download-artifact@70fc10c6e5e1ce46ad2ea6f2b72d43f7d47b13c3 # v4.6.1 + uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v4.6.1 with: name: source - name: Setup Java @@ -195,7 +195,7 @@ jobs: steps: - id: download_source name: Download artifacts - uses: actions/download-artifact@70fc10c6e5e1ce46ad2ea6f2b72d43f7d47b13c3 # v4.6.1 + uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v4.6.1 with: name: source - name: Setup Java @@ -233,7 +233,7 @@ jobs: ref: ${{ env.RELEASE_COMMIT }} - id: download_source name: Download artifacts - uses: actions/download-artifact@70fc10c6e5e1ce46ad2ea6f2b72d43f7d47b13c3 # v4.6.1 + uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v4.6.1 with: name: source - id: setup-git From 6449eb3cd2eabf78474bab9e6ae07bf51fb2830a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 16 Mar 2026 18:43:26 +0100 Subject: [PATCH 113/202] chore: bump github/codeql-action from 4.32.5 to 4.33.0 (#2414) Bumps [github/codeql-action](https://github.com/github/codeql-action) from 4.32.5 to 4.33.0. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/c793b717bc78562f491db7b0e93a3a178b099162...b1bff81932f5cdfc8695c7752dcee935dcd061c8) --- updated-dependencies: - dependency-name: github/codeql-action dependency-version: 4.33.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> --- .github/workflows/security-scorecard.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/security-scorecard.yml b/.github/workflows/security-scorecard.yml index 23957036c..01bdf2621 100644 --- a/.github/workflows/security-scorecard.yml +++ b/.github/workflows/security-scorecard.yml @@ -53,6 +53,6 @@ jobs: path: results.sarif retention-days: 5 - name: Upload to Code-Scanning - uses: github/codeql-action/upload-sarif@c793b717bc78562f491db7b0e93a3a178b099162 # v3.29.5 + uses: github/codeql-action/upload-sarif@b1bff81932f5cdfc8695c7752dcee935dcd061c8 # v3.29.5 with: sarif_file: results.sarif From 0c10b7482684cd9060d8d73216b176d6e364117e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 16 Mar 2026 18:43:35 +0100 Subject: [PATCH 114/202] chore: bump release-drafter/release-drafter from 6.2.0 to 7.0.0 (#2415) Bumps [release-drafter/release-drafter](https://github.com/release-drafter/release-drafter) from 6.2.0 to 7.0.0. - [Release notes](https://github.com/release-drafter/release-drafter/releases) - [Commits](https://github.com/release-drafter/release-drafter/compare/6db134d15f3909ccc9eefd369f02bd1e9cffdf97...3a7fb5c85b80b1dda66e1ccb94009adbbd32fce3) --- updated-dependencies: - dependency-name: release-drafter/release-drafter dependency-version: 7.0.0 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/release-drafter.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release-drafter.yml b/.github/workflows/release-drafter.yml index 9ef7426f9..4b00ed541 100644 --- a/.github/workflows/release-drafter.yml +++ b/.github/workflows/release-drafter.yml @@ -23,6 +23,6 @@ jobs: contents: write # required for creating draft releases steps: - name: Relase Drafter - uses: release-drafter/release-drafter@6db134d15f3909ccc9eefd369f02bd1e9cffdf97 + uses: release-drafter/release-drafter@3a7fb5c85b80b1dda66e1ccb94009adbbd32fce3 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} From e35c5acbf651c546dcd20fcfd83519abd82ea2f0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 16 Mar 2026 19:22:38 +0100 Subject: [PATCH 115/202] chore: bump sam/build-java25 (#2406) Bumps sam/build-java25 from `15e69d9` to `32b91ab`. --- updated-dependencies: - dependency-name: sam/build-java25 dependency-version: 32b91ab2cbab1eb7b165546f1788e1b113ea1c913aa68c16501458934692fcd2 dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- powertools-e2e-tests/src/test/resources/docker/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/powertools-e2e-tests/src/test/resources/docker/Dockerfile b/powertools-e2e-tests/src/test/resources/docker/Dockerfile index 2b587e0a0..cb8ea7dcd 100644 --- a/powertools-e2e-tests/src/test/resources/docker/Dockerfile +++ b/powertools-e2e-tests/src/test/resources/docker/Dockerfile @@ -1,5 +1,5 @@ # Use the official AWS SAM base image for Java 25 -FROM public.ecr.aws/sam/build-java25@sha256:15e69d9776709e299d2913e546d8d7fb30b9ca0b66e4fce6f3beb41604242bd8 +FROM public.ecr.aws/sam/build-java25@sha256:32b91ab2cbab1eb7b165546f1788e1b113ea1c913aa68c16501458934692fcd2 # Install GraalVM dependencies RUN curl -4 -L https://download.oracle.com/graalvm/25/latest/graalvm-jdk-25_linux-x64_bin.tar.gz | tar -xvz From 5c6bca27212aa9d6b938ee0ed68f75be454ef982 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 17 Mar 2026 11:53:25 +0100 Subject: [PATCH 116/202] chore: bump com.fasterxml.jackson:jackson-bom from 2.20.1 to 2.21.1 (#2403) * chore: bump com.fasterxml.jackson:jackson-bom from 2.20.1 to 2.21.1 Bumps [com.fasterxml.jackson:jackson-bom](https://github.com/FasterXML/jackson-bom) from 2.20.1 to 2.21.1. - [Commits](https://github.com/FasterXML/jackson-bom/compare/jackson-bom-2.20.1...jackson-bom-2.21.1) --- updated-dependencies: - dependency-name: com.fasterxml.jackson:jackson-bom dependency-version: 2.21.1 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] * Pin GraalVM version in CI to 21.0.8 (temporary fix). * Add comment why graalvm version was pinned. --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Philipp Page Co-authored-by: Philipp Page --- .github/workflows/check-build.yml | 3 ++- pom.xml | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/check-build.yml b/.github/workflows/check-build.yml index f8c79b1aa..d0d45354b 100644 --- a/.github/workflows/check-build.yml +++ b/.github/workflows/check-build.yml @@ -107,7 +107,8 @@ jobs: - name: Setup GraalVM uses: graalvm/setup-graalvm@f744c72a42b1995d7b0cbc314bde4bace7ac1fe1 # v1.5.0 with: - java-version: "21" + # Pinned to 21.0.8 due to unsafeAllocated enforcement in 21.0.10+. See #2416 + java-version: "21.0.8" distribution: "graalvm" cache: maven - id: graalvm-native-test diff --git a/pom.xml b/pom.xml index f42f95299..a97929c28 100644 --- a/pom.xml +++ b/pom.xml @@ -84,7 +84,7 @@ 3.1.2 2.25.3 2.0.17 - 2.20.1 + 2.21.1 2.41.10 2.20.0 2.2.0 From 87f164435229b79d377884272ae28477106cf160 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 17 Mar 2026 13:23:46 +0100 Subject: [PATCH 117/202] chore: bump software.amazon.awscdk:aws-cdk-lib from 2.224.0 to 2.243.0 (#2418) Bumps [software.amazon.awscdk:aws-cdk-lib](https://github.com/aws/aws-cdk) from 2.224.0 to 2.243.0. - [Release notes](https://github.com/aws/aws-cdk/releases) - [Changelog](https://github.com/aws/aws-cdk/blob/main/CHANGELOG.v2.alpha.md) - [Commits](https://github.com/aws/aws-cdk/compare/v2.224.0...v2.243.0) --- updated-dependencies: - dependency-name: software.amazon.awscdk:aws-cdk-lib dependency-version: 2.243.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> --- examples/powertools-examples-core-utilities/cdk/infra/pom.xml | 2 +- powertools-e2e-tests/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/powertools-examples-core-utilities/cdk/infra/pom.xml b/examples/powertools-examples-core-utilities/cdk/infra/pom.xml index e3ceb7e65..f71f446b6 100644 --- a/examples/powertools-examples-core-utilities/cdk/infra/pom.xml +++ b/examples/powertools-examples-core-utilities/cdk/infra/pom.xml @@ -7,7 +7,7 @@ 2.9.0 UTF-8 - 2.224.0 + 2.243.0 [10.0.0,11.0.0) 5.14.1 diff --git a/powertools-e2e-tests/pom.xml b/powertools-e2e-tests/pom.xml index fec4dec92..6953b6781 100644 --- a/powertools-e2e-tests/pom.xml +++ b/powertools-e2e-tests/pom.xml @@ -31,7 +31,7 @@ 11 11 10.4.3 - 2.224.0 + 2.243.0 From 07f091c7fc21af75e749f68b73301d41720e0903 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 17 Mar 2026 13:23:51 +0100 Subject: [PATCH 118/202] chore: bump org.assertj:assertj-core in /powertools-tracing (#2417) Bumps [org.assertj:assertj-core](https://github.com/assertj/assertj) from 3.27.6 to 3.27.7. - [Release notes](https://github.com/assertj/assertj/releases) - [Commits](https://github.com/assertj/assertj/compare/assertj-build-3.27.6...assertj-build-3.27.7) --- updated-dependencies: - dependency-name: org.assertj:assertj-core dependency-version: 3.27.7 dependency-type: direct:production ... 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 a97929c28..72ea31685 100644 --- a/pom.xml +++ b/pom.xml @@ -335,7 +335,7 @@ org.assertj assertj-core - 3.27.6 + 3.27.7 test From 0dc6279ce01271832c49fd06698ee61c5c8317f1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 17 Mar 2026 13:23:56 +0100 Subject: [PATCH 119/202] chore: bump aws.sdk.version from 2.41.10 to 2.42.5 (#2400) Bumps `aws.sdk.version` from 2.41.10 to 2.42.5. Updates `software.amazon.awssdk:bom` from 2.41.10 to 2.42.5 Updates `software.amazon.awssdk:http-client-spi` from 2.41.10 to 2.42.5 Updates `software.amazon.awssdk:url-connection-client` from 2.41.10 to 2.42.5 Updates `software.amazon.awssdk:s3` from 2.41.10 to 2.42.5 Updates `software.amazon.awssdk:dynamodb` from 2.41.10 to 2.42.5 Updates `software.amazon.awssdk:lambda` from 2.41.10 to 2.42.5 Updates `software.amazon.awssdk:kinesis` from 2.41.10 to 2.42.5 Updates `software.amazon.awssdk:cloudwatch` from 2.41.10 to 2.42.5 Updates `software.amazon.awssdk:xray` from 2.41.10 to 2.42.5 Updates `software.amazon.awssdk:sqs` from 2.41.10 to 2.42.5 Updates `software.amazon.awssdk:cloudformation` from 2.41.10 to 2.42.5 Updates `software.amazon.awssdk:sts` from 2.41.10 to 2.42.5 --- updated-dependencies: - dependency-name: software.amazon.awssdk:bom dependency-version: 2.42.5 dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:http-client-spi dependency-version: 2.42.5 dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:url-connection-client dependency-version: 2.42.5 dependency-type: direct:development update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:s3 dependency-version: 2.42.5 dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:dynamodb dependency-version: 2.42.5 dependency-type: direct:development update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:lambda dependency-version: 2.42.5 dependency-type: direct:development update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:kinesis dependency-version: 2.42.5 dependency-type: direct:development update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:cloudwatch dependency-version: 2.42.5 dependency-type: direct:development update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:xray dependency-version: 2.42.5 dependency-type: direct:development update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:sqs dependency-version: 2.42.5 dependency-type: direct:development update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:cloudformation dependency-version: 2.42.5 dependency-type: direct:development update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:sts dependency-version: 2.42.5 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> --- examples/powertools-examples-cloudformation/pom.xml | 2 +- pom.xml | 2 +- powertools-e2e-tests/handlers/pom.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/powertools-examples-cloudformation/pom.xml b/examples/powertools-examples-cloudformation/pom.xml index fcee22d49..0ce5970cb 100644 --- a/examples/powertools-examples-cloudformation/pom.xml +++ b/examples/powertools-examples-cloudformation/pom.xml @@ -14,7 +14,7 @@ 11 1.4.0 3.16.1 - 2.41.10 + 2.42.14 1.9.20.1 diff --git a/pom.xml b/pom.xml index 72ea31685..30bc6e334 100644 --- a/pom.xml +++ b/pom.xml @@ -85,7 +85,7 @@ 2.25.3 2.0.17 2.21.1 - 2.41.10 + 2.42.14 2.20.0 2.2.0 UTF-8 diff --git a/powertools-e2e-tests/handlers/pom.xml b/powertools-e2e-tests/handlers/pom.xml index c9a4826a2..3be06340f 100644 --- a/powertools-e2e-tests/handlers/pom.xml +++ b/powertools-e2e-tests/handlers/pom.xml @@ -19,7 +19,7 @@ 3.6.1 1.14.1 3.14.1 - 2.41.10 + 2.42.14 1.9.20.1 true From dd7b9c546ddf79b38463bf14a32266f224930000 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 18 Mar 2026 13:34:51 +0100 Subject: [PATCH 120/202] chore: bump com.amazonaws:aws-lambda-java-runtime-interface-client (#2420) Bumps [com.amazonaws:aws-lambda-java-runtime-interface-client](https://github.com/aws/aws-lambda-java-libs) from 2.8.7 to 2.9.0. - [Commits](https://github.com/aws/aws-lambda-java-libs/commits) --- updated-dependencies: - dependency-name: com.amazonaws:aws-lambda-java-runtime-interface-client dependency-version: 2.9.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> --- examples/powertools-examples-cloudformation/pom.xml | 2 +- examples/powertools-examples-core-utilities/sam-graalvm/pom.xml | 2 +- examples/powertools-examples-idempotency/sam-graalvm/pom.xml | 2 +- examples/powertools-examples-parameters/sam-graalvm/pom.xml | 2 +- examples/powertools-examples-serialization/sam-graalvm/pom.xml | 2 +- powertools-e2e-tests/handlers/pom.xml | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/examples/powertools-examples-cloudformation/pom.xml b/examples/powertools-examples-cloudformation/pom.xml index 0ce5970cb..4c6976b25 100644 --- a/examples/powertools-examples-cloudformation/pom.xml +++ b/examples/powertools-examples-cloudformation/pom.xml @@ -77,7 +77,7 @@ com.amazonaws aws-lambda-java-runtime-interface-client - 2.8.7 + 2.9.0 diff --git a/examples/powertools-examples-core-utilities/sam-graalvm/pom.xml b/examples/powertools-examples-core-utilities/sam-graalvm/pom.xml index cf50e5128..57a3663e7 100644 --- a/examples/powertools-examples-core-utilities/sam-graalvm/pom.xml +++ b/examples/powertools-examples-core-utilities/sam-graalvm/pom.xml @@ -49,7 +49,7 @@ com.amazonaws aws-lambda-java-runtime-interface-client - 2.8.7 + 2.9.0 org.apache.logging.log4j diff --git a/examples/powertools-examples-idempotency/sam-graalvm/pom.xml b/examples/powertools-examples-idempotency/sam-graalvm/pom.xml index 0536951aa..dc05bddbe 100644 --- a/examples/powertools-examples-idempotency/sam-graalvm/pom.xml +++ b/examples/powertools-examples-idempotency/sam-graalvm/pom.xml @@ -43,7 +43,7 @@ com.amazonaws aws-lambda-java-runtime-interface-client - 2.8.7 + 2.9.0 diff --git a/examples/powertools-examples-parameters/sam-graalvm/pom.xml b/examples/powertools-examples-parameters/sam-graalvm/pom.xml index ee3631d8b..aaea139ee 100644 --- a/examples/powertools-examples-parameters/sam-graalvm/pom.xml +++ b/examples/powertools-examples-parameters/sam-graalvm/pom.xml @@ -49,7 +49,7 @@ com.amazonaws aws-lambda-java-runtime-interface-client - 2.8.7 + 2.9.0 org.apache.logging.log4j diff --git a/examples/powertools-examples-serialization/sam-graalvm/pom.xml b/examples/powertools-examples-serialization/sam-graalvm/pom.xml index 5077c8989..73d02365c 100644 --- a/examples/powertools-examples-serialization/sam-graalvm/pom.xml +++ b/examples/powertools-examples-serialization/sam-graalvm/pom.xml @@ -36,7 +36,7 @@ com.amazonaws aws-lambda-java-runtime-interface-client - 2.8.7 + 2.9.0 diff --git a/powertools-e2e-tests/handlers/pom.xml b/powertools-e2e-tests/handlers/pom.xml index 3be06340f..07cd3228d 100644 --- a/powertools-e2e-tests/handlers/pom.xml +++ b/powertools-e2e-tests/handlers/pom.xml @@ -131,7 +131,7 @@ com.amazonaws aws-lambda-java-runtime-interface-client - 2.8.7 + 2.9.0 From a78ecf7a49c02fcba48d42723a754d3ae1bb91e9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 18 Mar 2026 13:35:11 +0100 Subject: [PATCH 121/202] chore: bump aws.sdk.version from 2.42.14 to 2.42.15 (#2421) Bumps `aws.sdk.version` from 2.42.14 to 2.42.15. Updates `software.amazon.awssdk:bom` from 2.42.14 to 2.42.15 Updates `software.amazon.awssdk:http-client-spi` from 2.42.14 to 2.42.15 Updates `software.amazon.awssdk:url-connection-client` from 2.41.11 to 2.42.15 Updates `software.amazon.awssdk:s3` from 2.41.11 to 2.42.15 Updates `software.amazon.awssdk:dynamodb` from 2.42.14 to 2.42.15 Updates `software.amazon.awssdk:lambda` from 2.42.14 to 2.42.15 Updates `software.amazon.awssdk:kinesis` from 2.41.11 to 2.42.15 Updates `software.amazon.awssdk:cloudwatch` from 2.42.14 to 2.42.15 Updates `software.amazon.awssdk:xray` from 2.42.14 to 2.42.15 Updates `software.amazon.awssdk:sqs` from 2.41.11 to 2.42.15 Updates `software.amazon.awssdk:cloudformation` from 2.42.14 to 2.42.15 Updates `software.amazon.awssdk:sts` from 2.42.14 to 2.42.15 --- updated-dependencies: - dependency-name: software.amazon.awssdk:bom dependency-version: 2.42.15 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: software.amazon.awssdk:http-client-spi dependency-version: 2.42.15 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: software.amazon.awssdk:url-connection-client dependency-version: 2.42.15 dependency-type: direct:development update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:s3 dependency-version: 2.42.15 dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:dynamodb dependency-version: 2.42.15 dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: software.amazon.awssdk:lambda dependency-version: 2.42.15 dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: software.amazon.awssdk:kinesis dependency-version: 2.42.15 dependency-type: direct:development update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:cloudwatch dependency-version: 2.42.15 dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: software.amazon.awssdk:xray dependency-version: 2.42.15 dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: software.amazon.awssdk:sqs dependency-version: 2.42.15 dependency-type: direct:development update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:cloudformation dependency-version: 2.42.15 dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: software.amazon.awssdk:sts dependency-version: 2.42.15 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- examples/powertools-examples-cloudformation/pom.xml | 2 +- pom.xml | 2 +- powertools-e2e-tests/handlers/pom.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/powertools-examples-cloudformation/pom.xml b/examples/powertools-examples-cloudformation/pom.xml index 4c6976b25..dc4d5857b 100644 --- a/examples/powertools-examples-cloudformation/pom.xml +++ b/examples/powertools-examples-cloudformation/pom.xml @@ -14,7 +14,7 @@ 11 1.4.0 3.16.1 - 2.42.14 + 2.42.15 1.9.20.1 diff --git a/pom.xml b/pom.xml index 30bc6e334..f54205f29 100644 --- a/pom.xml +++ b/pom.xml @@ -85,7 +85,7 @@ 2.25.3 2.0.17 2.21.1 - 2.42.14 + 2.42.15 2.20.0 2.2.0 UTF-8 diff --git a/powertools-e2e-tests/handlers/pom.xml b/powertools-e2e-tests/handlers/pom.xml index 07cd3228d..aabf2a1a0 100644 --- a/powertools-e2e-tests/handlers/pom.xml +++ b/powertools-e2e-tests/handlers/pom.xml @@ -19,7 +19,7 @@ 3.6.1 1.14.1 3.14.1 - 2.42.14 + 2.42.15 1.9.20.1 true From c9a52fb5a5e9e54405cfbf32cbfddb20250588c7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 18 Mar 2026 13:35:21 +0100 Subject: [PATCH 122/202] chore: bump release-drafter/release-drafter from 7.0.0 to 7.1.0 (#2423) Bumps [release-drafter/release-drafter](https://github.com/release-drafter/release-drafter) from 7.0.0 to 7.1.0. - [Release notes](https://github.com/release-drafter/release-drafter/releases) - [Commits](https://github.com/release-drafter/release-drafter/compare/3a7fb5c85b80b1dda66e1ccb94009adbbd32fce3...44a942e465867c7465b76aa808ddca6e0acae5da) --- updated-dependencies: - dependency-name: release-drafter/release-drafter dependency-version: 7.1.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> --- .github/workflows/release-drafter.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release-drafter.yml b/.github/workflows/release-drafter.yml index 4b00ed541..951a0b0f9 100644 --- a/.github/workflows/release-drafter.yml +++ b/.github/workflows/release-drafter.yml @@ -23,6 +23,6 @@ jobs: contents: write # required for creating draft releases steps: - name: Relase Drafter - uses: release-drafter/release-drafter@3a7fb5c85b80b1dda66e1ccb94009adbbd32fce3 + uses: release-drafter/release-drafter@44a942e465867c7465b76aa808ddca6e0acae5da env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} From d8a3e08169a21d2427993cdd8093084dec937917 Mon Sep 17 00:00:00 2001 From: Philipp Page Date: Wed, 18 Mar 2026 13:46:15 +0100 Subject: [PATCH 123/202] chore: modernize native maven profiles to using configuration and move to root pom. Update CI removing unnecessary metadata generation step. (#2419) --- .github/workflows/check-build.yml | 11 ++-- GraalVM.md | 41 +++++++----- .../demo/kafka/protobuf/ProtobufProduct.java | 4 +- .../protobuf/ProtobufProductOrBuilder.java | 2 +- .../protobuf/ProtobufProductOuterClass.java | 4 +- pom.xml | 63 +++++++++++++++++++ powertools-cloudformation/pom.xml | 53 +++------------- powertools-common/pom.xml | 53 ++-------------- .../powertools-idempotency-core/pom.xml | 53 ++-------------- .../powertools-idempotency-dynamodb/pom.xml | 46 +++----------- powertools-logging/pom.xml | 46 ++------------ .../powertools-logging-log4j/pom.xml | 46 +++----------- .../powertools-logging-logback/pom.xml | 46 +++----------- powertools-metrics/pom.xml | 53 ++-------------- powertools-parameters/pom.xml | 46 ++------------ .../powertools-parameters-appconfig/pom.xml | 54 ++-------------- .../powertools-parameters-dynamodb/pom.xml | 54 ++-------------- .../powertools-parameters-secrets/pom.xml | 54 ++-------------- .../powertools-parameters-ssm/pom.xml | 54 ++-------------- .../powertools-parameters-tests/pom.xml | 54 ++-------------- powertools-serialization/pom.xml | 43 ++----------- powertools-tracing/pom.xml | 53 +++------------- 22 files changed, 199 insertions(+), 734 deletions(-) diff --git a/.github/workflows/check-build.yml b/.github/workflows/check-build.yml index d0d45354b..9ba6e2fe9 100644 --- a/.github/workflows/check-build.yml +++ b/.github/workflows/check-build.yml @@ -124,9 +124,9 @@ jobs: echo "Changes detected in powertools modules: $CHANGED_FILES" - # Find modules with graalvm-native profile and run tests + # Find modules with native profile and run tests with the tracing agent find . -name "pom.xml" -path "./powertools-*" | while read module; do - if grep -q "graalvm-native" "$module"; then + if grep -q "native" "$module"; then module_dir=$(dirname "$module") module_name=$(basename "$module_dir") @@ -135,11 +135,8 @@ jobs: echo " $CHANGED_FILES " | grep -q " pom.xml " || \ echo "$CHANGED_FILES" | grep -q "powertools-common/"; then echo "::group::Building $module_name with GraalVM" - echo "Changes detected in $module_name - running GraalVM tests" - echo "Regenerating GraalVM metadata for $module_dir" - mvn -B -q -f "$module" -Pgenerate-graalvm-files clean test - echo "Running GraalVM native tests for $module_dir" - mvn -B -q -f "$module" -Pgraalvm-native test + echo "Changes detected in $module_name - running GraalVM native tests" + mvn -B -q -f "$module" -Pnative -Dagent=true clean test echo "::endgroup::" else echo "No changes detected in $module_name - skipping GraalVM tests" diff --git a/GraalVM.md b/GraalVM.md index bbddb5e3b..28004714d 100644 --- a/GraalVM.md +++ b/GraalVM.md @@ -19,26 +19,33 @@ GraalVM native image compilation requires complete knowledge of an application's In order to generate the metadata reachability files for Powertools for Lambda, follow these general steps. -1. **Add Maven Profiles** - - Add profile for generating GraalVM reachability metadata files. You can find an example of this in profile `generate-graalvm-files` of this [pom.xml](powertools-common/pom.xml). - - Add another profile for running the tests in the native image. You can find and example of this in profile `graalvm-native` of this [pom.xml](powertools-common/pom.xml). +1. **Add the `native` Maven Profile** + - The root `pom.xml` provides a shared `pluginManagement` configuration for the `native-maven-plugin` with the `` configuration, common `buildArgs`, and the `test-native` execution. + - Each module only needs to define a `native` profile that specifies module-specific configuration: `imageName` and `metadataCopy.outputDirectory`. You can find an example in the `native` profile of this [pom.xml](powertools-common/pom.xml). + - If a module needs extra `buildArgs` beyond the common ones, use `` to add them without overriding the parent configuration. 2. **Generate Reachability Metadata** - Set the `JAVA_HOME` environment variable to use GraalVM - - Run tests with `-Pgenerate-graalvm-files` profile. + - Run tests with the `-Dagent=true` flag to attach the GraalVM tracing agent to the test execution: ```shell -mvn -Pgenerate-graalvm-files clean test +mvn -Pnative -Dagent=true clean test ``` -3. **Validate Native Image Tests** +3. **Copy Metadata to Source** + - Copy the generated metadata from the agent output directory to the module's `src/main/resources` directory: +```shell +mvn -Pnative native:metadata-copy +``` + +4. **Validate Native Image Tests** - Set the `JAVA_HOME` environment variable to use GraalVM - - Run tests with `-Pgraalvm-native` profile. This will build a GraalVM native image and run the JUnit tests. + - Run tests with `-Pnative` profile. This will build a GraalVM native image and run the JUnit tests. ```shell -mvn -Pgraalvm-native clean test +mvn -Pnative test ``` -4. **Clean Up Metadata** - - GraalVM metadata reachability files generated in Step 2 contains references to the test scoped dependencies as well. +5. **Clean Up Metadata** + - GraalVM metadata reachability files generated in Step 2 contain references to the test scoped dependencies as well. - Remove the references in generated metadata files for the following (and any other references to test scoped resources and classes): - JUnit - Mockito @@ -46,17 +53,21 @@ mvn -Pgraalvm-native clean test ## Known Issues and Solutions 1. **Mockito Compatibility** - - Powertools uses Mockito 5.x which uses “inline mock maker” as the default. This mock maker does not play well with GraalVM. Mockito [recommends](https://github.com/mockito/mockito/releases/tag/v5.0.0) using subclass mock maker with GraalVM. Therefore `generate-graalvm-files` profile uses subclass mock maker instead of inline mock maker. + - Powertools uses Mockito 5.x which uses "inline mock maker" as the default. This mock maker does not play well with GraalVM. Mockito [recommends](https://github.com/mockito/mockito/releases/tag/v5.0.0) using subclass mock maker with GraalVM. Therefore the `native` profile adds the `mockito-subclass` dependency where needed. - Subclass mock maker does not support testing static methods. Tests have therefore been modified to use [JUnit Pioneer](https://junit-pioneer.org/docs/environment-variables/) to inject the environment variables in the scope of the test's execution. -2. **Log4j Compatibility** +2. **Unsafe Allocation Tracing** + - GraalVM 21.0.10+ requires `"unsafeAllocated": true` in `reflect-config.json` for classes instantiated via `Unsafe.allocateInstance()`. Mockito uses Objenesis which relies on this. + - The `enableExperimentalUnsafeAllocationTracing` option is enabled in the root `pluginManagement` agent configuration to address this. + +3. **Log4j Compatibility** - Version 2.22.1 fails with this error ``` java.lang.InternalError: com.oracle.svm.core.jdk.UnsupportedFeatureError: Defining hidden classes at runtime is not supported. ``` - This has been [fixed](https://github.com/apache/logging-log4j2/discussions/2364#discussioncomment-8950077) in Log4j 2.24.x. PT has been updated to use this version of Log4j -3. **Test Class Organization** +4. **Test Class Organization** - **Issue**: Anonymous inner classes and lambda expressions in Mockito matchers cause `NoSuchMethodError` in GraalVM native tests - **Solution**: - Extract static inner test classes to separate concrete classes in the same package as the class under test @@ -72,12 +83,12 @@ java.lang.InternalError: com.oracle.svm.core.jdk.UnsupportedFeatureError: Defini }) ``` -4. **Package Visibility Issues** +5. **Package Visibility Issues** - **Issue**: Test handler classes cannot access package-private methods when placed in subpackages - **Solution**: Place test handler classes in the same package as the class under test, not in subpackages like `handlers/` - **Example**: Use `software.amazon.lambda.powertools.cloudformation` instead of `software.amazon.lambda.powertools.cloudformation.handlers` -5. **Test Stubs Best Practice** +6. **Test Stubs Best Practice** - **Best Practice**: Avoid mocking where possible and use concrete test stubs provided by `powertools-common` package - **Solution**: Use `TestLambdaContext` and other test stubs from `powertools-common` test-jar instead of Mockito mocks - **Implementation**: Add `powertools-common` test-jar dependency and replace `mock(Context.class)` with `new TestLambdaContext()` diff --git a/examples/powertools-examples-kafka/src/main/java/org/demo/kafka/protobuf/ProtobufProduct.java b/examples/powertools-examples-kafka/src/main/java/org/demo/kafka/protobuf/ProtobufProduct.java index 196c0fa52..99c490869 100644 --- a/examples/powertools-examples-kafka/src/main/java/org/demo/kafka/protobuf/ProtobufProduct.java +++ b/examples/powertools-examples-kafka/src/main/java/org/demo/kafka/protobuf/ProtobufProduct.java @@ -1,7 +1,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // NO CHECKED-IN PROTOBUF GENCODE // source: ProtobufProduct.proto -// Protobuf Java Version: 4.33.2 +// Protobuf Java Version: 4.33.4 package org.demo.kafka.protobuf; @@ -19,7 +19,7 @@ public final class ProtobufProduct extends com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, /* major= */ 4, /* minor= */ 33, - /* patch= */ 2, + /* patch= */ 4, /* suffix= */ "", "ProtobufProduct"); } diff --git a/examples/powertools-examples-kafka/src/main/java/org/demo/kafka/protobuf/ProtobufProductOrBuilder.java b/examples/powertools-examples-kafka/src/main/java/org/demo/kafka/protobuf/ProtobufProductOrBuilder.java index 714a2c110..462d3a66d 100644 --- a/examples/powertools-examples-kafka/src/main/java/org/demo/kafka/protobuf/ProtobufProductOrBuilder.java +++ b/examples/powertools-examples-kafka/src/main/java/org/demo/kafka/protobuf/ProtobufProductOrBuilder.java @@ -1,7 +1,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // NO CHECKED-IN PROTOBUF GENCODE // source: ProtobufProduct.proto -// Protobuf Java Version: 4.33.2 +// Protobuf Java Version: 4.33.4 package org.demo.kafka.protobuf; diff --git a/examples/powertools-examples-kafka/src/main/java/org/demo/kafka/protobuf/ProtobufProductOuterClass.java b/examples/powertools-examples-kafka/src/main/java/org/demo/kafka/protobuf/ProtobufProductOuterClass.java index abefa922f..3edc97e12 100644 --- a/examples/powertools-examples-kafka/src/main/java/org/demo/kafka/protobuf/ProtobufProductOuterClass.java +++ b/examples/powertools-examples-kafka/src/main/java/org/demo/kafka/protobuf/ProtobufProductOuterClass.java @@ -1,7 +1,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // NO CHECKED-IN PROTOBUF GENCODE // source: ProtobufProduct.proto -// Protobuf Java Version: 4.33.2 +// Protobuf Java Version: 4.33.4 package org.demo.kafka.protobuf; @@ -13,7 +13,7 @@ private ProtobufProductOuterClass() {} com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, /* major= */ 4, /* minor= */ 33, - /* patch= */ 2, + /* patch= */ 4, /* suffix= */ "", "ProtobufProductOuterClass"); } diff --git a/pom.xml b/pom.xml index f54205f29..976c57768 100644 --- a/pom.xml +++ b/pom.xml @@ -117,6 +117,7 @@ 5.21.0 2.3.0 1.5.0 + 0.11.5 @@ -450,6 +451,45 @@ exec-maven-plugin 3.6.2 + + org.graalvm.buildtools + native-maven-plugin + ${native-maven-plugin.version} + true + + + test-native + + test + + test + + + + + true + + true + true + + + + main + + false + + + + --add-opens java.base/java.util=ALL-UNNAMED + --add-opens java.base/java.lang=ALL-UNNAMED + --no-fallback + --verbose + --native-image-info + -H:+UnlockExperimentalVMOptions + -H:+ReportExceptionStackTraces + + + @@ -635,6 +675,29 @@ + + + native + + + + org.apache.maven.plugins + maven-surefire-plugin + + + --add-opens java.base/java.util=ALL-UNNAMED --add-opens java.base/java.lang=ALL-UNNAMED + + + + + + diff --git a/powertools-cloudformation/pom.xml b/powertools-cloudformation/pom.xml index cb06dc1f3..4c3d2ac70 100644 --- a/powertools-cloudformation/pom.xml +++ b/powertools-cloudformation/pom.xml @@ -120,33 +120,7 @@ - generate-graalvm-files - - - org.mockito - mockito-subclass - test - - - - - - org.apache.maven.plugins - maven-surefire-plugin - - - -Dorg.graalvm.nativeimage.imagecode=agent - -agentlib:native-image-agent=config-output-dir=src/main/resources/META-INF/native-image/software.amazon.lambda/powertools-cloudformation,experimental-class-define-support - --add-opens java.base/java.util=ALL-UNNAMED - --add-opens java.base/java.lang=ALL-UNNAMED - - - - - - - - graalvm-native + native org.mockito @@ -159,28 +133,15 @@ org.graalvm.buildtools native-maven-plugin - 0.11.2 - true - - - test-native - - test - - test - - powertools-cloudformation - - --add-opens java.base/java.util=ALL-UNNAMED - --add-opens java.base/java.lang=ALL-UNNAMED + + + src/main/resources/META-INF/native-image/software.amazon.lambda/powertools-cloudformation + + + --enable-url-protocols=http - --no-fallback - --verbose - --native-image-info - -H:+UnlockExperimentalVMOptions - -H:+ReportExceptionStackTraces diff --git a/powertools-common/pom.xml b/powertools-common/pom.xml index 75ef10beb..cd43df238 100644 --- a/powertools-common/pom.xml +++ b/powertools-common/pom.xml @@ -93,33 +93,7 @@ - generate-graalvm-files - - - org.mockito - mockito-subclass - test - - - - - - org.apache.maven.plugins - maven-surefire-plugin - - - -Dorg.graalvm.nativeimage.imagecode=agent - -agentlib:native-image-agent=config-output-dir=src/main/resources/META-INF/native-image/software.amazon.lambda/powertools-common,experimental-class-define-support - --add-opens java.base/java.util=ALL-UNNAMED - --add-opens java.base/java.lang=ALL-UNNAMED - - - - - - - - graalvm-native + native org.mockito @@ -132,28 +106,13 @@ org.graalvm.buildtools native-maven-plugin - 0.11.2 - true - - - test-native - - test - - test - - powertools-common - - --add-opens java.base/java.util=ALL-UNNAMED - --add-opens java.base/java.lang=ALL-UNNAMED - --no-fallback - --verbose - --native-image-info - -H:+UnlockExperimentalVMOptions - -H:+ReportExceptionStackTraces - + + + src/main/resources/META-INF/native-image/software.amazon.lambda/powertools-common + + diff --git a/powertools-idempotency/powertools-idempotency-core/pom.xml b/powertools-idempotency/powertools-idempotency-core/pom.xml index 4cba1956f..0676be3fe 100644 --- a/powertools-idempotency/powertools-idempotency-core/pom.xml +++ b/powertools-idempotency/powertools-idempotency-core/pom.xml @@ -75,33 +75,7 @@ - generate-graalvm-files - - - org.mockito - mockito-subclass - test - - - - - - org.apache.maven.plugins - maven-surefire-plugin - - - -Dorg.graalvm.nativeimage.imagecode=agent - -agentlib:native-image-agent=config-output-dir=src/main/resources/META-INF/native-image/software.amazon.lambda/powertools-idempotency-core,experimental-class-define-support - --add-opens java.base/java.util=ALL-UNNAMED - --add-opens java.base/java.lang=ALL-UNNAMED - - - - - - - - graalvm-native + native org.mockito @@ -114,28 +88,13 @@ org.graalvm.buildtools native-maven-plugin - 0.11.2 - true - - - test-native - - test - - test - - powertools-idempotency-core - - --add-opens java.base/java.util=ALL-UNNAMED - --add-opens java.base/java.lang=ALL-UNNAMED - --no-fallback - --verbose - --native-image-info - -H:+UnlockExperimentalVMOptions - -H:+ReportExceptionStackTraces - + + + src/main/resources/META-INF/native-image/software.amazon.lambda/powertools-idempotency-core + + diff --git a/powertools-idempotency/powertools-idempotency-dynamodb/pom.xml b/powertools-idempotency/powertools-idempotency-dynamodb/pom.xml index d223e0d2f..e7101da6f 100644 --- a/powertools-idempotency/powertools-idempotency-dynamodb/pom.xml +++ b/powertools-idempotency/powertools-idempotency-dynamodb/pom.xml @@ -107,7 +107,7 @@ - generate-graalvm-files + native org.junit.jupiter @@ -141,28 +114,13 @@ org.graalvm.buildtools native-maven-plugin - 0.11.2 - true - - - test-native - - test - - test - - powertools-parameters-appconfig - - --add-opens java.base/java.util=ALL-UNNAMED - --add-opens java.base/java.lang=ALL-UNNAMED - --no-fallback - --verbose - --native-image-info - -H:+UnlockExperimentalVMOptions - -H:+ReportExceptionStackTraces - + + + src/main/resources/META-INF/native-image/software.amazon.lambda/powertools-parameters-appconfig + + diff --git a/powertools-parameters/powertools-parameters-dynamodb/pom.xml b/powertools-parameters/powertools-parameters-dynamodb/pom.xml index eb5604046..ff4be1ab6 100644 --- a/powertools-parameters/powertools-parameters-dynamodb/pom.xml +++ b/powertools-parameters/powertools-parameters-dynamodb/pom.xml @@ -96,40 +96,13 @@ - generate-graalvm-files + native org.mockito mockito-subclass test - - - - - org.apache.maven.plugins - maven-surefire-plugin - - - -Dorg.graalvm.nativeimage.imagecode=agent - -agentlib:native-image-agent=config-output-dir=src/main/resources/META-INF/native-image/software.amazon.lambda/powertools-parameters-dynamodb,experimental-class-define-support - --add-opens java.base/java.util=ALL-UNNAMED - --add-opens java.base/java.lang=ALL-UNNAMED - - - - - - - - graalvm-native - - - org.mockito - mockito-subclass - test - - org.junit.jupiter @@ -142,28 +115,13 @@ org.graalvm.buildtools native-maven-plugin - 0.11.2 - true - - - test-native - - test - - test - - powertools-parameters-dynamodb - - --add-opens java.base/java.util=ALL-UNNAMED - --add-opens java.base/java.lang=ALL-UNNAMED - --no-fallback - --verbose - --native-image-info - -H:+UnlockExperimentalVMOptions - -H:+ReportExceptionStackTraces - + + + src/main/resources/META-INF/native-image/software.amazon.lambda/powertools-parameters-dynamodb + + diff --git a/powertools-parameters/powertools-parameters-secrets/pom.xml b/powertools-parameters/powertools-parameters-secrets/pom.xml index b9535269e..2dddedec2 100644 --- a/powertools-parameters/powertools-parameters-secrets/pom.xml +++ b/powertools-parameters/powertools-parameters-secrets/pom.xml @@ -96,40 +96,13 @@ - generate-graalvm-files + native org.mockito mockito-subclass test - - - - - org.apache.maven.plugins - maven-surefire-plugin - - - -Dorg.graalvm.nativeimage.imagecode=agent - -agentlib:native-image-agent=config-output-dir=src/main/resources/META-INF/native-image/software.amazon.lambda/powertools-parameters-secrets,experimental-class-define-support - --add-opens java.base/java.util=ALL-UNNAMED - --add-opens java.base/java.lang=ALL-UNNAMED - - - - - - - - graalvm-native - - - org.mockito - mockito-subclass - test - - org.junit.jupiter @@ -142,28 +115,13 @@ org.graalvm.buildtools native-maven-plugin - 0.11.2 - true - - - test-native - - test - - test - - powertools-parameters-secrets - - --add-opens java.base/java.util=ALL-UNNAMED - --add-opens java.base/java.lang=ALL-UNNAMED - --no-fallback - --verbose - --native-image-info - -H:+UnlockExperimentalVMOptions - -H:+ReportExceptionStackTraces - + + + src/main/resources/META-INF/native-image/software.amazon.lambda/powertools-parameters-secrets + + diff --git a/powertools-parameters/powertools-parameters-ssm/pom.xml b/powertools-parameters/powertools-parameters-ssm/pom.xml index e0253e10b..fac44f57f 100644 --- a/powertools-parameters/powertools-parameters-ssm/pom.xml +++ b/powertools-parameters/powertools-parameters-ssm/pom.xml @@ -109,40 +109,13 @@ - generate-graalvm-files + native org.mockito mockito-subclass test - - - - - org.apache.maven.plugins - maven-surefire-plugin - - - -Dorg.graalvm.nativeimage.imagecode=agent - -agentlib:native-image-agent=config-output-dir=src/main/resources/META-INF/native-image/software.amazon.lambda/powertools-parameters-ssm,experimental-class-define-support - --add-opens java.base/java.util=ALL-UNNAMED - --add-opens java.base/java.lang=ALL-UNNAMED - - - - - - - - graalvm-native - - - org.mockito - mockito-subclass - test - - org.junit.jupiter @@ -155,28 +128,13 @@ org.graalvm.buildtools native-maven-plugin - 0.11.2 - true - - - test-native - - test - - test - - powertools-parameters-ssm - - --add-opens java.base/java.util=ALL-UNNAMED - --add-opens java.base/java.lang=ALL-UNNAMED - --no-fallback - --verbose - --native-image-info - -H:+UnlockExperimentalVMOptions - -H:+ReportExceptionStackTraces - + + + src/main/resources/META-INF/native-image/software.amazon.lambda/powertools-parameters-ssm + + diff --git a/powertools-parameters/powertools-parameters-tests/pom.xml b/powertools-parameters/powertools-parameters-tests/pom.xml index fa2542730..289a86ecb 100644 --- a/powertools-parameters/powertools-parameters-tests/pom.xml +++ b/powertools-parameters/powertools-parameters-tests/pom.xml @@ -97,40 +97,13 @@ - generate-graalvm-files + native org.mockito mockito-subclass test - - - - - org.apache.maven.plugins - maven-surefire-plugin - - - -Dorg.graalvm.nativeimage.imagecode=agent - -agentlib:native-image-agent=config-output-dir=src/main/resources/META-INF/native-image/software.amazon.lambda/powertools-parameters,experimental-class-define-support - --add-opens java.base/java.util=ALL-UNNAMED - --add-opens java.base/java.lang=ALL-UNNAMED - - - - - - - - graalvm-native - - - org.mockito - mockito-subclass - test - - org.junit.jupiter @@ -143,28 +116,13 @@ org.graalvm.buildtools native-maven-plugin - 0.11.2 - true - - - test-native - - test - - test - - powertools-parameters - - --add-opens java.base/java.util=ALL-UNNAMED - --add-opens java.base/java.lang=ALL-UNNAMED - --no-fallback - --verbose - --native-image-info - -H:+UnlockExperimentalVMOptions - -H:+ReportExceptionStackTraces - + + + src/main/resources/META-INF/native-image/software.amazon.lambda/powertools-parameters + + diff --git a/powertools-serialization/pom.xml b/powertools-serialization/pom.xml index 81603cd4f..45a724ba6 100644 --- a/powertools-serialization/pom.xml +++ b/powertools-serialization/pom.xml @@ -101,50 +101,19 @@ - generate-graalvm-files - - - - org.apache.maven.plugins - maven-surefire-plugin - - - -Dorg.graalvm.nativeimage.imagecode=agent - -agentlib:native-image-agent=config-output-dir=src/main/resources/META-INF/native-image/software.amazon.lambda/powertools-serialization,experimental-class-define-support - - - - - - - graalvm-native + native org.graalvm.buildtools native-maven-plugin - 0.11.2 - true - - - test-native - - test - - test - - powertools-serialization - - --add-opens java.base/java.util=ALL-UNNAMED - --add-opens java.base/java.lang=ALL-UNNAMED - --no-fallback - --verbose - --native-image-info - -H:+UnlockExperimentalVMOptions - -H:+ReportExceptionStackTraces - + + + src/main/resources/META-INF/native-image/software.amazon.lambda/powertools-serialization + + diff --git a/powertools-tracing/pom.xml b/powertools-tracing/pom.xml index a9bb8e61e..b70c23262 100644 --- a/powertools-tracing/pom.xml +++ b/powertools-tracing/pom.xml @@ -172,33 +172,7 @@ - generate-graalvm-files - - - org.mockito - mockito-subclass - test - - - - - - org.apache.maven.plugins - maven-surefire-plugin - - - -Dorg.graalvm.nativeimage.imagecode=agent - -agentlib:native-image-agent=config-output-dir=src/main/resources/META-INF/native-image/software.amazon.lambda/powertools-tracing,experimental-class-define-support - --add-opens java.base/java.util=ALL-UNNAMED - --add-opens java.base/java.lang=ALL-UNNAMED - - - - - - - - graalvm-native + native org.mockito @@ -211,28 +185,15 @@ org.graalvm.buildtools native-maven-plugin - 0.11.2 - true - - - test-native - - test - - test - - powertools-tracing - - --add-opens java.base/java.util=ALL-UNNAMED - --add-opens java.base/java.lang=ALL-UNNAMED + + + src/main/resources/META-INF/native-image/software.amazon.lambda/powertools-tracing + + + --enable-url-protocols=http - --no-fallback - --verbose - --native-image-info - -H:+UnlockExperimentalVMOptions - -H:+ReportExceptionStackTraces From 480bb4b78bbee2dc2df9be35095cb2f3ec033e51 Mon Sep 17 00:00:00 2001 From: Philipp Page Date: Thu, 19 Mar 2026 11:31:16 +0100 Subject: [PATCH 124/202] feat(lmds): Add support for Lambda Metadata Service (#2424) * feat(lmds): Add powertools-lambda-metadata package. * Remove unncessary docstring. * Enable HTTP protocol for native tests. * Add docs. * Add powertools-lambda-metadata utility in GH actions workflows paths. * Remove refresh() method from public API surface area. * Move validation logic to getRequiredEnvironmentVar. * Docs for testing your code. * Add E2E tests. * Adjust lmds utility pom.xml to modernized tracing agent config. * Fix E2E tests to return proper json for parsing in test suite. * Print function error on failure in E2E tests. * Add reflect-config.json for powertools-lambda-metadata. --- .github/workflows/check-build.yml | 2 + .github/workflows/check-e2e.yml | 1 + .github/workflows/check-spotbugs.yml | 1 + docs/utilities/lambda_metadata.md | 324 + mkdocs.yml | 2 + pom.xml | 1 + powertools-e2e-tests/README.md | 16 +- .../handlers/lambda-metadata/pom.xml | 56 + .../lambda/powertools/e2e/Function.java | 30 + .../aws-lambda-java-core/reflect-config.json | 13 + .../reflect-config.json | 35 + .../jni-config.json | 11 + .../native-image.properties | 1 + .../reflect-config.json | 62 + .../resource-config.json | 19 + .../reflect-config.json | 25 + .../reflect-config.json | 11 + powertools-e2e-tests/handlers/pom.xml | 6 + powertools-e2e-tests/pom.xml | 1 + .../lambda/powertools/LambdaMetadataE2ET.java | 95 + .../testutils/lambda/InvocationResult.java | 6 + powertools-lambda-metadata/pom.xml | 167 + .../powertools/metadata/LambdaMetadata.java | 72 + .../metadata/LambdaMetadataClient.java | 169 + .../exception/LambdaMetadataException.java | 74 + .../internal/LambdaMetadataHttpClient.java | 154 + .../reflect-config.json | 35 + .../src/main/resources/classesloaded.txt | 7923 +++++++++++++++++ .../LambdaMetadataClientConcurrencyTest.java | 84 + .../metadata/LambdaMetadataClientTest.java | 128 + .../metadata/LambdaMetadataTest.java | 68 + .../LambdaMetadataExceptionTest.java | 58 + .../LambdaMetadataHttpClientTest.java | 170 + 33 files changed, 9814 insertions(+), 6 deletions(-) create mode 100644 docs/utilities/lambda_metadata.md create mode 100644 powertools-e2e-tests/handlers/lambda-metadata/pom.xml create mode 100644 powertools-e2e-tests/handlers/lambda-metadata/src/main/java/software/amazon/lambda/powertools/e2e/Function.java create mode 100644 powertools-e2e-tests/handlers/lambda-metadata/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-core/reflect-config.json create mode 100644 powertools-e2e-tests/handlers/lambda-metadata/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-events/reflect-config.json create mode 100644 powertools-e2e-tests/handlers/lambda-metadata/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/jni-config.json create mode 100644 powertools-e2e-tests/handlers/lambda-metadata/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/native-image.properties create mode 100644 powertools-e2e-tests/handlers/lambda-metadata/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/reflect-config.json create mode 100644 powertools-e2e-tests/handlers/lambda-metadata/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/resource-config.json create mode 100644 powertools-e2e-tests/handlers/lambda-metadata/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-serialization/reflect-config.json create mode 100644 powertools-e2e-tests/handlers/lambda-metadata/src/main/resources/META-INF/native-image/software.amazon.lambda.powertools.e2e/reflect-config.json create mode 100644 powertools-e2e-tests/src/test/java/software/amazon/lambda/powertools/LambdaMetadataE2ET.java create mode 100644 powertools-lambda-metadata/pom.xml create mode 100644 powertools-lambda-metadata/src/main/java/software/amazon/lambda/powertools/metadata/LambdaMetadata.java create mode 100644 powertools-lambda-metadata/src/main/java/software/amazon/lambda/powertools/metadata/LambdaMetadataClient.java create mode 100644 powertools-lambda-metadata/src/main/java/software/amazon/lambda/powertools/metadata/exception/LambdaMetadataException.java create mode 100644 powertools-lambda-metadata/src/main/java/software/amazon/lambda/powertools/metadata/internal/LambdaMetadataHttpClient.java create mode 100644 powertools-lambda-metadata/src/main/resources/META-INF/native-image/software.amazon.lambda/powertools-lambda-metadata/reflect-config.json create mode 100644 powertools-lambda-metadata/src/main/resources/classesloaded.txt create mode 100644 powertools-lambda-metadata/src/test/java/software/amazon/lambda/powertools/metadata/LambdaMetadataClientConcurrencyTest.java create mode 100644 powertools-lambda-metadata/src/test/java/software/amazon/lambda/powertools/metadata/LambdaMetadataClientTest.java create mode 100644 powertools-lambda-metadata/src/test/java/software/amazon/lambda/powertools/metadata/LambdaMetadataTest.java create mode 100644 powertools-lambda-metadata/src/test/java/software/amazon/lambda/powertools/metadata/exception/LambdaMetadataExceptionTest.java create mode 100644 powertools-lambda-metadata/src/test/java/software/amazon/lambda/powertools/metadata/internal/LambdaMetadataHttpClientTest.java diff --git a/.github/workflows/check-build.yml b/.github/workflows/check-build.yml index 9ba6e2fe9..76f6f1a67 100644 --- a/.github/workflows/check-build.yml +++ b/.github/workflows/check-build.yml @@ -30,6 +30,7 @@ on: - 'powertools-tracing/**' - 'powertools-tracing/**' - 'powertools-validation/**' + - 'powertools-lambda-metadata/**' - 'examples/**' - 'pom.xml' - 'examples/pom.xml' @@ -54,6 +55,7 @@ on: - 'powertools-tracing/**' - 'powertools-tracing/**' - 'powertools-validation/**' + - 'powertools-lambda-metadata/**' - 'pom.xml' - 'examples/**' - 'examples/pom.xml' diff --git a/.github/workflows/check-e2e.yml b/.github/workflows/check-e2e.yml index daf079efe..4cf7234c9 100644 --- a/.github/workflows/check-e2e.yml +++ b/.github/workflows/check-e2e.yml @@ -31,6 +31,7 @@ on: - 'powertools-tracing/**' - 'powertools-tracing/**' - 'powertools-validation/**' + - 'powertools-lambda-metadata/**' - 'pom.xml' name: E2E Tests diff --git a/.github/workflows/check-spotbugs.yml b/.github/workflows/check-spotbugs.yml index 4e5fbcea3..a64bc6e86 100644 --- a/.github/workflows/check-spotbugs.yml +++ b/.github/workflows/check-spotbugs.yml @@ -28,6 +28,7 @@ on: - 'powertools-tracing/**' - 'powertools-validation/**' - 'powertools-test-suite/**' + - 'powertools-lambda-metadata/**' - 'pom.xml' - '.github/workflows/**' diff --git a/docs/utilities/lambda_metadata.md b/docs/utilities/lambda_metadata.md new file mode 100644 index 000000000..e79af2e32 --- /dev/null +++ b/docs/utilities/lambda_metadata.md @@ -0,0 +1,324 @@ +--- +title: Lambda Metadata +description: Utility +--- + +Lambda Metadata provides idiomatic access to the Lambda Metadata Endpoint (LMDS), eliminating boilerplate code for retrieving execution environment metadata like Availability Zone ID. + +## Key features + +* Retrieve Lambda execution environment metadata with a single method call +* Automatic caching for the sandbox lifetime, avoiding repeated HTTP calls +* Thread-safe access for concurrent executions (compatible with [Lambda Managed Instances](https://docs.aws.amazon.com/lambda/latest/dg/lambda-managed-instances.html){target="_blank"}) +* Automatic [SnapStart](https://docs.aws.amazon.com/lambda/latest/dg/snapstart.html){target="_blank"} cache invalidation via [CRaC](https://openjdk.org/projects/crac/){target="_blank"} integration +* Lightweight with minimal external dependencies, using built-in `HttpURLConnection` +* GraalVM support + +## Getting started + +### Installation + +=== "Maven" + + ```xml hl_lines="3-7" + + ... + + software.amazon.lambda + powertools-lambda-metadata + {{ powertools.version }} + + ... + + ``` + +=== "Gradle" + + ```groovy hl_lines="6" + repositories { + mavenCentral() + } + + dependencies { + implementation 'software.amazon.lambda:powertools-lambda-metadata:{{ powertools.version }}' + } + + sourceCompatibility = 11 + targetCompatibility = 11 + ``` + +### IAM Permissions + +No additional IAM permissions are required. The Lambda Metadata Endpoint is available within the Lambda execution environment and uses a Bearer token provided automatically via environment variables. + +### Basic usage + +Retrieve metadata using `LambdaMetadataClient.get()`: + +=== "App.java" + + ```java hl_lines="1 2 9 10" + import software.amazon.lambda.powertools.metadata.LambdaMetadata; + import software.amazon.lambda.powertools.metadata.LambdaMetadataClient; + + public class App implements RequestHandler { + + @Override + public String handleRequest(Object input, Context context) { + // Fetch metadata (automatically cached after first call) + LambdaMetadata metadata = LambdaMetadataClient.get(); + String azId = metadata.getAvailabilityZoneId(); // e.g., "use1-az1" + + return "{\"az\": \"" + azId + "\"}"; + } + } + ``` + +!!! info "At launch, only `availabilityZoneId` is available. The API is designed to support additional metadata fields as LMDS evolves." + +### Caching behavior + +Metadata is **cached automatically** after the first call. Subsequent calls return the cached value without making HTTP requests. + +=== "CachingExample.java" + + ```java hl_lines="9 12" + import software.amazon.lambda.powertools.metadata.LambdaMetadata; + import software.amazon.lambda.powertools.metadata.LambdaMetadataClient; + + public class CachingExample implements RequestHandler { + + @Override + public String handleRequest(Object input, Context context) { + // First call: fetches from endpoint and caches + LambdaMetadata metadata = LambdaMetadataClient.get(); + + // Subsequent calls: returns cached value (no HTTP call) + LambdaMetadata metadataAgain = LambdaMetadataClient.get(); + + // Both return the same cached instance + assert metadata == metadataAgain; + + return "{\"az\": \"" + metadata.getAvailabilityZoneId() + "\"}"; + } + } + ``` + +This is safe because metadata (like Availability Zone) never changes during a sandbox's lifetime. + +## Advanced + +### Eager loading at module level + +For predictable latency, fetch metadata at class initialization: + +=== "EagerLoadingExample.java" + + ```java hl_lines="7" + import software.amazon.lambda.powertools.metadata.LambdaMetadata; + import software.amazon.lambda.powertools.metadata.LambdaMetadataClient; + + public class EagerLoadingExample implements RequestHandler { + + // Fetch during cold start (class loading) + private static final LambdaMetadata METADATA = LambdaMetadataClient.get(); + + @Override + public String handleRequest(Object input, Context context) { + // No latency hit here - already cached + return "{\"az\": \"" + METADATA.getAvailabilityZoneId() + "\"}"; + } + } + ``` + +#### SnapStart considerations + +When using [SnapStart](https://docs.aws.amazon.com/lambda/latest/dg/snapstart.html){target="_blank"}, the function may restore in a different Availability Zone. The utility automatically handles this by registering with CRaC to invalidate the cache after restore. + +Using the same eager loading pattern above, the cache is automatically invalidated on SnapStart restore, ensuring subsequent calls to `LambdaMetadataClient.get()` return refreshed metadata. + +!!! note "For module-level usage with SnapStart, ensure `LambdaMetadataClient` is referenced during initialization so the CRaC hook registers before the snapshot is taken." + +### Lambda Managed Instances + +For [Lambda Managed Instances](https://docs.aws.amazon.com/lambda/latest/dg/lambda-managed-instances.html){target="_blank"} (multi-threaded concurrency), no changes are needed. The utility uses thread-safe caching with `AtomicReference` to ensure correct behavior across concurrent executions on the same instance. + +=== "ManagedInstanceHandler.java" + + ```java hl_lines="9" + import software.amazon.lambda.powertools.metadata.LambdaMetadata; + import software.amazon.lambda.powertools.metadata.LambdaMetadataClient; + + public class ManagedInstanceHandler implements RequestHandler { + + @Override + public String handleRequest(Object input, Context context) { + // Thread-safe: multiple concurrent invocations safely share cached metadata + LambdaMetadata metadata = LambdaMetadataClient.get(); + return "{\"az\": \"" + metadata.getAvailabilityZoneId() + "\"}"; + } + } + ``` + +### Error handling + +The utility throws `LambdaMetadataException` when the metadata endpoint is unavailable or returns an error: + +=== "ErrorHandlingExample.java" + + ```java hl_lines="2 7 14 18 21" + import software.amazon.lambda.powertools.metadata.LambdaMetadata; + import software.amazon.lambda.powertools.metadata.exception.LambdaMetadataException; + import software.amazon.lambda.powertools.metadata.LambdaMetadataClient; + import software.amazon.lambda.powertools.logging.Logging; + import org.slf4j.Logger; + import org.slf4j.LoggerFactory; + import static software.amazon.lambda.powertools.logging.argument.StructuredArguments.entry; + + public class ErrorHandlingExample implements RequestHandler { + + private static final Logger LOG = LoggerFactory.getLogger(ErrorHandlingExample.class); + + @Override + @Logging + public String handleRequest(Object input, Context context) { + String az; + try { + LambdaMetadata metadata = LambdaMetadataClient.get(); + az = metadata.getAvailabilityZoneId(); + } catch (LambdaMetadataException e) { + LOG.warn("Could not fetch metadata", entry("statusCode", e.getStatusCode()), entry("error", e.getMessage())); + az = "unknown"; + } + + return "{\"az\": \"" + az + "\"}"; + } + } + ``` + +## Testing your code + +When running outside a Lambda execution environment (e.g., in unit tests), the `AWS_LAMBDA_METADATA_API` and `AWS_LAMBDA_METADATA_TOKEN` environment variables are not available. Calling `LambdaMetadataClient.get()` in this context throws a `LambdaMetadataException`. + +### Mocking LambdaMetadataClient + +For tests where you need to control the metadata values, use Mockito's `mockStatic` to mock `LambdaMetadataClient.get()`: + +=== "MockedMetadataTest.java" + + ```java hl_lines="15-17" + import software.amazon.lambda.powertools.metadata.LambdaMetadata; + import software.amazon.lambda.powertools.metadata.LambdaMetadataClient; + import org.mockito.MockedStatic; + import org.junit.jupiter.api.Test; + import static org.assertj.core.api.Assertions.assertThat; + import static org.mockito.Mockito.*; + + class MockedMetadataTest { + + @Test + void shouldUseMetadataInHandler() { + LambdaMetadata mockMetadata = mock(LambdaMetadata.class); + when(mockMetadata.getAvailabilityZoneId()).thenReturn("use1-az1"); + + try (MockedStatic mockedClient = + mockStatic(LambdaMetadataClient.class)) { + mockedClient.when(LambdaMetadataClient::get).thenReturn(mockMetadata); + + App handler = new App(); + String result = handler.handleRequest(null, null); + + assertThat(result).contains("use1-az1"); + } + } + } + ``` + +### Using WireMock + +For integration tests, you can use [WireMock](https://wiremock.org/){target="_blank"} to mock the metadata HTTP endpoint. Set `AWS_LAMBDA_METADATA_API` and `AWS_LAMBDA_METADATA_TOKEN` environment variables using [junit-pioneer](https://junit-pioneer.org/docs/environment-variables/){target="_blank"}, and stub the endpoint response: + +=== "WireMockMetadataTest.java" + + ```java hl_lines="10-12" + import static com.github.tomakehurst.wiremock.client.WireMock.*; + import static org.assertj.core.api.Assertions.assertThat; + + import com.github.tomakehurst.wiremock.junit5.WireMockTest; + import org.junitpioneer.jupiter.SetEnvironmentVariable; + import org.junit.jupiter.api.Test; + import software.amazon.lambda.powertools.metadata.LambdaMetadata; + import software.amazon.lambda.powertools.metadata.internal.LambdaMetadataHttpClient; + + @WireMockTest(httpPort = 8089) + @SetEnvironmentVariable(key = "AWS_LAMBDA_METADATA_API", value = "localhost:8089") + @SetEnvironmentVariable(key = "AWS_LAMBDA_METADATA_TOKEN", value = "test-token") + class WireMockMetadataTest { + + @Test + void shouldFetchMetadataFromEndpoint() { + stubFor(get(urlEqualTo("/2026-01-15/metadata/execution-environment")) + .withHeader("Authorization", equalTo("Bearer test-token")) + .willReturn(aResponse() + .withStatus(200) + .withHeader("Content-Type", "application/json") + .withBody("{\"AvailabilityZoneID\": \"use1-az1\"}"))); + + LambdaMetadataHttpClient client = new LambdaMetadataHttpClient(); + LambdaMetadata metadata = client.fetchMetadata(); + + assertThat(metadata.getAvailabilityZoneId()).isEqualTo("use1-az1"); + } + } + ``` + +## Using with other Powertools utilities + +Lambda Metadata integrates seamlessly with other Powertools utilities to enrich your observability data with Availability Zone information. + +=== "IntegratedExample.java" + + ```java + import software.amazon.lambda.powertools.logging.Logging; + import software.amazon.lambda.powertools.tracing.Tracing; + import software.amazon.lambda.powertools.tracing.TracingUtils; + import software.amazon.lambda.powertools.metrics.FlushMetrics; + import software.amazon.lambda.powertools.metrics.Metrics; + import software.amazon.lambda.powertools.metrics.MetricsFactory; + import software.amazon.lambda.powertools.metrics.model.MetricUnit; + import software.amazon.lambda.powertools.metadata.LambdaMetadata; + import software.amazon.lambda.powertools.metadata.LambdaMetadataClient; + import org.slf4j.Logger; + import org.slf4j.LoggerFactory; + import org.slf4j.MDC; + + public class IntegratedExample implements RequestHandler { + + private static final Logger LOG = LoggerFactory.getLogger(IntegratedExample.class); + private static final Metrics metrics = MetricsFactory.getMetricsInstance(); + + @Logging + @Tracing + @FlushMetrics(captureColdStart = true) + @Override + public String handleRequest(Object input, Context context) { + LambdaMetadata metadata = LambdaMetadataClient.get(); + String azId = metadata.getAvailabilityZoneId(); + + // Add AZ as dimension for all metrics + metrics.addDimension("availability_zone_id", azId); + + // Add AZ to structured logs + MDC.put("availability_zone_id", azId); + LOG.info("Processing request"); + + // Add AZ to traces + TracingUtils.putAnnotation("availability_zone_id", azId); + + // Add metrics + metrics.addMetric("RequestProcessed", 1, MetricUnit.COUNT); + + return "{\"status\": \"ok\"}"; + } + } + ``` diff --git a/mkdocs.yml b/mkdocs.yml index b52b88cca..fea59aae0 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -22,6 +22,7 @@ nav: - utilities/validation.md - utilities/custom_resources.md - utilities/serialization.md + - utilities/lambda_metadata.md - Processes: - processes/maintainers.md - "Versioning policy": processes/versioning.md @@ -114,6 +115,7 @@ plugins: - utilities/batch.md - utilities/kafka.md - utilities/large_messages.md + - utilities/lambda_metadata.md - utilities/validation.md - utilities/custom_resources.md - utilities/serialization.md diff --git a/pom.xml b/pom.xml index 976c57768..75bdf6187 100644 --- a/pom.xml +++ b/pom.xml @@ -70,6 +70,7 @@ powertools-e2e-tests powertools-e2e-tests/handlers powertools-batch + powertools-lambda-metadata powertools-parameters/powertools-parameters-ssm powertools-parameters/powertools-parameters-secrets powertools-parameters/powertools-parameters-dynamodb diff --git a/powertools-e2e-tests/README.md b/powertools-e2e-tests/README.md index 61799e6f7..25571875e 100644 --- a/powertools-e2e-tests/README.md +++ b/powertools-e2e-tests/README.md @@ -1,16 +1,20 @@ ## End-to-end tests -This module is internal and meant to be used for end-to-end (E2E) testing of Powertools for AWS Lambda (Java). -__Prerequisites__: -- An AWS account is needed as well as a local environment able to reach this account -([credentials](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/credentials.html)). +This module is internal and meant to be used for end-to-end (E2E) testing of Powertools for AWS Lambda (Java). + +**Prerequisites**: + +- An AWS account is needed as well as a local environment able to reach this account + ([credentials](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/credentials.html)). - [Java 11+](https://docs.aws.amazon.com/corretto/latest/corretto-11-ug/downloads-list.html) -- [Docker](https://docs.docker.com/engine/install/) +- [Docker](https://docs.docker.com/engine/install/) (or [Finch](https://github.com/runfinch/finch) — if using Finch, set `export CDK_DOCKER=finch` before running tests) To execute the E2E tests, use the following command: `export JAVA_VERSION=11 && mvn clean verify -Pe2e` ### Under the hood + This module leverages the following components: + - AWS CDK to define the infrastructure and synthesize a CloudFormation template and the assets (lambda function packages) - The AWS S3 SDK to push the assets on S3 -- The AWS CloudFormation SDK to deploy the template \ No newline at end of file +- The AWS CloudFormation SDK to deploy the template diff --git a/powertools-e2e-tests/handlers/lambda-metadata/pom.xml b/powertools-e2e-tests/handlers/lambda-metadata/pom.xml new file mode 100644 index 000000000..eb69c1d47 --- /dev/null +++ b/powertools-e2e-tests/handlers/lambda-metadata/pom.xml @@ -0,0 +1,56 @@ + + 4.0.0 + + + software.amazon.lambda + e2e-test-handlers-parent + 2.9.0 + + + e2e-test-handler-lambda-metadata + jar + E2E test handler – Lambda Metadata + + + + software.amazon.lambda + powertools-lambda-metadata + + + com.amazonaws + aws-lambda-java-runtime-interface-client + + + com.amazonaws + aws-lambda-java-core + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + org.apache.maven.plugins + maven-shade-plugin + + + + + + + native-image + + + + org.graalvm.buildtools + native-maven-plugin + + + + + + diff --git a/powertools-e2e-tests/handlers/lambda-metadata/src/main/java/software/amazon/lambda/powertools/e2e/Function.java b/powertools-e2e-tests/handlers/lambda-metadata/src/main/java/software/amazon/lambda/powertools/e2e/Function.java new file mode 100644 index 000000000..656ab81eb --- /dev/null +++ b/powertools-e2e-tests/handlers/lambda-metadata/src/main/java/software/amazon/lambda/powertools/e2e/Function.java @@ -0,0 +1,30 @@ +/* + * Copyright 2023 Amazon.com, Inc. or its affiliates. + * Licensed under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * 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. + * + */ + +package software.amazon.lambda.powertools.e2e; + +import java.util.Map; + +import com.amazonaws.services.lambda.runtime.Context; +import com.amazonaws.services.lambda.runtime.RequestHandler; +import software.amazon.lambda.powertools.metadata.LambdaMetadata; +import software.amazon.lambda.powertools.metadata.LambdaMetadataClient; + +public class Function implements RequestHandler> { + + public Map handleRequest(Object input, Context context) { + LambdaMetadata metadata = LambdaMetadataClient.get(); + return Map.of("availabilityZoneId", metadata.getAvailabilityZoneId()); + } +} diff --git a/powertools-e2e-tests/handlers/lambda-metadata/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-core/reflect-config.json b/powertools-e2e-tests/handlers/lambda-metadata/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-core/reflect-config.json new file mode 100644 index 000000000..2780aca09 --- /dev/null +++ b/powertools-e2e-tests/handlers/lambda-metadata/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-core/reflect-config.json @@ -0,0 +1,13 @@ +[ + { + "name":"com.amazonaws.services.lambda.runtime.LambdaRuntime", + "methods":[{"name":"","parameterTypes":[] }], + "fields":[{"name":"logger"}], + "allPublicMethods":true + }, + { + "name":"com.amazonaws.services.lambda.runtime.LambdaRuntimeInternal", + "methods":[{"name":"","parameterTypes":[] }], + "allPublicMethods":true + } +] \ No newline at end of file diff --git a/powertools-e2e-tests/handlers/lambda-metadata/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-events/reflect-config.json b/powertools-e2e-tests/handlers/lambda-metadata/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-events/reflect-config.json new file mode 100644 index 000000000..ddda5d5f1 --- /dev/null +++ b/powertools-e2e-tests/handlers/lambda-metadata/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-events/reflect-config.json @@ -0,0 +1,35 @@ +[ + { + "name": "com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent", + "allDeclaredFields": true, + "allDeclaredMethods": true, + "allDeclaredConstructors": true + }, + { + "name": "com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent$ProxyRequestContext", + "allDeclaredFields": true, + "allDeclaredMethods": true, + "allDeclaredConstructors": true + }, + { + "name": "com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent$RequestIdentity", + "allDeclaredFields": true, + "allDeclaredMethods": true, + "allDeclaredConstructors": true + }, + { + "name": "com.amazonaws.services.lambda.runtime.events.APIGatewayProxyResponseEvent", + "allDeclaredFields": true, + "allDeclaredMethods": true, + "allDeclaredConstructors": true + }, + { + "name": "com.amazonaws.services.lambda.runtime.events.APIGatewayProxyResponseEvent", + "allDeclaredConstructors": true, + "allPublicConstructors": true, + "allDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + } +] \ No newline at end of file diff --git a/powertools-e2e-tests/handlers/lambda-metadata/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/jni-config.json b/powertools-e2e-tests/handlers/lambda-metadata/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/jni-config.json new file mode 100644 index 000000000..91be72f7a --- /dev/null +++ b/powertools-e2e-tests/handlers/lambda-metadata/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/jni-config.json @@ -0,0 +1,11 @@ +[ + { + "name":"com.amazonaws.services.lambda.runtime.api.client.runtimeapi.LambdaRuntimeClientException", + "methods":[{"name":"","parameterTypes":["java.lang.String","int"] }] + }, + { + "name":"com.amazonaws.services.lambda.runtime.api.client.runtimeapi.dto.InvocationRequest", + "fields":[{"name":"id"}, {"name":"invokedFunctionArn"}, {"name":"deadlineTimeInMs"}, {"name":"xrayTraceId"}, {"name":"clientContext"}, {"name":"cognitoIdentity"}, {"name": "tenantId"}, {"name":"content"}], + "allPublicMethods":true + } +] \ No newline at end of file diff --git a/powertools-e2e-tests/handlers/lambda-metadata/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/native-image.properties b/powertools-e2e-tests/handlers/lambda-metadata/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/native-image.properties new file mode 100644 index 000000000..20f8b7801 --- /dev/null +++ b/powertools-e2e-tests/handlers/lambda-metadata/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/native-image.properties @@ -0,0 +1 @@ +Args = --initialize-at-build-time=jdk.xml.internal.SecuritySupport \ No newline at end of file diff --git a/powertools-e2e-tests/handlers/lambda-metadata/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/reflect-config.json b/powertools-e2e-tests/handlers/lambda-metadata/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/reflect-config.json new file mode 100644 index 000000000..467af67a0 --- /dev/null +++ b/powertools-e2e-tests/handlers/lambda-metadata/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/reflect-config.json @@ -0,0 +1,62 @@ +[ + { + "name": "com.amazonaws.lambda.thirdparty.com.fasterxml.jackson.databind.deser.Deserializers[]" + }, + { + "name": "com.amazonaws.lambda.thirdparty.com.fasterxml.jackson.databind.ext.Java7SupportImpl", + "methods": [{ "name": "", "parameterTypes": [] }] + }, + { + "name": "com.amazonaws.services.lambda.runtime.LambdaRuntime", + "fields": [{ "name": "logger" }] + }, + { + "name": "com.amazonaws.services.lambda.runtime.logging.LogLevel", + "allDeclaredConstructors": true, + "allPublicConstructors": true, + "allDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredFields": true, + "allPublicFields": true + }, + { + "name": "com.amazonaws.services.lambda.runtime.logging.LogFormat", + "allDeclaredConstructors": true, + "allPublicConstructors": true, + "allDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredFields": true, + "allPublicFields": true + }, + { + "name": "java.lang.Void", + "methods": [{ "name": "", "parameterTypes": [] }] + }, + { + "name": "java.util.Collections$UnmodifiableMap", + "fields": [{ "name": "m" }] + }, + { + "name": "jdk.internal.module.IllegalAccessLogger", + "fields": [{ "name": "logger" }] + }, + { + "name": "sun.misc.Unsafe", + "fields": [{ "name": "theUnsafe" }] + }, + { + "name": "com.amazonaws.services.lambda.runtime.api.client.runtimeapi.dto.InvocationRequest", + "fields": [ + { "name": "id" }, + { "name": "invokedFunctionArn" }, + { "name": "deadlineTimeInMs" }, + { "name": "xrayTraceId" }, + { "name": "clientContext" }, + { "name": "cognitoIdentity" }, + { "name": "tenantId" }, + { "name": "content" } + ], + "allPublicMethods": true, + "unsafeAllocated": true + } +] diff --git a/powertools-e2e-tests/handlers/lambda-metadata/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/resource-config.json b/powertools-e2e-tests/handlers/lambda-metadata/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/resource-config.json new file mode 100644 index 000000000..1062b4249 --- /dev/null +++ b/powertools-e2e-tests/handlers/lambda-metadata/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/resource-config.json @@ -0,0 +1,19 @@ +{ + "resources": { + "includes": [ + { + "pattern": "\\Qjni/libaws-lambda-jni.linux-aarch_64.so\\E" + }, + { + "pattern": "\\Qjni/libaws-lambda-jni.linux-x86_64.so\\E" + }, + { + "pattern": "\\Qjni/libaws-lambda-jni.linux_musl-aarch_64.so\\E" + }, + { + "pattern": "\\Qjni/libaws-lambda-jni.linux_musl-x86_64.so\\E" + } + ] + }, + "bundles": [] +} \ No newline at end of file diff --git a/powertools-e2e-tests/handlers/lambda-metadata/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-serialization/reflect-config.json b/powertools-e2e-tests/handlers/lambda-metadata/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-serialization/reflect-config.json new file mode 100644 index 000000000..9890688f9 --- /dev/null +++ b/powertools-e2e-tests/handlers/lambda-metadata/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-serialization/reflect-config.json @@ -0,0 +1,25 @@ +[ + { + "name": "com.amazonaws.lambda.thirdparty.com.fasterxml.jackson.databind.deser.Deserializers[]" + }, + { + "name": "com.amazonaws.lambda.thirdparty.com.fasterxml.jackson.databind.ext.Java7HandlersImpl", + "methods": [{ "name": "", "parameterTypes": [] }] + }, + { + "name": "com.amazonaws.lambda.thirdparty.com.fasterxml.jackson.databind.ext.Java7SupportImpl", + "methods": [{ "name": "", "parameterTypes": [] }] + }, + { + "name": "com.amazonaws.lambda.thirdparty.com.fasterxml.jackson.databind.ser.Serializers[]" + }, + { + "name": "org.joda.time.DateTime", + "allDeclaredConstructors": true, + "allPublicConstructors": true, + "allDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + } +] diff --git a/powertools-e2e-tests/handlers/lambda-metadata/src/main/resources/META-INF/native-image/software.amazon.lambda.powertools.e2e/reflect-config.json b/powertools-e2e-tests/handlers/lambda-metadata/src/main/resources/META-INF/native-image/software.amazon.lambda.powertools.e2e/reflect-config.json new file mode 100644 index 000000000..e1d6fb127 --- /dev/null +++ b/powertools-e2e-tests/handlers/lambda-metadata/src/main/resources/META-INF/native-image/software.amazon.lambda.powertools.e2e/reflect-config.json @@ -0,0 +1,11 @@ +[ + { + "name": "software.amazon.lambda.powertools.e2e.Function", + "allDeclaredConstructors": true, + "allPublicConstructors": true, + "allDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + } +] diff --git a/powertools-e2e-tests/handlers/pom.xml b/powertools-e2e-tests/handlers/pom.xml index aabf2a1a0..abea8288e 100644 --- a/powertools-e2e-tests/handlers/pom.xml +++ b/powertools-e2e-tests/handlers/pom.xml @@ -42,6 +42,7 @@ parameters validation-alb-event validation-apigw-event + lambda-metadata @@ -113,6 +114,11 @@ powertools-validation ${project.version} + + software.amazon.lambda + powertools-lambda-metadata + ${project.version} + com.amazonaws aws-lambda-java-core diff --git a/powertools-e2e-tests/pom.xml b/powertools-e2e-tests/pom.xml index 6953b6781..864440833 100644 --- a/powertools-e2e-tests/pom.xml +++ b/powertools-e2e-tests/pom.xml @@ -257,6 +257,7 @@ **/ParametersE2ET.java **/TracingE2ET.java **/IdempotencyE2ET.java + **/LambdaMetadataE2ET.java true diff --git a/powertools-e2e-tests/src/test/java/software/amazon/lambda/powertools/LambdaMetadataE2ET.java b/powertools-e2e-tests/src/test/java/software/amazon/lambda/powertools/LambdaMetadataE2ET.java new file mode 100644 index 000000000..22b1d702e --- /dev/null +++ b/powertools-e2e-tests/src/test/java/software/amazon/lambda/powertools/LambdaMetadataE2ET.java @@ -0,0 +1,95 @@ +/* + * Copyright 2023 Amazon.com, Inc. or its affiliates. + * Licensed under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * 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. + * + */ + +package software.amazon.lambda.powertools; + +import static org.assertj.core.api.Assertions.assertThat; +import static software.amazon.lambda.powertools.testutils.Infrastructure.FUNCTION_NAME_OUTPUT; +import static software.amazon.lambda.powertools.testutils.lambda.LambdaInvoker.invokeFunction; + +import java.util.Map; +import java.util.concurrent.TimeUnit; + +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.Timeout; + +import com.fasterxml.jackson.databind.JsonNode; + +import software.amazon.lambda.powertools.testutils.Infrastructure; +import software.amazon.lambda.powertools.testutils.lambda.InvocationResult; +import software.amazon.lambda.powertools.utilities.JsonConfig; + +class LambdaMetadataE2ET { + + private static Infrastructure infrastructure; + private static String functionName; + + @BeforeAll + @Timeout(value = 15, unit = TimeUnit.MINUTES) + static void setup() { + infrastructure = Infrastructure.builder() + .testName(LambdaMetadataE2ET.class.getSimpleName()) + .pathToFunction("lambda-metadata") + .build(); + Map outputs = infrastructure.deploy(); + functionName = outputs.get(FUNCTION_NAME_OUTPUT); + } + + @AfterAll + static void tearDown() { + if (infrastructure != null) { + infrastructure.destroy(); + } + } + + @Test + void test_getMetadata() throws Exception { + // WHEN + InvocationResult invocationResult = invokeFunction(functionName, "{}"); + + // THEN + assertThat(invocationResult.getFunctionError()) + .describedAs("Lambda function failed: %s", invocationResult.getFunctionError()) + .isNull(); + + JsonNode response = JsonConfig.get().getObjectMapper().readTree(invocationResult.getResult()); + String availabilityZoneId = response.get("availabilityZoneId").asText(); + assertThat(availabilityZoneId).isNotNull().matches("[a-z]{3,4}\\d+-az\\d+"); + } + + @Test + void test_metadataCaching() throws Exception { + // WHEN - invoke twice (both invocations hit the same sandbox) + InvocationResult firstResult = invokeFunction(functionName, "{}"); + InvocationResult secondResult = invokeFunction(functionName, "{}"); + + // THEN - both should return the same AZ ID (cached within sandbox) + assertThat(firstResult.getFunctionError()) + .describedAs("Lambda function failed on first invocation: %s", firstResult.getFunctionError()) + .isNull(); + assertThat(secondResult.getFunctionError()) + .describedAs("Lambda function failed on second invocation: %s", secondResult.getFunctionError()) + .isNull(); + + JsonNode firstResponse = JsonConfig.get().getObjectMapper().readTree(firstResult.getResult()); + JsonNode secondResponse = JsonConfig.get().getObjectMapper().readTree(secondResult.getResult()); + + String firstAzId = firstResponse.get("availabilityZoneId").asText(); + String secondAzId = secondResponse.get("availabilityZoneId").asText(); + + assertThat(firstAzId).isNotNull().matches("[a-z]{3,4}\\d+-az\\d+").isEqualTo(secondAzId); + } +} diff --git a/powertools-e2e-tests/src/test/java/software/amazon/lambda/powertools/testutils/lambda/InvocationResult.java b/powertools-e2e-tests/src/test/java/software/amazon/lambda/powertools/testutils/lambda/InvocationResult.java index b91840b8e..4652f6e82 100644 --- a/powertools-e2e-tests/src/test/java/software/amazon/lambda/powertools/testutils/lambda/InvocationResult.java +++ b/powertools-e2e-tests/src/test/java/software/amazon/lambda/powertools/testutils/lambda/InvocationResult.java @@ -22,6 +22,7 @@ public class InvocationResult { private final InvocationLogs logs; private final String result; + private final String functionError; private final String requestId; private final Instant start; @@ -31,6 +32,7 @@ public InvocationResult(InvokeResponse response, Instant start, Instant end) { requestId = response.responseMetadata().requestId(); logs = new InvocationLogs(response.logResult(), requestId); result = response.payload().asUtf8String(); + functionError = response.functionError(); this.start = start; this.end = end; } @@ -54,4 +56,8 @@ public Instant getStart() { public Instant getEnd() { return end; } + + public String getFunctionError() { + return functionError; + } } diff --git a/powertools-lambda-metadata/pom.xml b/powertools-lambda-metadata/pom.xml new file mode 100644 index 000000000..7a5ab6f24 --- /dev/null +++ b/powertools-lambda-metadata/pom.xml @@ -0,0 +1,167 @@ + + + + + 4.0.0 + + powertools-lambda-metadata + jar + + + powertools-parent + software.amazon.lambda + 2.9.0 + + + Powertools for AWS Lambda (Java) - Lambda Metadata + + A utility for idiomatic access to the Lambda Metadata Endpoint (LMDS), providing + automatic caching, thread-safe access, and SnapStart support for retrieving + execution environment metadata like Availability Zone ID. + + + + + + software.amazon.lambda + powertools-common + + + + + com.fasterxml.jackson.core + jackson-databind + + + + + org.crac + crac + + + + + org.slf4j + slf4j-api + + + + + org.junit.jupiter + junit-jupiter-api + test + + + org.junit.jupiter + junit-jupiter-engine + test + + + org.junit-pioneer + junit-pioneer + test + + + org.assertj + assertj-core + test + + + org.mockito + mockito-core + test + + + org.mockito + mockito-junit-jupiter + test + + + org.slf4j + slf4j-simple + test + + + org.wiremock + wiremock + test + + + + + + + dev.aspectj + aspectj-maven-plugin + ${aspectj-maven-plugin.version} + + true + + + + + + + + generate-classesloaded-file + + + + org.apache.maven.plugins + maven-surefire-plugin + + + -Xlog:class+load=info:classesloaded.txt + --add-opens java.base/java.util=ALL-UNNAMED + --add-opens java.base/java.lang=ALL-UNNAMED + + + + + + + + native + + + org.mockito + mockito-subclass + test + + + + + + org.graalvm.buildtools + native-maven-plugin + + powertools-lambda-metadata + + + src/main/resources/META-INF/native-image/software.amazon.lambda/powertools-lambda-metadata + + + + --enable-url-protocols=http + + + + + + + + diff --git a/powertools-lambda-metadata/src/main/java/software/amazon/lambda/powertools/metadata/LambdaMetadata.java b/powertools-lambda-metadata/src/main/java/software/amazon/lambda/powertools/metadata/LambdaMetadata.java new file mode 100644 index 000000000..3a2e05b0e --- /dev/null +++ b/powertools-lambda-metadata/src/main/java/software/amazon/lambda/powertools/metadata/LambdaMetadata.java @@ -0,0 +1,72 @@ +/* + * Copyright 2023 Amazon.com, Inc. or its affiliates. + * Licensed under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * 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. + * + */ + +package software.amazon.lambda.powertools.metadata; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; + +/** + * Data class representing Lambda execution environment metadata. + *

+ * This class is immutable and contains metadata retrieved from the Lambda Metadata Endpoint (LMDS). + * Use {@link LambdaMetadataClient#get()} to obtain an instance. + *

+ *

+ * This class is annotated with {@link JsonIgnoreProperties} to ensure forward compatibility. + *

+ * + *

Example Usage

+ *
{@code
+ * LambdaMetadata metadata = LambdaMetadataClient.get();
+ * String azId = metadata.getAvailabilityZoneId();
+ * }
+ * + * @see LambdaMetadataClient + */ +@JsonIgnoreProperties(ignoreUnknown = true) +public final class LambdaMetadata { + + @JsonProperty("AvailabilityZoneID") + private final String availabilityZoneId; + + /** + * Default constructor for Jackson deserialization. + */ + public LambdaMetadata() { + this.availabilityZoneId = null; + } + + /** + * Constructor with availability zone ID. + * + * @param availabilityZoneId the availability zone ID + */ + public LambdaMetadata(String availabilityZoneId) { + this.availabilityZoneId = availabilityZoneId; + } + + /** + * Returns the Availability Zone ID. + *

+ * The Availability Zone ID is a unique identifier for the availability zone + * where the Lambda function is executing (e.g., "use1-az1"). + *

+ * + * @return the availability zone ID + */ + public String getAvailabilityZoneId() { + return availabilityZoneId; + } +} diff --git a/powertools-lambda-metadata/src/main/java/software/amazon/lambda/powertools/metadata/LambdaMetadataClient.java b/powertools-lambda-metadata/src/main/java/software/amazon/lambda/powertools/metadata/LambdaMetadataClient.java new file mode 100644 index 000000000..da563359b --- /dev/null +++ b/powertools-lambda-metadata/src/main/java/software/amazon/lambda/powertools/metadata/LambdaMetadataClient.java @@ -0,0 +1,169 @@ +/* + * Copyright 2023 Amazon.com, Inc. or its affiliates. + * Licensed under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * 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. + * + */ + +package software.amazon.lambda.powertools.metadata; + +import java.util.concurrent.atomic.AtomicReference; + +import org.crac.Core; +import org.crac.Resource; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import software.amazon.lambda.powertools.common.internal.ClassPreLoader; +import software.amazon.lambda.powertools.metadata.exception.LambdaMetadataException; +import software.amazon.lambda.powertools.metadata.internal.LambdaMetadataHttpClient; + +/** + * Client for accessing Lambda execution environment metadata. + *

+ * This utility provides idiomatic access to the Lambda Metadata Endpoint (LMDS), + * eliminating boilerplate code for retrieving execution environment metadata + * like Availability Zone ID. + *

+ *

+ * Features: + *

    + *
  • Automatic caching for the sandbox lifetime
  • + *
  • Thread-safe access for concurrent executions
  • + *
  • SnapStart cache invalidation via CRaC
  • + *
  • Lazy loading on first access
  • + *
+ *

+ * + *

Basic Usage

+ *
{@code
+ * public String handleRequest(Object input, Context context) {
+ *     LambdaMetadata metadata = LambdaMetadataClient.get();
+ *     String azId = metadata.getAvailabilityZoneId();
+ *     return "{\"az\": \"" + azId + "\"}";
+ * }
+ * }
+ * + *

Eager Loading

+ *
{@code
+ * public class MyHandler implements RequestHandler {
+ *     // Fetch during cold start
+ *     private static final LambdaMetadata METADATA = LambdaMetadataClient.get();
+ *
+ *     public String handleRequest(Object input, Context context) {
+ *         return "{\"az\": \"" + METADATA.getAvailabilityZoneId() + "\"}";
+ *     }
+ * }
+ * }
+ * + * @see LambdaMetadata + */ +public final class LambdaMetadataClient implements Resource { + + private static final Logger LOG = LoggerFactory.getLogger(LambdaMetadataClient.class); + + private static final AtomicReference cachedInstance = new AtomicReference<>(); + private static final LambdaMetadataClient CRAC_INSTANCE = new LambdaMetadataClient(); + private static LambdaMetadataHttpClient httpClient = new LambdaMetadataHttpClient(); + + // Register with CRaC for SnapStart cache invalidation + static { + Core.getGlobalContext().register(CRAC_INSTANCE); + } + + private LambdaMetadataClient() { + // Utility class + } + + /** + * Retrieves the cached metadata, fetching from the endpoint if not cached. + *

+ * This method is thread-safe and handles concurrent access correctly. + * The first call fetches metadata from the Lambda Metadata Endpoint, + * subsequent calls return the cached value. + *

+ * + * @return the LambdaMetadata instance + * @throws LambdaMetadataException if the metadata endpoint is unavailable or returns an error + */ + public static LambdaMetadata get() { + LambdaMetadata instance = cachedInstance.get(); + if (instance != null) { + return instance; + } + + LambdaMetadata newInstance = httpClient.fetchMetadata(); + // Use compareAndSet to handle race conditions - first writer wins + if (cachedInstance.compareAndSet(null, newInstance)) { + LOG.debug("Lambda metadata fetched and cached: availabilityZoneId={}", + newInstance.getAvailabilityZoneId()); + return newInstance; + } + // Another thread won the race, return their instance + return cachedInstance.get(); + } + + /** + * Forces a refresh of the cached metadata. + *

+ * This method clears the cache and fetches fresh metadata from the endpoint. + * Used internally for SnapStart cache invalidation. + *

+ * + * @return the refreshed LambdaMetadata instance + * @throws LambdaMetadataException if the metadata endpoint is unavailable or returns an error + */ + static LambdaMetadata refresh() { + cachedInstance.set(null); + return get(); + } + + /** + * Called before a CRaC checkpoint is taken. + * Preloads classes to ensure faster restore. + * + * @param context the CRaC context + */ + @Override + public void beforeCheckpoint(org.crac.Context context) { + // Preload classes for faster restore + ClassPreLoader.preloadClasses(); + LOG.debug("Lambda metadata: beforeCheckpoint completed"); + } + + /** + * Called after a CRaC restore. + * Invalidates the cache since the AZ may have changed after cross-AZ restore. + * + * @param context the CRaC context + */ + @Override + public void afterRestore(org.crac.Context context) { + resetCache(); + LOG.debug("Lambda metadata: cache invalidated after SnapStart restore"); + } + + /** + * Sets the HTTP client (for testing purposes only). + * + * @param client the client to use + */ + static void setHttpClient(LambdaMetadataHttpClient client) { + httpClient = client; + cachedInstance.set(null); + } + + /** + * Resets the cached instance (for testing purposes only). + */ + static void resetCache() { + cachedInstance.set(null); + } +} diff --git a/powertools-lambda-metadata/src/main/java/software/amazon/lambda/powertools/metadata/exception/LambdaMetadataException.java b/powertools-lambda-metadata/src/main/java/software/amazon/lambda/powertools/metadata/exception/LambdaMetadataException.java new file mode 100644 index 000000000..659c30468 --- /dev/null +++ b/powertools-lambda-metadata/src/main/java/software/amazon/lambda/powertools/metadata/exception/LambdaMetadataException.java @@ -0,0 +1,74 @@ +/* + * Copyright 2023 Amazon.com, Inc. or its affiliates. + * Licensed under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * 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. + * + */ + +package software.amazon.lambda.powertools.metadata.exception; + +/** + * Exception thrown when the Lambda Metadata Endpoint is unavailable or returns an error. + *

+ * This exception may be thrown when: + *

    + *
  • The metadata endpoint environment variables are not set
  • + *
  • The metadata endpoint returns a non-200 status code
  • + *
  • Network errors occur when connecting to the endpoint
  • + *
  • The response cannot be parsed
  • + *
+ *

+ */ +public class LambdaMetadataException extends RuntimeException { + + private static final long serialVersionUID = 1L; + private final int statusCode; + + /** + * Constructs a new exception with the specified message. + * + * @param message the error message + */ + public LambdaMetadataException(String message) { + super(message); + this.statusCode = -1; + } + + /** + * Constructs a new exception with the specified message and cause. + * + * @param message the error message + * @param cause the underlying cause + */ + public LambdaMetadataException(String message, Throwable cause) { + super(message, cause); + this.statusCode = -1; + } + + /** + * Constructs a new exception with the specified message and HTTP status code. + * + * @param message the error message + * @param statusCode the HTTP status code from the metadata endpoint + */ + public LambdaMetadataException(String message, int statusCode) { + super(message); + this.statusCode = statusCode; + } + + /** + * Returns the HTTP status code from the metadata endpoint. + * + * @return the HTTP status code, or -1 if not applicable + */ + public int getStatusCode() { + return statusCode; + } +} diff --git a/powertools-lambda-metadata/src/main/java/software/amazon/lambda/powertools/metadata/internal/LambdaMetadataHttpClient.java b/powertools-lambda-metadata/src/main/java/software/amazon/lambda/powertools/metadata/internal/LambdaMetadataHttpClient.java new file mode 100644 index 000000000..78b2cf3db --- /dev/null +++ b/powertools-lambda-metadata/src/main/java/software/amazon/lambda/powertools/metadata/internal/LambdaMetadataHttpClient.java @@ -0,0 +1,154 @@ +/* + * Copyright 2023 Amazon.com, Inc. or its affiliates. + * Licensed under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * 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. + * + */ + +package software.amazon.lambda.powertools.metadata.internal; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; +import java.net.URL; +import java.nio.charset.StandardCharsets; +import java.util.stream.Collectors; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.fasterxml.jackson.databind.ObjectMapper; + +import software.amazon.lambda.powertools.metadata.LambdaMetadata; +import software.amazon.lambda.powertools.metadata.exception.LambdaMetadataException; + +/** + * Internal HTTP client for fetching metadata from the Lambda Metadata Endpoint. + *

+ * Uses {@link HttpURLConnection} to avoid additional dependencies - it's part of the JDK + * and works out of the box with GraalVM native image. + *

+ */ +public class LambdaMetadataHttpClient { + + private static final Logger LOG = LoggerFactory.getLogger(LambdaMetadataHttpClient.class); + + static final String ENV_METADATA_API = "AWS_LAMBDA_METADATA_API"; + static final String ENV_METADATA_TOKEN = "AWS_LAMBDA_METADATA_TOKEN"; + private static final String API_VERSION = "2026-01-15"; + private static final String METADATA_PATH = "/metadata/execution-environment"; + private static final int CONNECT_TIMEOUT_MS = 1000; + private static final int READ_TIMEOUT_MS = 1000; + + private final ObjectMapper objectMapper; + + public LambdaMetadataHttpClient() { + this.objectMapper = new ObjectMapper(); + } + + /** + * Fetches metadata from the Lambda Metadata Endpoint. + * + * @return the Lambda metadata + * @throws LambdaMetadataException if the fetch fails + */ + public LambdaMetadata fetchMetadata() { + String token = getRequiredEnvironmentVariable(ENV_METADATA_TOKEN); + String api = getRequiredEnvironmentVariable(ENV_METADATA_API); + + String urlString = "http://" + api + "/" + API_VERSION + METADATA_PATH; + LOG.debug("Fetching Lambda metadata from: {}", urlString); + + HttpURLConnection conn = null; + try { + URL url = new URL(urlString); + conn = (HttpURLConnection) url.openConnection(); + conn.setRequestMethod("GET"); + conn.setRequestProperty("Authorization", "Bearer " + token); + conn.setConnectTimeout(CONNECT_TIMEOUT_MS); + conn.setReadTimeout(READ_TIMEOUT_MS); + conn.setDoInput(true); + + int statusCode = conn.getResponseCode(); + if (statusCode != HttpURLConnection.HTTP_OK) { + String errorMessage = readErrorStream(conn); + throw new LambdaMetadataException( + "Metadata request failed with status " + statusCode + ": " + errorMessage, + statusCode); + } + + String responseBody = readInputStream(conn); + LOG.debug("Lambda metadata response: {}", responseBody); + + return objectMapper.readValue(responseBody, LambdaMetadata.class); + } catch (LambdaMetadataException e) { + throw e; + } catch (IOException e) { + throw new LambdaMetadataException("Failed to fetch Lambda metadata: " + e.getMessage(), e); + } finally { + if (conn != null) { + conn.disconnect(); + } + } + } + + /** + * Gets a required environment variable value. + * Throws {@link LambdaMetadataException} if the value is null or empty. + * This method is package-private to allow overriding in tests. + * + * @param name the environment variable name + * @return the value, never null or empty + * @throws LambdaMetadataException if the environment variable is not set or empty + */ + String getRequiredEnvironmentVariable(String name) { + String value = System.getenv(name); + if (value == null || value.isEmpty()) { + throw new LambdaMetadataException( + "Environment variable " + name + " is not set. Ensure " + name + " is set."); + } + return value; + } + + /** + * Reads the input stream from a connection. + * + * @param conn the HTTP connection + * @return the response body as a string + * @throws IOException if reading fails + */ + private String readInputStream(HttpURLConnection conn) throws IOException { + try (BufferedReader reader = new BufferedReader( + new InputStreamReader(conn.getInputStream(), StandardCharsets.UTF_8))) { + return reader.lines().collect(Collectors.joining("\n")); + } + } + + /** + * Reads the error stream from a connection. + * + * @param conn the HTTP connection + * @return the error message, or empty string if not available + */ + private String readErrorStream(HttpURLConnection conn) { + try { + if (conn.getErrorStream() != null) { + try (BufferedReader reader = new BufferedReader( + new InputStreamReader(conn.getErrorStream(), StandardCharsets.UTF_8))) { + return reader.lines().collect(Collectors.joining("\n")); + } + } + } catch (IOException e) { + LOG.debug("Failed to read error stream", e); + } + return ""; + } +} diff --git a/powertools-lambda-metadata/src/main/resources/META-INF/native-image/software.amazon.lambda/powertools-lambda-metadata/reflect-config.json b/powertools-lambda-metadata/src/main/resources/META-INF/native-image/software.amazon.lambda/powertools-lambda-metadata/reflect-config.json new file mode 100644 index 000000000..82715e589 --- /dev/null +++ b/powertools-lambda-metadata/src/main/resources/META-INF/native-image/software.amazon.lambda/powertools-lambda-metadata/reflect-config.json @@ -0,0 +1,35 @@ +[ +{ + "name":"org.apiguardian.api.API", + "queryAllPublicMethods":true +}, +{ + "name":"org.eclipse.jetty.http.pathmap.PathSpecSet", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "name":"org.eclipse.jetty.servlets.CrossOriginFilter", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "name":"org.eclipse.jetty.util.AsciiLowerCaseSet", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "name":"org.eclipse.jetty.util.TypeUtil", + "methods":[{"name":"getClassLoaderLocation","parameterTypes":["java.lang.Class"] }, {"name":"getCodeSourceLocation","parameterTypes":["java.lang.Class"] }, {"name":"getModuleLocation","parameterTypes":["java.lang.Class"] }, {"name":"getSystemClassLoaderLocation","parameterTypes":["java.lang.Class"] }] +}, +{ + "name":"software.amazon.lambda.powertools.metadata.LambdaMetadata", + "allDeclaredFields":true, + "queryAllDeclaredMethods":true, + "queryAllDeclaredConstructors":true, + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "name":"software.amazon.lambda.powertools.metadata.internal.LambdaMetadataHttpClient", + "queryAllDeclaredMethods":true, + "queryAllDeclaredConstructors":true, + "methods":[{"name":"fetchMetadata","parameterTypes":[] }] +} +] diff --git a/powertools-lambda-metadata/src/main/resources/classesloaded.txt b/powertools-lambda-metadata/src/main/resources/classesloaded.txt new file mode 100644 index 000000000..0bf80a0c6 --- /dev/null +++ b/powertools-lambda-metadata/src/main/resources/classesloaded.txt @@ -0,0 +1,7923 @@ +java.lang.Object +java.io.Serializable +java.lang.Comparable +java.lang.CharSequence +java.lang.constant.Constable +java.lang.constant.ConstantDesc +java.lang.String +java.lang.reflect.AnnotatedElement +java.lang.reflect.GenericDeclaration +java.lang.reflect.Type +java.lang.invoke.TypeDescriptor +java.lang.invoke.TypeDescriptor$OfField +java.lang.Class +java.lang.Cloneable +java.lang.ClassLoader +java.lang.System +java.lang.Throwable +java.lang.Error +java.lang.Exception +java.lang.RuntimeException +java.security.ProtectionDomain +java.security.SecureClassLoader +java.lang.ReflectiveOperationException +java.lang.ClassNotFoundException +java.lang.Record +java.lang.LinkageError +java.lang.NoClassDefFoundError +java.lang.ClassCastException +java.lang.ArrayStoreException +java.lang.VirtualMachineError +java.lang.InternalError +java.lang.OutOfMemoryError +java.lang.StackOverflowError +java.lang.IllegalMonitorStateException +java.lang.ref.Reference +java.lang.IllegalCallerException +java.lang.ref.SoftReference +java.lang.ref.WeakReference +java.lang.ref.FinalReference +java.lang.ref.PhantomReference +java.lang.ref.Finalizer +java.lang.Runnable +java.lang.Thread +java.lang.Thread$FieldHolder +java.lang.Thread$Constants +java.lang.Thread$UncaughtExceptionHandler +java.lang.ThreadGroup +java.lang.BaseVirtualThread +java.lang.VirtualThread +java.lang.ThreadBuilders$BoundVirtualThread +java.util.Dictionary +java.util.Map +java.util.Hashtable +java.util.Properties +java.lang.Module +java.lang.reflect.AccessibleObject +java.lang.reflect.Member +java.lang.reflect.Field +java.lang.reflect.Parameter +java.lang.reflect.Executable +java.lang.reflect.Method +java.lang.reflect.Constructor +jdk.internal.vm.ContinuationScope +jdk.internal.vm.Continuation +jdk.internal.vm.StackChunk +jdk.internal.reflect.MethodAccessor +jdk.internal.reflect.MethodAccessorImpl +jdk.internal.reflect.ConstantPool +java.lang.annotation.Annotation +jdk.internal.reflect.CallerSensitive +jdk.internal.reflect.ConstructorAccessor +jdk.internal.reflect.ConstructorAccessorImpl +jdk.internal.reflect.DirectConstructorHandleAccessor$NativeAccessor +java.lang.invoke.MethodHandle +java.lang.invoke.DirectMethodHandle +java.lang.invoke.VarHandle +java.lang.invoke.MemberName +java.lang.invoke.ResolvedMethodName +java.lang.invoke.MethodHandleImpl +java.lang.invoke.MethodHandleNatives +java.lang.invoke.LambdaForm +java.lang.invoke.TypeDescriptor$OfMethod +java.lang.invoke.MethodType +java.lang.BootstrapMethodError +java.lang.invoke.CallSite +jdk.internal.foreign.abi.NativeEntryPoint +jdk.internal.foreign.abi.ABIDescriptor +jdk.internal.foreign.abi.VMStorage +jdk.internal.foreign.abi.UpcallLinker$CallRegs +java.lang.invoke.ConstantCallSite +java.lang.invoke.MutableCallSite +java.lang.invoke.VolatileCallSite +java.lang.AssertionStatusDirectives +java.lang.Appendable +java.lang.AbstractStringBuilder +java.lang.StringBuffer +java.lang.StringBuilder +jdk.internal.misc.UnsafeConstants +jdk.internal.misc.Unsafe +jdk.internal.module.Modules +java.lang.AutoCloseable +java.io.Closeable +java.io.InputStream +java.io.ByteArrayInputStream +java.net.URL +java.lang.Enum +java.util.jar.Manifest +jdk.internal.loader.BuiltinClassLoader +jdk.internal.loader.ClassLoaders +jdk.internal.loader.ClassLoaders$AppClassLoader +jdk.internal.loader.ClassLoaders$PlatformClassLoader +java.security.CodeSource +java.util.AbstractMap +java.util.concurrent.ConcurrentMap +java.util.concurrent.ConcurrentHashMap +java.lang.Iterable +java.util.Collection +java.util.AbstractCollection +java.util.SequencedCollection +java.util.List +java.util.AbstractList +java.util.RandomAccess +java.util.ArrayList +java.lang.StackTraceElement +java.nio.Buffer +java.lang.StackWalker +java.lang.StackStreamFactory$AbstractStackWalker +java.lang.StackWalker$StackFrame +java.lang.ClassFrameInfo +java.lang.StackFrameInfo +java.lang.LiveStackFrame +java.lang.LiveStackFrameInfo +java.util.concurrent.locks.AbstractOwnableSynchronizer +java.lang.Boolean +java.lang.Character +java.lang.Number +java.lang.Float +java.lang.Double +java.lang.Byte +java.lang.Short +java.lang.Integer +java.lang.Long +java.lang.Void +java.util.Iterator +java.lang.reflect.RecordComponent +jdk.internal.vm.vector.VectorSupport +jdk.internal.vm.vector.VectorSupport$VectorPayload +jdk.internal.vm.vector.VectorSupport$Vector +jdk.internal.vm.vector.VectorSupport$VectorMask +jdk.internal.vm.vector.VectorSupport$VectorShuffle +jdk.internal.vm.FillerObject +java.lang.Integer$IntegerCache +java.lang.Long$LongCache +java.lang.Byte$ByteCache +java.lang.Short$ShortCache +java.lang.Character$CharacterCache +java.util.jar.Attributes$Name +java.util.ImmutableCollections$AbstractImmutableMap +java.util.ImmutableCollections$MapN +sun.util.locale.BaseLocale +jdk.internal.module.ArchivedModuleGraph +java.lang.module.ModuleFinder +jdk.internal.module.SystemModuleFinders$SystemModuleFinder +java.util.ImmutableCollections$AbstractImmutableCollection +java.util.Set +java.util.ImmutableCollections$AbstractImmutableSet +java.util.ImmutableCollections$SetN +java.lang.module.ModuleReference +jdk.internal.module.ModuleReferenceImpl +java.lang.module.ModuleDescriptor +java.lang.module.ModuleDescriptor$Version +java.util.ImmutableCollections$Set12 +java.lang.module.ModuleDescriptor$Requires +java.lang.module.ModuleDescriptor$Requires$Modifier +java.lang.module.ModuleDescriptor$Exports +java.lang.module.ModuleDescriptor$Provides +java.util.ImmutableCollections$AbstractImmutableList +java.util.ImmutableCollections$List12 +java.net.URI +java.util.function.Supplier +jdk.internal.module.SystemModuleFinders$1 +jdk.internal.module.ModuleHashes$HashSupplier +jdk.internal.module.SystemModuleFinders$2 +java.util.ImmutableCollections$ListN +java.lang.module.ModuleDescriptor$Opens +jdk.internal.module.ModuleTarget +jdk.internal.module.ModuleHashes +java.util.Collections$UnmodifiableMap +java.util.HashMap +java.util.Map$Entry +java.util.HashMap$Node +java.lang.module.Configuration +java.lang.module.ResolvedModule +java.util.function.Function +jdk.internal.module.ModuleLoaderMap$Mapper +java.util.ImmutableCollections +java.lang.ModuleLayer +jdk.internal.math.FDBigInteger +java.io.ObjectStreamField +java.util.Comparator +java.lang.String$CaseInsensitiveComparator +jdk.internal.misc.VM +java.lang.Module$ArchivedData +jdk.internal.misc.CDS +java.util.Objects +jdk.internal.access.JavaLangReflectAccess +java.lang.reflect.ReflectAccess +jdk.internal.access.SharedSecrets +jdk.internal.reflect.ReflectionFactory +java.io.ObjectStreamClass +java.lang.Math +jdk.internal.reflect.ReflectionFactory$Config +jdk.internal.access.JavaLangRefAccess +java.lang.ref.Reference$1 +java.lang.ref.ReferenceQueue +java.lang.ref.ReferenceQueue$Null +java.lang.ref.ReferenceQueue$Lock +jdk.internal.access.JavaLangAccess +java.lang.System$1 +jdk.internal.util.SystemProps +jdk.internal.util.SystemProps$Raw +java.nio.charset.Charset +java.nio.charset.spi.CharsetProvider +sun.nio.cs.StandardCharsets +java.lang.StringLatin1 +sun.nio.cs.HistoricallyNamedCharset +sun.nio.cs.Unicode +sun.nio.cs.UTF_8 +java.lang.StrictMath +jdk.internal.util.ArraysSupport +java.util.LinkedHashMap$Entry +java.util.HashMap$TreeNode +java.lang.StringConcatHelper +java.lang.VersionProps +java.lang.Runtime +java.util.concurrent.locks.Lock +java.util.concurrent.locks.ReentrantLock +java.util.concurrent.ConcurrentHashMap$Segment +java.util.concurrent.ConcurrentHashMap$CounterCell +java.util.concurrent.ConcurrentHashMap$Node +java.util.concurrent.locks.LockSupport +java.util.concurrent.ConcurrentHashMap$ReservationNode +java.util.AbstractSet +java.util.HashMap$EntrySet +java.util.HashMap$HashIterator +java.util.HashMap$EntryIterator +jdk.internal.util.StaticProperty +java.io.FileInputStream +java.lang.System$In +java.io.FileDescriptor +jdk.internal.access.JavaIOFileDescriptorAccess +java.io.FileDescriptor$1 +java.io.Flushable +java.io.OutputStream +java.io.FileOutputStream +java.lang.System$Out +java.io.FilterInputStream +java.io.BufferedInputStream +java.io.FilterOutputStream +java.io.PrintStream +java.io.BufferedOutputStream +java.io.Writer +java.io.OutputStreamWriter +sun.nio.cs.StreamEncoder +java.nio.charset.CharsetEncoder +sun.nio.cs.UTF_8$Encoder +java.nio.charset.CodingErrorAction +java.util.Arrays +java.nio.ByteBuffer +jdk.internal.misc.ScopedMemoryAccess +java.nio.Buffer$1 +jdk.internal.util.Preconditions +jdk.internal.util.Preconditions$1 +java.util.function.BiFunction +jdk.internal.util.Preconditions$4 +jdk.internal.util.Preconditions$2 +jdk.internal.util.Preconditions$3 +jdk.internal.access.JavaNioAccess +java.nio.Buffer$2 +java.nio.HeapByteBuffer +java.nio.ByteOrder +java.io.BufferedWriter +java.lang.Terminator +jdk.internal.misc.Signal$Handler +java.lang.Terminator$1 +jdk.internal.misc.Signal +java.util.Hashtable$Entry +jdk.internal.misc.Signal$NativeHandler +jdk.internal.misc.OSEnvironment +java.lang.Thread$State +java.lang.ref.Reference$ReferenceHandler +java.lang.Thread$ThreadIdentifiers +java.lang.ref.Finalizer$FinalizerThread +jdk.internal.ref.Cleaner +java.util.Collections +java.util.Collections$EmptySet +java.util.Collections$EmptyList +java.util.Collections$EmptyMap +java.lang.NullPointerException +java.lang.ArithmeticException +java.lang.IndexOutOfBoundsException +java.lang.ArrayIndexOutOfBoundsException +java.lang.IllegalArgumentException +java.lang.invoke.MethodHandleStatics +java.lang.reflect.ClassFileFormatVersion +java.lang.CharacterData +java.lang.CharacterDataLatin1 +jdk.internal.util.ClassFileDumper +java.util.HexFormat +java.util.concurrent.atomic.AtomicInteger +jdk.internal.module.ModuleBootstrap +java.lang.invoke.MethodHandles +java.lang.invoke.MemberName$Factory +jdk.internal.reflect.Reflection +java.lang.invoke.MethodHandles$Lookup +java.util.ImmutableCollections$MapN$1 +java.util.ImmutableCollections$MapN$MapNIterator +java.util.KeyValueHolder +sun.invoke.util.VerifyAccess +java.lang.reflect.Modifier +jdk.internal.access.JavaLangModuleAccess +java.lang.module.ModuleDescriptor$1 +java.io.File +java.io.DefaultFileSystem +java.io.FileSystem +java.io.UnixFileSystem +jdk.internal.util.DecimalDigits +jdk.internal.module.ModulePatcher +jdk.internal.module.ModuleBootstrap$IllegalNativeAccess +java.util.HashSet +jdk.internal.module.ModuleLoaderMap +jdk.internal.module.ModuleLoaderMap$Modules +jdk.internal.module.ModuleBootstrap$Counters +jdk.internal.module.ArchivedBootLayer +jdk.internal.access.JavaNetUriAccess +java.net.URI$1 +jdk.internal.loader.ArchivedClassLoaders +jdk.internal.loader.ClassLoaders$BootClassLoader +java.security.cert.Certificate +java.lang.ClassLoader$ParallelLoaders +java.util.WeakHashMap +java.util.WeakHashMap$Entry +java.util.Collections$SetFromMap +java.util.WeakHashMap$KeySet +java.security.Principal +jdk.internal.loader.NativeLibraries +jdk.internal.loader.ClassLoaderHelper +jdk.internal.util.OSVersion +java.util.concurrent.ConcurrentHashMap$CollectionView +java.util.concurrent.ConcurrentHashMap$KeySetView +jdk.internal.loader.URLClassPath +java.net.URLStreamHandlerFactory +java.net.URL$DefaultFactory +jdk.internal.access.JavaNetURLAccess +java.net.URL$1 +java.io.File$PathStatus +sun.net.www.ParseUtil +java.net.URLStreamHandler +sun.net.www.protocol.file.Handler +sun.net.util.IPAddressUtil +sun.net.util.IPAddressUtil$MASKS +java.util.Queue +java.util.Deque +java.util.ArrayDeque +sun.net.www.protocol.jar.Handler +jdk.internal.module.ServicesCatalog +jdk.internal.loader.AbstractClassLoaderValue +jdk.internal.loader.ClassLoaderValue +java.util.ImmutableCollections$SetN$SetNIterator +java.util.Optional +jdk.internal.loader.BootLoader +java.lang.Module$EnableNativeAccess +jdk.internal.loader.BuiltinClassLoader$LoadedModule +java.util.ImmutableCollections$Set12$1 +java.util.ListIterator +java.util.ImmutableCollections$ListItr +jdk.internal.loader.AbstractClassLoaderValue$Memoizer +jdk.internal.module.ServicesCatalog$ServiceProvider +java.util.concurrent.CopyOnWriteArrayList +java.util.HashMap$KeySet +java.util.HashMap$KeyIterator +java.lang.ModuleLayer$Controller +java.lang.invoke.LambdaMetafactory +java.lang.invoke.MethodType$1 +jdk.internal.util.ReferencedKeySet +jdk.internal.util.ReferencedKeyMap +jdk.internal.util.ReferenceKey +jdk.internal.util.StrongReferenceKey +java.lang.invoke.MethodTypeForm +jdk.internal.util.WeakReferenceKey +sun.invoke.util.Wrapper +sun.invoke.util.Wrapper$Format +java.lang.constant.ConstantDescs +java.lang.constant.ClassDesc +jdk.internal.constant.ClassOrInterfaceDescImpl +jdk.internal.constant.ArrayClassDescImpl +jdk.internal.constant.ConstantUtils +java.lang.constant.DirectMethodHandleDesc$Kind +java.lang.constant.MethodTypeDesc +jdk.internal.constant.MethodTypeDescImpl +java.lang.constant.MethodHandleDesc +java.lang.constant.MethodHandleDesc$1 +java.lang.constant.DirectMethodHandleDesc +jdk.internal.constant.DirectMethodHandleDescImpl +jdk.internal.constant.DirectMethodHandleDescImpl$1 +java.lang.constant.DynamicConstantDesc +jdk.internal.constant.PrimitiveClassDescImpl +java.lang.constant.DynamicConstantDesc$AnonymousDynamicConstantDesc +java.lang.invoke.LambdaForm$NamedFunction +java.lang.invoke.DirectMethodHandle$Holder +sun.invoke.util.ValueConversions +java.lang.invoke.Invokers +java.lang.invoke.LambdaForm$Kind +java.lang.NoSuchMethodException +java.lang.invoke.LambdaForm$BasicType +java.lang.classfile.TypeKind +java.lang.reflect.Array +java.lang.invoke.LambdaForm$Name +java.lang.invoke.LambdaForm$Holder +java.lang.invoke.InvokerBytecodeGenerator +java.lang.classfile.AnnotationElement +java.lang.classfile.Annotation +java.lang.classfile.constantpool.ConstantPool +java.lang.classfile.constantpool.ConstantPoolBuilder +jdk.internal.classfile.impl.TemporaryConstantPool +jdk.internal.classfile.impl.AbstractPoolEntry +java.lang.classfile.constantpool.PoolEntry +java.lang.classfile.constantpool.AnnotationConstantValueEntry +java.lang.classfile.constantpool.Utf8Entry +jdk.internal.classfile.impl.AbstractPoolEntry$Utf8EntryImpl +jdk.internal.classfile.impl.AbstractPoolEntry$Utf8EntryImpl$State +jdk.internal.classfile.impl.AnnotationImpl +java.lang.classfile.ClassFileElement +java.lang.classfile.Attribute +java.lang.classfile.ClassElement +java.lang.classfile.MethodElement +java.lang.classfile.FieldElement +java.lang.classfile.attribute.RuntimeVisibleAnnotationsAttribute +jdk.internal.classfile.impl.AbstractElement +jdk.internal.classfile.impl.Util$Writable +jdk.internal.classfile.impl.UnboundAttribute +jdk.internal.classfile.impl.UnboundAttribute$UnboundRuntimeVisibleAnnotationsAttribute +java.lang.classfile.Attributes +java.lang.classfile.AttributeMapper +jdk.internal.classfile.impl.AbstractAttributeMapper +jdk.internal.classfile.impl.AbstractAttributeMapper$RuntimeVisibleAnnotationsMapper +java.lang.classfile.AttributeMapper$AttributeStability +java.lang.invoke.InvokerBytecodeGenerator$8 +java.lang.invoke.MethodHandleImpl$Intrinsic +java.lang.invoke.BootstrapMethodInvoker +java.lang.invoke.AbstractValidatingLambdaMetafactory +java.lang.invoke.InnerClassLambdaMetafactory +java.lang.invoke.MethodHandleInfo +java.lang.invoke.InfoFromMemberName +jdk.internal.classfile.impl.SplitConstantPool +java.lang.classfile.BootstrapMethodEntry +jdk.internal.classfile.impl.BootstrapMethodEntryImpl +jdk.internal.classfile.impl.EntryMap +jdk.internal.classfile.impl.Util +jdk.internal.classfile.impl.AbstractPoolEntry$AbstractRefEntry +jdk.internal.classfile.impl.AbstractPoolEntry$AbstractNamedEntry +java.lang.classfile.constantpool.LoadableConstantEntry +java.lang.classfile.constantpool.ClassEntry +jdk.internal.classfile.impl.AbstractPoolEntry$ClassEntryImpl +java.lang.invoke.LambdaProxyClassArchive +java.lang.classfile.ClassFile +jdk.internal.classfile.impl.ClassFileImpl +java.util.function.Consumer +java.lang.invoke.InnerClassLambdaMetafactory$1 +jdk.internal.classfile.impl.AbstractDirectBuilder +java.lang.classfile.ClassFileBuilder +java.lang.classfile.ClassBuilder +jdk.internal.classfile.impl.DirectClassBuilder +jdk.internal.classfile.impl.AttributeHolder +java.util.ImmutableCollections$Access +jdk.internal.access.JavaUtilCollectionAccess +java.util.ImmutableCollections$Access$1 +java.lang.classfile.Interfaces +jdk.internal.classfile.impl.InterfacesImpl +java.lang.invoke.InnerClassLambdaMetafactory$3 +jdk.internal.classfile.impl.Util$1WithCodeMethodHandler +java.lang.classfile.MethodBuilder +jdk.internal.classfile.impl.MethodInfo +jdk.internal.classfile.impl.TerminalMethodBuilder +jdk.internal.classfile.impl.DirectMethodBuilder +java.lang.classfile.CodeBuilder +jdk.internal.classfile.impl.LabelContext +jdk.internal.classfile.impl.TerminalCodeBuilder +jdk.internal.classfile.impl.DirectCodeBuilder +java.lang.classfile.CodeElement +java.lang.classfile.PseudoInstruction +java.lang.classfile.instruction.CharacterRange +java.lang.classfile.instruction.LocalVariable +java.lang.classfile.instruction.LocalVariableType +jdk.internal.classfile.impl.DirectCodeBuilder$DeferredLabel +java.lang.classfile.BufWriter +jdk.internal.classfile.impl.BufWriterImpl +java.lang.classfile.Label +java.lang.classfile.instruction.LabelTarget +jdk.internal.classfile.impl.LabelImpl +jdk.internal.classfile.impl.AbstractPoolEntry$AbstractRefsEntry +java.lang.classfile.constantpool.NameAndTypeEntry +jdk.internal.classfile.impl.AbstractPoolEntry$NameAndTypeEntryImpl +java.lang.classfile.constantpool.MemberRefEntry +jdk.internal.classfile.impl.AbstractPoolEntry$AbstractMemberRefEntry +java.lang.classfile.constantpool.MethodRefEntry +jdk.internal.classfile.impl.AbstractPoolEntry$MethodRefEntryImpl +jdk.internal.classfile.impl.UnboundAttribute$AdHocAttribute +jdk.internal.classfile.impl.DirectCodeBuilder$4 +jdk.internal.classfile.impl.AbstractAttributeMapper$CodeMapper +jdk.internal.classfile.impl.BoundAttribute +java.lang.invoke.InnerClassLambdaMetafactory$6 +jdk.internal.classfile.impl.DirectCodeBuilder$8 +java.lang.invoke.TypeConvertingMethodAdapter +java.lang.classfile.Opcode +java.lang.classfile.Opcode$Kind +jdk.internal.classfile.impl.BytecodeHelpers +java.lang.classfile.CustomAttribute +jdk.internal.classfile.impl.StackMapGenerator +jdk.internal.classfile.impl.StackMapGenerator$Frame +jdk.internal.classfile.impl.StackMapGenerator$Type +jdk.internal.classfile.impl.RawBytecodeHelper +jdk.internal.classfile.impl.RawBytecodeHelper$1 +jdk.internal.classfile.impl.RawBytecodeHelper$CodeRange +jdk.internal.classfile.impl.ClassHierarchyImpl +java.lang.classfile.ClassHierarchyResolver +jdk.internal.classfile.impl.ClassHierarchyImpl$ClassLoadingClassHierarchyResolver +jdk.internal.classfile.impl.ClassHierarchyImpl$ClassLoadingClassHierarchyResolver$1 +jdk.internal.classfile.impl.ClassHierarchyImpl$CachedClassHierarchyResolver +java.lang.classfile.ClassHierarchyResolver$1Factory +java.lang.classfile.ClassHierarchyResolver$ClassHierarchyInfo +jdk.internal.classfile.impl.ClassHierarchyImpl$ClassHierarchyInfoImpl +jdk.internal.classfile.impl.ClassHierarchyImpl$CachedClassHierarchyResolver$1 +java.lang.classfile.ClassReader +jdk.internal.classfile.impl.ClassReaderImpl +java.lang.StringCoding +jdk.internal.util.ModifiedUtf +java.lang.invoke.MethodHandles$Lookup$ClassDefiner +jdk.internal.module.ModuleBootstrap$$Lambda/0x00003fc001000800 +java.lang.invoke.DirectMethodHandle$Constructor +jdk.internal.access.JavaLangInvokeAccess +java.lang.invoke.MethodHandleImpl$1 +java.lang.invoke.BoundMethodHandle +java.lang.invoke.ClassSpecializer +java.lang.invoke.BoundMethodHandle$Specializer +jdk.internal.vm.annotation.Stable +java.lang.invoke.ClassSpecializer$1 +java.lang.invoke.ClassSpecializer$SpeciesData +java.lang.invoke.BoundMethodHandle$SpeciesData +java.lang.invoke.ClassSpecializer$Factory +java.lang.invoke.BoundMethodHandle$Specializer$Factory +java.lang.invoke.SimpleMethodHandle +java.lang.NoSuchFieldException +java.lang.invoke.BoundMethodHandle$Species_L +java.lang.invoke.DirectMethodHandle$2 +java.lang.invoke.DirectMethodHandle$Accessor +java.lang.invoke.VarHandle$AccessMode +java.lang.invoke.VarHandle$AccessType +java.lang.invoke.Invokers$Holder +java.util.ArrayList$SubList +java.util.ArrayList$Itr +java.lang.Module$ReflectionData +java.lang.WeakPairMap +java.lang.WeakPairMap$Pair +java.lang.WeakPairMap$Pair$Lookup +java.util.ImmutableCollections$Map1 +java.lang.classfile.FieldBuilder +jdk.internal.classfile.impl.TerminalFieldBuilder +jdk.internal.classfile.impl.DirectFieldBuilder +java.lang.classfile.constantpool.FieldRefEntry +jdk.internal.classfile.impl.AbstractPoolEntry$FieldRefEntryImpl +java.lang.Module$$Lambda/0x00003fc001000a48 +sun.invoke.util.VerifyType +sun.invoke.empty.Empty +jdk.internal.vm.ContinuationSupport +jdk.internal.vm.Continuation$Pinned +sun.launcher.LauncherHelper +java.util.zip.ZipConstants +java.util.zip.ZipFile +java.util.jar.JarFile +java.util.BitSet +jdk.internal.access.JavaUtilZipFileAccess +java.util.zip.ZipFile$1 +jdk.internal.access.JavaUtilJarAccess +java.util.jar.JavaUtilJarAccessImpl +java.lang.Runtime$Version +java.util.zip.ZipCoder +java.util.zip.ZipCoder$UTF8ZipCoder +java.util.zip.ZipFile$CleanableResource +jdk.internal.ref.CleanerFactory +java.util.concurrent.ThreadFactory +jdk.internal.ref.CleanerFactory$1 +java.lang.ref.Cleaner +java.lang.ref.Cleaner$1 +jdk.internal.ref.CleanerImpl +jdk.internal.ref.CleanerImpl$CleanableList +jdk.internal.ref.CleanerImpl$CleanableList$Node +java.lang.ref.Cleaner$Cleanable +jdk.internal.ref.PhantomCleanable +jdk.internal.ref.CleanerImpl$CleanerCleanable +jdk.internal.misc.InnocuousThread +jdk.internal.ref.CleanerImpl$PhantomCleanableRef +java.util.zip.ZipFile$Source +sun.nio.fs.DefaultFileSystemProvider +java.nio.file.spi.FileSystemProvider +sun.nio.fs.AbstractFileSystemProvider +sun.nio.fs.UnixFileSystemProvider +sun.nio.fs.BsdFileSystemProvider +sun.nio.fs.MacOSXFileSystemProvider +java.nio.file.OpenOption +java.nio.file.StandardOpenOption +java.nio.file.FileSystem +sun.nio.fs.UnixFileSystem +sun.nio.fs.BsdFileSystem +sun.nio.fs.MacOSXFileSystem +java.nio.file.Watchable +java.nio.file.Path +sun.nio.fs.UnixPath +sun.nio.fs.Util +sun.nio.fs.UnixNativeDispatcher +jdk.internal.loader.NativeLibraries$LibraryPaths +jdk.internal.loader.NativeLibraries$1 +jdk.internal.loader.NativeLibraries$CountedLock +java.util.concurrent.locks.AbstractQueuedSynchronizer +java.util.concurrent.locks.ReentrantLock$Sync +java.util.concurrent.locks.ReentrantLock$NonfairSync +jdk.internal.loader.NativeLibraries$NativeLibraryContext +jdk.internal.loader.NativeLibraries$NativeLibraryContext$1 +java.util.ArrayDeque$DeqIterator +jdk.internal.loader.NativeLibrary +jdk.internal.loader.NativeLibraries$NativeLibraryImpl +jdk.internal.loader.NativeLibraries$2 +java.util.concurrent.ConcurrentHashMap$ValuesView +java.util.concurrent.ConcurrentHashMap$Traverser +java.util.concurrent.ConcurrentHashMap$BaseIterator +java.util.Enumeration +java.util.concurrent.ConcurrentHashMap$ValueIterator +java.nio.file.attribute.BasicFileAttributes +java.nio.file.attribute.PosixFileAttributes +sun.nio.fs.UnixFileAttributes +sun.nio.fs.UnixFileStoreAttributes +sun.nio.fs.UnixMountEntry +java.util.zip.ZipFile$Source$Key +java.nio.file.CopyOption +java.nio.file.LinkOption +java.nio.file.Files +java.nio.file.attribute.AttributeView +java.nio.file.attribute.FileAttributeView +java.nio.file.attribute.BasicFileAttributeView +sun.nio.fs.BsdFileAttributeViews +sun.nio.fs.DynamicFileAttributeView +sun.nio.fs.AbstractBasicFileAttributeView +sun.nio.fs.UnixFileAttributeViews$Basic +sun.nio.fs.BsdFileAttributeViews$Basic +sun.nio.fs.NativeBuffers +java.lang.ThreadLocal +jdk.internal.misc.CarrierThreadLocal +jdk.internal.misc.TerminatingThreadLocal +sun.nio.fs.NativeBuffers$1 +jdk.internal.misc.TerminatingThreadLocal$1 +java.lang.ThreadLocal$ThreadLocalMap +java.lang.ThreadLocal$ThreadLocalMap$Entry +java.util.IdentityHashMap +java.util.IdentityHashMap$KeySet +sun.nio.fs.NativeBuffer +sun.nio.fs.NativeBuffer$Deallocator +sun.nio.fs.UnixFileAttributes$UnixAsBasicFileAttributes +java.io.DataOutput +java.io.DataInput +java.io.RandomAccessFile +jdk.internal.access.JavaIORandomAccessFileAccess +java.io.RandomAccessFile$2 +java.io.FileCleanable +java.util.zip.ZipFile$Source$End +java.util.zip.ZipUtils +java.util.concurrent.TimeUnit +java.nio.file.attribute.FileTime +sun.nio.fs.UnixFileKey +jdk.internal.perf.PerfCounter +jdk.internal.perf.Perf +jdk.internal.perf.PerfCounter$CoreCounters +sun.nio.ch.DirectBuffer +java.nio.MappedByteBuffer +java.nio.DirectByteBuffer +java.nio.Bits +java.util.concurrent.atomic.AtomicLong +jdk.internal.misc.VM$BufferPool +java.nio.Bits$1 +java.nio.LongBuffer +java.nio.DirectLongBufferU +java.util.zip.ZipFile$EntryPos +java.util.zip.ZipEntry +java.util.jar.JarEntry +java.util.jar.JarFile$JarFileEntry +java.util.zip.ZipFile$ZipFileInputStream +java.util.zip.InflaterInputStream +java.util.zip.ZipFile$ZipFileInflaterInputStream +java.util.zip.Inflater +java.util.zip.Inflater$InflaterZStreamRef +java.util.zip.ZipFile$InflaterCleanupAction +sun.security.util.SignatureFileVerifier +sun.security.util.Debug +java.util.Locale +sun.util.locale.LocaleUtils +java.util.jar.JarVerifier +java.io.ByteArrayOutputStream +java.util.jar.Attributes +java.util.SequencedMap +java.util.LinkedHashMap +java.util.jar.Manifest$FastInputStream +sun.net.util.URLUtil +jdk.internal.loader.URLClassPath$Loader +jdk.internal.loader.URLClassPath$JarLoader +jdk.internal.loader.FileURLMapper +java.util.StringTokenizer +jdk.internal.loader.Resource +jdk.internal.loader.URLClassPath$JarLoader$1 +java.lang.NamedPackage +java.lang.Package +java.lang.Package$VersionInfo +sun.nio.ByteBuffered +java.util.zip.Checksum +java.util.zip.CRC32 +java.util.zip.Checksum$1 +java.security.SecureClassLoader$CodeSourceKey +java.security.SecureClassLoader$1 +java.security.PermissionCollection +java.security.Permissions +org.apache.maven.surefire.booter.ForkedBooter +jdk.internal.misc.MethodFinder +java.lang.Class$ReflectionData +java.lang.Class$Atomic +java.lang.SecurityException +java.security.AccessControlException +java.security.PrivilegedAction +org.apache.maven.surefire.api.provider.CommandListener +java.util.concurrent.Executor +java.util.concurrent.ExecutorService +java.util.concurrent.ScheduledExecutorService +java.io.IOException +java.util.concurrent.ConcurrentHashMap$ForwardingNode +java.lang.InterruptedException +org.apache.maven.surefire.api.report.ReporterFactory +org.apache.maven.surefire.api.provider.CommandChainReader +org.apache.maven.surefire.api.fork.ForkNodeArguments +org.apache.maven.plugin.surefire.log.api.ConsoleLogger +java.lang.PublicMethods$MethodList +java.lang.PublicMethods$Key +java.util.concurrent.Semaphore +java.util.concurrent.Semaphore$Sync +java.util.concurrent.Semaphore$NonfairSync +org.apache.maven.surefire.booter.BooterDeserializer +org.apache.maven.surefire.booter.SystemPropertyManager +java.util.Properties$LineReader +java.lang.StringUTF16 +java.util.Properties$EntrySet +java.util.concurrent.ConcurrentHashMap$EntrySetView +java.util.Collections$SynchronizedCollection +java.util.Collections$SynchronizedSet +java.util.concurrent.ConcurrentHashMap$EntryIterator +java.util.concurrent.ConcurrentHashMap$MapEntry +java.util.Collections$UnmodifiableCollection +java.util.Collections$UnmodifiableSet +java.util.Collections$UnmodifiableCollection$1 +org.apache.maven.surefire.booter.KeyValueSource +org.apache.maven.surefire.booter.PropertiesWrapper +java.lang.IllegalStateException +java.io.FileInputStream$1 +org.apache.maven.surefire.booter.TypeEncodedValue +org.apache.maven.surefire.api.testset.DirectoryScannerParameters +org.apache.maven.surefire.api.util.RunOrder +org.apache.maven.surefire.api.testset.RunOrderParameters +org.apache.maven.surefire.api.testset.TestArtifactInfo +org.apache.maven.surefire.api.testset.TestRequest +org.apache.maven.surefire.api.testset.TestFilter +org.apache.maven.surefire.api.testset.GenericTestPattern +org.apache.maven.surefire.api.testset.TestListResolver +java.util.Collections$SingletonSet +org.apache.maven.surefire.api.testset.IncludedExcludedPatterns +java.util.SequencedSet +java.util.LinkedHashSet +java.util.Collections$1 +org.apache.maven.surefire.shared.utils.StringUtils +java.lang.StringIndexOutOfBoundsException +org.apache.maven.surefire.api.testset.ResolvedTest +org.apache.maven.surefire.api.testset.ResolvedTest$Type +org.apache.maven.surefire.api.testset.ResolvedTest$ClassMatcher +org.apache.maven.surefire.api.testset.ResolvedTest$MethodMatcher +org.apache.maven.surefire.api.report.ReporterConfiguration +org.apache.maven.surefire.api.booter.Shutdown +jdk.internal.reflect.MethodHandleAccessorFactory +jdk.internal.reflect.MethodHandleAccessorFactory$LazyStaticHolder +java.lang.invoke.DelegatingMethodHandle +java.lang.invoke.DelegatingMethodHandle$Holder +java.lang.invoke.LambdaFormEditor +java.lang.invoke.LambdaFormEditor$TransformKey +java.lang.invoke.LambdaFormBuffer +java.lang.invoke.LambdaFormEditor$Transform +java.lang.invoke.InvokerBytecodeGenerator$3 +java.lang.invoke.InvokerBytecodeGenerator$1 +java.lang.classfile.Superclass +jdk.internal.classfile.impl.SuperclassImpl +java.lang.classfile.attribute.SourceFileAttribute +jdk.internal.classfile.impl.UnboundAttribute$UnboundSourceFileAttribute +jdk.internal.classfile.impl.AbstractAttributeMapper$SourceFileMapper +java.lang.invoke.InvokerBytecodeGenerator$4 +java.lang.invoke.InvokerBytecodeGenerator$ClassData +java.lang.invoke.InvokerBytecodeGenerator$4$1 +java.lang.invoke.InvokerBytecodeGenerator$2 +jdk.internal.classfile.impl.AnnotationReader +java.lang.invoke.LambdaForm$MH/0x00003fc001046000 +jdk.internal.reflect.DirectMethodHandleAccessor +org.apache.maven.surefire.booter.ProviderConfiguration +org.apache.maven.surefire.api.cli.CommandLineOption +org.apache.maven.surefire.api.booter.DumpErrorSingleton +org.apache.maven.surefire.api.util.internal.DumpFileUtils +java.lang.management.ManagementFactory +jdk.internal.reflect.Reflection$1Holder +java.lang.management.PlatformManagedObject +java.lang.management.RuntimeMXBean +java.lang.management.ManagementFactory$PlatformMBeanFinder +sun.management.spi.PlatformMBeanProvider +java.util.ServiceLoader +java.util.ServiceLoader$ModuleServicesLookupIterator +java.util.ServiceLoader$LazyClassPathLookupIterator +java.util.ServiceLoader$1 +java.util.ServiceLoader$2 +java.util.concurrent.CopyOnWriteArrayList$COWIterator +com.sun.management.internal.PlatformMBeanProviderImpl +java.util.ServiceLoader$Provider +java.util.ServiceLoader$ProviderImpl +jdk.internal.reflect.DirectConstructorHandleAccessor +sun.management.spi.PlatformMBeanProvider$PlatformComponent +com.sun.management.internal.PlatformMBeanProviderImpl$1 +java.util.stream.BaseStream +java.util.stream.Stream +java.util.Spliterators +java.util.Spliterator +java.util.Spliterators$ArraySpliterator +java.util.stream.StreamSupport +java.util.stream.PipelineHelper +java.util.stream.AbstractPipeline +java.util.stream.ReferencePipeline +java.util.stream.ReferencePipeline$Head +java.util.stream.StreamOpFlag +java.util.stream.StreamOpFlag$Type +java.util.stream.StreamOpFlag$MaskBuilder +java.util.EnumMap +java.util.EnumMap$1 +sun.reflect.annotation.AnnotationParser +java.util.stream.Collectors +java.util.stream.Collector$Characteristics +java.util.EnumSet +java.util.RegularEnumSet +java.util.stream.Collector +java.util.stream.Collectors$CollectorImpl +java.util.stream.Collectors$$Lambda/0x800000045 +java.util.function.BiConsumer +java.lang.invoke.DirectMethodHandle$Interface +java.util.stream.Collectors$$Lambda/0x800000038 +java.util.function.BinaryOperator +java.util.stream.Collectors$$Lambda/0x800000040 +java.util.stream.Collectors$$Lambda/0x800000042 +java.util.stream.ReduceOps +java.util.stream.TerminalOp +java.util.stream.ReduceOps$ReduceOp +java.util.stream.ReduceOps$3 +java.util.stream.StreamShape +java.util.stream.ReduceOps$Box +java.util.stream.Sink +java.util.stream.TerminalSink +java.util.stream.ReduceOps$AccumulatingSink +java.util.stream.ReduceOps$3ReducingSink +com.sun.management.internal.PlatformMBeanProviderImpl$2 +com.sun.management.internal.PlatformMBeanProviderImpl$3 +jdk.management.VirtualThreadSchedulerMXBean +com.sun.management.internal.PlatformMBeanProviderImpl$4 +com.sun.management.internal.PlatformMBeanProviderImpl$5 +javax.management.DynamicMBean +com.sun.management.DiagnosticCommandMBean +javax.management.NotificationBroadcaster +javax.management.NotificationEmitter +sun.management.NotificationEmitterSupport +com.sun.management.internal.DiagnosticCommandImpl +sun.management.ManagementFactoryHelper +sun.management.VMManagement +sun.management.VMManagementImpl +com.sun.management.internal.PlatformMBeanProviderImpl$6 +java.util.Collections$UnmodifiableList +java.util.Collections$UnmodifiableRandomAccessList +jdk.management.jfr.internal.FlightRecorderMXBeanProvider +java.util.concurrent.Callable +java.util.Collections$EmptyEnumeration +java.lang.management.DefaultPlatformMBeanProvider +java.lang.management.DefaultPlatformMBeanProvider$1 +java.lang.management.DefaultPlatformMBeanProvider$2 +java.lang.management.DefaultPlatformMBeanProvider$3 +java.lang.management.DefaultPlatformMBeanProvider$4 +java.lang.management.DefaultPlatformMBeanProvider$5 +java.lang.management.DefaultPlatformMBeanProvider$6 +java.lang.management.DefaultPlatformMBeanProvider$7 +java.lang.management.DefaultPlatformMBeanProvider$8 +sun.management.ManagementFactoryHelper$LoggingMXBeanAccess +java.util.logging.LogManager +java.lang.management.DefaultPlatformMBeanProvider$9 +java.lang.management.DefaultPlatformMBeanProvider$10 +java.lang.management.DefaultPlatformMBeanProvider$11 +jdk.management.jfr.FlightRecorderMXBean +jdk.management.jfr.internal.FlightRecorderMXBeanProvider$SingleMBeanComponent +java.util.Collections$SingletonList +java.util.HashMap$Values +java.util.HashMap$HashMapSpliterator +java.util.HashMap$ValueSpliterator +java.util.function.Predicate +java.lang.management.ManagementFactory$PlatformMBeanFinder$$Lambda/0x00003fc001008cf0 +java.util.stream.ReferencePipeline$StatelessOp +java.util.stream.ReferencePipeline$2 +java.lang.management.ManagementFactory$PlatformMBeanFinder$$Lambda/0x00003fc001008f50 +java.util.stream.ReduceOps$2 +java.util.stream.ReduceOps$2ReducingSink +java.util.stream.Sink$ChainedReference +java.util.stream.ReferencePipeline$2$1 +sun.management.RuntimeImpl +java.util.Collections$SingletonMap +java.util.Collections$2 +sun.management.spi.PlatformMBeanProvider$PlatformComponent$$Lambda/0x00003fc001009ac0 +sun.management.spi.PlatformMBeanProvider$PlatformComponent$$Lambda/0x00003fc001009d20 +java.util.stream.ReferencePipeline$3 +java.util.stream.Collectors$$Lambda/0x00003fc001009f70 +java.lang.classfile.constantpool.InterfaceMethodRefEntry +jdk.internal.classfile.impl.AbstractPoolEntry$InterfaceMethodRefEntryImpl +java.util.stream.Collectors$$Lambda/0x00003fc00100a198 +java.util.stream.Collectors$$Lambda/0x00003fc00100a3d0 +java.util.stream.ReferencePipeline$3$1 +java.util.Arrays$ArrayList +java.util.Arrays$ArrayItr +org.apache.maven.surefire.booter.ClassLoaderConfiguration +org.apache.maven.surefire.booter.AbstractPathConfiguration +org.apache.maven.surefire.booter.ClasspathConfiguration +org.apache.maven.surefire.booter.Classpath +java.net.MalformedURLException +java.net.URLClassLoader +org.apache.maven.surefire.booter.IsolatedClassLoader +org.apache.maven.surefire.booter.SurefireExecutionException +org.apache.maven.surefire.booter.ProcessCheckerType +org.apache.maven.surefire.booter.StartupConfiguration +org.apache.maven.surefire.spi.MasterProcessChannelProcessorFactory +java.util.Spliterators$1Adapter +java.util.HashMap$ValueIterator +jdk.internal.module.Resources +jdk.internal.loader.BuiltinClassLoader$2 +java.lang.module.ModuleReader +jdk.internal.module.SystemModuleFinders$SystemModuleReader +jdk.internal.module.SystemModuleFinders$SystemImage +jdk.internal.jimage.ImageReaderFactory +jdk.internal.jimage.ImageReaderFactory$1 +jdk.internal.jimage.ImageReader +jdk.internal.jimage.BasicImageReader +jdk.internal.jimage.ImageReader$SharedImageReader +jdk.internal.jimage.BasicImageReader$1 +java.security.AccessController +java.security.AccessControlContext +jdk.internal.jimage.NativeImageBuffer +jdk.internal.jimage.NativeImageBuffer$1 +jdk.internal.jimage.ImageHeader +java.nio.IntBuffer +java.nio.DirectIntBufferU +java.nio.DirectByteBufferR +java.nio.DirectIntBufferRU +jdk.internal.jimage.ImageStrings +jdk.internal.jimage.ImageStringsReader +jdk.internal.jimage.decompressor.Decompressor +jdk.internal.jimage.ImageLocation +jdk.internal.loader.BuiltinClassLoader$1 +java.lang.CompoundEnumeration +jdk.internal.loader.URLClassPath$1 +jdk.internal.loader.URLClassPath$FileLoader +java.util.zip.ZipFile$Source$$Lambda/0x00003fc00100b050 +java.net.URLConnection +java.net.JarURLConnection +sun.net.www.protocol.jar.JarURLConnection +sun.net.www.protocol.jar.URLJarFile$URLJarFileCloseController +sun.net.www.protocol.jar.JarFileFactory +sun.net.www.URLConnection +sun.net.www.protocol.file.FileURLConnection +sun.net.www.MessageHeader +jdk.internal.util.OperatingSystem +java.lang.IncompatibleClassChangeError +java.lang.NoSuchMethodError +java.lang.invoke.LambdaForm$DMH/0x00003fc001046400 +sun.net.www.protocol.jar.URLJarFile +sun.net.www.protocol.jar.URLJarFile$URLJarFileEntry +sun.net.www.protocol.jar.JarURLConnection$JarURLInputStream +java.lang.Readable +java.io.Reader +java.io.BufferedReader +java.io.InputStreamReader +sun.nio.cs.StreamDecoder +java.nio.charset.CharsetDecoder +sun.nio.cs.UTF_8$Decoder +java.nio.CharBuffer +java.nio.HeapCharBuffer +java.nio.charset.CoderResult +java.util.LinkedHashMap$LinkedKeySet +java.util.LinkedHashMap$LinkedHashIterator +java.util.LinkedHashMap$LinkedKeyIterator +org.apache.maven.surefire.booter.spi.AbstractMasterProcessChannelProcessorFactory +org.apache.maven.surefire.booter.spi.LegacyMasterProcessChannelProcessorFactory +org.apache.maven.surefire.api.booter.MasterProcessChannelEncoder +org.apache.maven.surefire.api.booter.MasterProcessChannelDecoder +org.apache.maven.surefire.api.util.internal.DaemonThreadFactory +java.util.concurrent.Executors +java.util.concurrent.Executors$DefaultThreadFactory +org.apache.maven.surefire.api.util.internal.DaemonThreadFactory$NamedThreadFactory +java.util.concurrent.AbstractExecutorService +java.util.concurrent.ThreadPoolExecutor +java.util.concurrent.ScheduledThreadPoolExecutor +java.util.concurrent.RejectedExecutionHandler +java.util.concurrent.ThreadPoolExecutor$AbortPolicy +java.util.concurrent.BlockingQueue +java.util.AbstractQueue +java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue +java.util.concurrent.Future +java.util.concurrent.RunnableFuture +java.util.concurrent.Delayed +java.util.concurrent.ScheduledFuture +java.util.concurrent.RunnableScheduledFuture +java.util.concurrent.locks.Condition +java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject +jdk.internal.vm.StackableScope +jdk.internal.vm.ThreadContainer +jdk.internal.vm.SharedThreadContainer +jdk.internal.invoke.MhUtil +java.lang.invoke.VarHandles +java.lang.invoke.VarHandleBooleans$FieldInstanceReadOnly +java.lang.invoke.VarHandleBooleans$FieldInstanceReadWrite +java.lang.invoke.VarHandleGuards +java.lang.invoke.VarForm +java.lang.invoke.VarHandleReferences$FieldInstanceReadOnly +java.lang.invoke.VarHandleReferences$FieldInstanceReadWrite +jdk.internal.vm.ThreadContainers +jdk.internal.vm.ThreadContainers$RootContainer +jdk.internal.vm.ThreadContainers$RootContainer$TrackingRootContainer +org.apache.maven.surefire.booter.spi.SurefireMasterProcessChannelProcessorFactory +java.nio.channels.Channel +java.nio.channels.AsynchronousChannel +java.nio.channels.AsynchronousByteChannel +java.net.URISyntaxException +java.util.concurrent.ExecutionException +java.net.SocketAddress +java.net.InetSocketAddress +org.apache.maven.surefire.booter.ForkedNodeArg +java.lang.UnsupportedOperationException +org.apache.maven.plugin.surefire.log.api.NullConsoleLogger +org.apache.maven.surefire.api.util.internal.Channels +org.apache.maven.surefire.api.util.internal.Channels$1 +org.apache.maven.surefire.api.util.internal.Channels$2 +java.nio.channels.WritableByteChannel +org.apache.maven.surefire.api.util.internal.WritableBufferedByteChannel +java.nio.channels.ReadableByteChannel +org.apache.maven.surefire.api.util.internal.AbstractNoninterruptibleWritableChannel +org.apache.maven.surefire.api.util.internal.Channels$4 +java.nio.channels.ClosedChannelException +java.nio.channels.NonWritableChannelException +org.apache.maven.surefire.booter.spi.AbstractMasterProcessChannelProcessorFactory$1 +java.util.concurrent.FutureTask +java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask +java.lang.invoke.VarHandleInts$FieldInstanceReadOnly +java.lang.invoke.VarHandleInts$FieldInstanceReadWrite +java.util.concurrent.FutureTask$WaitNode +java.util.concurrent.Executors$RunnableAdapter +java.util.concurrent.ThreadPoolExecutor$Worker +java.lang.invoke.VarHandle$AccessDescriptor +java.util.concurrent.locks.AbstractQueuedSynchronizer$Node +org.apache.maven.surefire.api.stream.AbstractStreamEncoder +java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode +org.apache.maven.surefire.booter.stream.EventEncoder +org.apache.maven.surefire.booter.spi.EventChannelEncoder +java.util.concurrent.ForkJoinPool$ManagedBlocker +java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode +java.lang.AssertionError +org.apache.maven.surefire.api.report.ReportEntry +org.apache.maven.surefire.api.booter.ForkedProcessEventType +java.util.concurrent.atomic.AtomicBoolean +org.apache.maven.surefire.booter.spi.CommandChannelDecoder +org.apache.maven.surefire.api.stream.MalformedChannelException +org.apache.maven.surefire.api.stream.AbstractStreamDecoder +org.apache.maven.surefire.booter.stream.CommandDecoder +org.apache.maven.surefire.api.util.internal.AbstractNoninterruptibleReadableChannel +org.apache.maven.surefire.api.util.internal.Channels$3 +java.nio.channels.NonReadableChannelException +org.apache.maven.surefire.api.stream.AbstractStreamDecoder$MalformedFrameException +java.io.EOFException +org.apache.maven.surefire.api.stream.SegmentType +java.io.FileNotFoundException +org.apache.maven.surefire.api.booter.Constants +java.nio.charset.StandardCharsets +sun.nio.cs.US_ASCII +sun.nio.cs.ISO_8859_1 +sun.nio.cs.UTF_16BE +sun.nio.cs.UTF_16LE +sun.nio.cs.UTF_16 +sun.nio.cs.UTF_32BE +sun.nio.cs.UTF_32LE +sun.nio.cs.UTF_32 +org.apache.maven.surefire.api.booter.MasterProcessCommand +org.apache.maven.surefire.api.stream.AbstractStreamDecoder$Segment +org.apache.maven.surefire.booter.ForkedBooter$8 +java.lang.Thread$ThreadNumbering +org.apache.maven.surefire.shared.utils.cli.ShutdownHookUtils +java.lang.ApplicationShutdownHooks +java.lang.ApplicationShutdownHooks$1 +java.lang.Shutdown +java.lang.Shutdown$Lock +org.apache.maven.surefire.api.booter.ForkingReporterFactory +org.apache.maven.surefire.api.report.RunListener +org.apache.maven.surefire.api.report.TestOutputReceiver +org.apache.maven.surefire.api.report.TestReportListener +org.apache.maven.surefire.api.booter.ForkingRunListener +org.apache.maven.surefire.booter.CommandReader +org.apache.maven.surefire.api.testset.TestSetFailedException +java.util.concurrent.ConcurrentLinkedQueue +java.util.concurrent.ConcurrentLinkedQueue$Node +org.apache.maven.surefire.booter.CommandReader$CommandRunnable +java.util.concurrent.atomic.AtomicReference +java.util.concurrent.CountDownLatch +java.util.concurrent.CountDownLatch$Sync +org.apache.maven.surefire.api.stream.AbstractStreamDecoder$Memento +org.apache.maven.surefire.booter.PpidChecker +org.apache.maven.surefire.booter.PpidChecker$ProcessInfoConsumer +org.apache.maven.surefire.api.stream.AbstractStreamDecoder$BufferedStream +org.apache.maven.surefire.booter.PpidChecker$2 +jdk.internal.misc.Blocker +org.apache.maven.surefire.booter.PpidChecker$1 +org.apache.maven.surefire.api.stream.AbstractStreamDecoder$StreamReadStatus +org.apache.maven.surefire.booter.stream.CommandDecoder$1 +java.lang.NoSuchFieldError +org.apache.maven.surefire.shared.lang3.SystemUtils +org.apache.maven.surefire.api.booter.Command +org.apache.maven.surefire.booter.CommandReader$1 +java.util.concurrent.ConcurrentLinkedQueue$Itr +org.apache.maven.surefire.shared.lang3.SystemProperties +org.apache.maven.surefire.shared.lang3.function.Suppliers +org.apache.maven.surefire.shared.lang3.function.Suppliers$$Lambda/0x00003fc00104fb98 +org.apache.maven.surefire.shared.lang3.StringUtils +java.util.regex.Pattern +java.util.regex.Pattern$Node +java.util.regex.Pattern$LastNode +java.util.regex.Pattern$GroupHead +java.util.regex.CharPredicates +java.lang.Character$Subset +java.lang.Character$UnicodeBlock +java.util.regex.Pattern$CharPredicate +java.util.regex.CharPredicates$$Lambda/0x00003fc0010185c8 +java.util.regex.Pattern$BmpCharPredicate +java.util.regex.Pattern$CharProperty +java.util.regex.Pattern$Qtype +java.util.regex.Pattern$BmpCharProperty +java.util.regex.Pattern$CharPropertyGreedy +java.util.regex.Pattern$SliceNode +java.util.regex.Pattern$Slice +java.util.regex.Pattern$Begin +java.util.regex.Pattern$First +java.util.regex.Pattern$Start +java.util.regex.Pattern$StartS +java.util.regex.Pattern$TreeInfo +org.apache.maven.surefire.shared.lang3.JavaVersion +org.apache.maven.surefire.shared.lang3.SystemProperties$$Lambda/0x00003fc001050250 +org.apache.maven.surefire.shared.lang3.math.NumberUtils +java.lang.NumberFormatException +java.math.BigInteger +java.math.BigDecimal +jdk.internal.math.FloatingDecimal +jdk.internal.math.FloatingDecimal$BinaryToASCIIConverter +jdk.internal.math.FloatingDecimal$ExceptionalBinaryToASCIIBuffer +jdk.internal.math.FloatingDecimal$BinaryToASCIIBuffer +jdk.internal.math.FloatingDecimal$1 +jdk.internal.math.FloatingDecimal$ASCIIToBinaryConverter +jdk.internal.math.FloatingDecimal$PreparedASCIIToBinaryBuffer +jdk.internal.math.MathUtils +jdk.internal.math.FloatingDecimal$ASCIIToBinaryBuffer +jdk.internal.math.ToDecimal +jdk.internal.math.FloatToDecimal +org.apache.maven.surefire.shared.lang3.SystemUtils$$Lambda/0x00003fc001050890 +org.apache.maven.surefire.shared.lang3.Strings +org.apache.maven.surefire.shared.lang3.Strings$CiStrings +org.apache.maven.surefire.shared.lang3.Strings$CsStrings +org.apache.maven.surefire.shared.lang3.CharSequenceUtils +java.util.regex.Pattern$GroupTail +java.util.regex.CharPredicates$$Lambda/0x800000024 +java.util.regex.Pattern$BmpCharPropertyGreedy +java.util.regex.Pattern$$Lambda/0x800000027 +java.util.regex.Pattern$Ques +java.util.regex.Pattern$BranchConn +java.util.regex.Pattern$Branch +java.util.regex.ASCII +java.util.regex.Pattern$Curly +java.util.regex.CharPredicates$$Lambda/0x800000025 +java.util.regex.Pattern$Dollar +java.util.regex.Pattern$BitClass +org.apache.maven.surefire.booter.ForkedBooter$4 +org.apache.maven.surefire.api.booter.BiProperty +org.apache.maven.surefire.booter.ForkedBooter$3 +org.apache.maven.surefire.booter.ForkedBooter$PingScheduler +org.apache.maven.surefire.api.provider.ProviderParameters +org.apache.maven.surefire.api.booter.BaseProviderFactory +org.apache.maven.surefire.api.util.ScanResult +org.apache.maven.surefire.api.util.DirectoryScanner +org.apache.maven.surefire.api.util.RunOrderCalculator +org.apache.maven.surefire.api.util.ReflectionUtils +java.lang.IllegalAccessException +java.lang.reflect.InvocationTargetException +org.apache.maven.surefire.api.util.SurefireReflectionException +org.apache.maven.surefire.api.provider.SurefireProvider +org.apache.maven.surefire.api.provider.AbstractProvider +org.apache.maven.surefire.junitplatform.JUnitPlatformProvider +java.io.StringReader +java.io.UncheckedIOException +org.apache.maven.surefire.api.util.ScannerFilter +java.lang.invoke.BoundMethodHandle$Species_LL +java.lang.invoke.LambdaForm$MH/0x00003fc001054000 +java.lang.invoke.LambdaForm$MH/0x00003fc001054400 +org.apache.maven.surefire.junitplatform.LauncherSessionFactory +org.apache.maven.surefire.junitplatform.CancellationTokenAdapter +org.apache.maven.surefire.junitplatform.LauncherSessionAdapter +org.apache.maven.surefire.junitplatform.LauncherSessionFactory$$Lambda/0x00003fc001053d30 +org.junit.platform.launcher.TagFilter +org.junit.platform.commons.JUnitException +org.junit.platform.commons.util.PreconditionViolationException +org.junit.platform.commons.PreconditionViolationException +org.junit.platform.engine.Filter +org.junit.platform.launcher.PostDiscoveryFilter +org.apache.maven.surefire.junitplatform.JUnitPlatformProvider$$Lambda/0x00003fc001056d58 +org.apache.maven.surefire.junitplatform.JUnitPlatformProvider$$Lambda/0x00003fc001056fa0 +org.apache.maven.surefire.junitplatform.JUnitPlatformProvider$$Lambda/0x00003fc0010571e0 +org.apache.maven.surefire.junitplatform.JUnitPlatformProvider$$Lambda/0x00003fc001057428 +org.apache.maven.surefire.junitplatform.JUnitPlatformProvider$$Lambda/0x00003fc001057668 +org.apache.maven.surefire.junitplatform.JUnitPlatformProvider$$Lambda/0x00003fc0010578c0 +org.apache.maven.surefire.junitplatform.TestMethodFilter +org.apache.maven.surefire.junitplatform.JUnitPlatformProvider$$Lambda/0x00003fc001057d80 +org.apache.maven.surefire.junitplatform.JUnitPlatformProvider$$Lambda/0x00003fc001055000 +org.junit.platform.launcher.EngineFilter +org.apache.maven.surefire.junitplatform.JUnitPlatformProvider$$Lambda/0x00003fc0010554a0 +org.apache.maven.surefire.junitplatform.JUnitPlatformProvider$$Lambda/0x00003fc0010556e8 +org.apache.maven.surefire.junitplatform.JUnitPlatformProvider$$Lambda/0x00003fc001055928 +org.apache.maven.surefire.junitplatform.JUnitPlatformProvider$$Lambda/0x00003fc001055b70 +org.junit.platform.engine.ExecutionRequest +org.apache.maven.surefire.api.report.Stoppable +java.lang.invoke.LambdaForm$DMH/0x00003fc001058000 +org.apache.maven.surefire.api.report.Stoppable$$Lambda/0x00003fc001054c50 +org.junit.platform.launcher.TestExecutionListener +org.apache.maven.surefire.report.RunModeSetter +org.apache.maven.surefire.junitplatform.RunListenerAdapter +org.apache.maven.surefire.api.report.OutputReportEntry +org.apache.maven.surefire.api.report.StackTraceWriter +org.apache.maven.surefire.api.report.TestSetReportEntry +org.apache.maven.surefire.report.ClassMethodIndexer +org.apache.maven.surefire.api.report.RunMode +org.apache.maven.surefire.api.report.ConsoleOutputCapture +org.apache.maven.surefire.api.report.ConsoleOutputCapture$ForwardingPrintStream +org.apache.maven.surefire.api.report.ConsoleOutputCapture$NullOutputStream +java.util.logging.Logger +java.util.logging.Handler +java.util.logging.Level +java.util.logging.Level$KnownLevel +java.util.logging.Level$KnownLevel$$Lambda/0x800000020 +java.util.logging.Level$KnownLevel$$Lambda/0x800000021 +java.util.logging.Logger$LoggerBundle +java.util.logging.Logger$ConfigurationData +java.util.logging.LogManager$LoggerContext +java.util.logging.LogManager$SystemLoggerContext +java.util.logging.LogManager$LogNode +java.util.Collections$SynchronizedMap +java.util.logging.LogManager$Cleaner +sun.util.logging.internal.LoggingProviderImpl$LogManagerAccess +java.util.logging.LogManager$LoggingProviderAccess +java.lang.System$LoggerFinder +jdk.internal.logger.DefaultLoggerFinder +sun.util.logging.internal.LoggingProviderImpl +java.util.logging.LogManager$RootLogger +java.nio.file.Paths +java.nio.file.FileSystems +java.nio.file.FileSystems$DefaultFileSystemHolder +java.net.URI$Parser +java.util.logging.LogManager$LoggerWeakRef +java.lang.invoke.StringConcatFactory +java.lang.invoke.MethodHandleImpl$AsVarargsCollector +java.lang.invoke.LambdaForm$MH/0x00003fc001058400 +java.util.logging.LogManager$VisitedLoggers +java.util.Collections$3 +java.util.concurrent.ConcurrentHashMap$KeyIterator +java.util.Hashtable$Enumerator +java.util.logging.Level$$Lambda/0x80000001f +java.util.ArrayList$ArrayListSpliterator +java.util.logging.Level$KnownLevel$$Lambda/0x800000022 +java.util.stream.ReferencePipeline$7 +java.util.stream.FindOps +java.util.stream.FindOps$FindSink +java.util.stream.FindOps$FindSink$OfRef +java.util.stream.FindOps$FindSink$OfRef$$Lambda/0x800000049 +java.util.stream.FindOps$FindSink$OfRef$$Lambda/0x800000048 +java.util.stream.FindOps$FindOp +java.util.stream.ReferencePipeline$7$1FlatMap +java.util.stream.Streams$AbstractStreamBuilderImpl +java.util.stream.Stream$Builder +java.util.stream.Streams$StreamBuilderImpl +java.util.stream.Streams +java.util.stream.MatchOps$MatchKind +java.util.stream.MatchOps +java.util.stream.MatchOps$MatchOp +java.util.stream.MatchOps$BooleanTerminalSink +java.util.stream.MatchOps$$Lambda/0x800000004 +java.util.stream.MatchOps$1MatchSink +java.util.IdentityHashMap$Values +java.lang.System$Logger +sun.util.logging.PlatformLogger$Bridge +sun.util.logging.PlatformLogger$ConfigurableBridge +jdk.internal.logger.BootstrapLogger +jdk.internal.logger.BootstrapLogger$DetectBackend +jdk.internal.logger.BootstrapLogger$LoggingBackend +jdk.internal.logger.BootstrapLogger$RedirectedLoggers +jdk.internal.logger.BootstrapLogger$BootstrapExecutors +java.util.logging.Logger$SystemLoggerHelper +org.junit.platform.launcher.LauncherSession +org.junit.platform.launcher.core.LauncherFactory +org.junit.platform.engine.ConfigurationParameters +org.junit.platform.launcher.Launcher +org.junit.platform.launcher.core.LauncherConfig +org.junit.platform.launcher.core.LauncherConfig$Builder +org.junit.platform.launcher.core.DefaultLauncherConfig +org.junit.platform.commons.util.Preconditions +org.junit.platform.launcher.core.LauncherConfigurationParameters +org.junit.platform.commons.logging.LoggerFactory +org.junit.platform.commons.logging.Logger +org.junit.platform.commons.logging.LoggerFactory$DelegatingLogger +org.junit.platform.launcher.core.LauncherConfigurationParameters$Builder +java.lang.invoke.LambdaForm$DMH/0x00003fc001058800 +org.junit.platform.launcher.core.LauncherConfigurationParameters$Builder$$Lambda/0x00003fc00105f838 +org.junit.platform.commons.util.CollectionUtils +org.junit.platform.launcher.core.LauncherConfigurationParameters$ParameterProvider +org.junit.platform.launcher.core.LauncherConfigurationParameters$ParameterProvider$2 +org.junit.platform.commons.util.StringUtils +org.junit.platform.commons.util.StringUtils$TwoPartSplitResult +java.util.regex.CharPredicates$$Lambda/0x00003fc00101b928 +org.junit.platform.commons.util.ClassLoaderUtils +org.junit.platform.launcher.core.LauncherConfigurationParameters$ParameterProvider$3 +org.junit.platform.launcher.core.DefaultLauncherSession +org.junit.platform.launcher.LauncherInterceptor +org.junit.platform.launcher.core.DefaultLauncherSession$1 +org.junit.platform.launcher.core.LauncherConfigurationParameters$$Lambda/0x00003fc00105b190 +org.junit.platform.launcher.core.LauncherConfigurationParameters$$Lambda/0x00003fc00105b3e0 +java.lang.invoke.TypeConvertingMethodAdapter$1 +java.lang.invoke.TypeConvertingMethodAdapter$BoxHolder +org.junit.platform.launcher.core.LauncherConfigurationParameters$$Lambda/0x00003fc00105b638 +org.junit.platform.launcher.core.ClasspathAlignmentCheckingLauncherInterceptor +org.junit.platform.launcher.LauncherSessionListener +org.junit.platform.launcher.core.LauncherFactory$$Lambda/0x00003fc00105bcc8 +org.junit.platform.engine.support.store.NamespacedHierarchicalStore +org.junit.platform.launcher.core.LauncherFactory$$Lambda/0x00003fc001059230 +org.junit.platform.engine.support.store.NamespacedHierarchicalStoreException +org.junit.platform.engine.support.store.NamespacedHierarchicalStore$CloseAction +java.lang.invoke.LambdaForm$DMH/0x00003fc001058c00 +org.junit.platform.engine.support.store.NamespacedHierarchicalStore$CloseAction$$Lambda/0x00003fc0010598f0 +java.util.stream.SliceOps +java.util.stream.ReferencePipeline$StatefulOp +java.util.stream.SliceOps$1 +org.junit.platform.launcher.core.DefaultLauncherSession$$Lambda/0x00003fc001059b18 +java.util.stream.ReduceOps$1 +java.util.stream.ReduceOps$1ReducingSink +java.util.stream.SliceOps$1$1 +org.junit.platform.launcher.LauncherInterceptor$Invocation +java.lang.invoke.LambdaForm$DMH/0x00003fc001060000 +org.junit.platform.launcher.core.DefaultLauncherSession$$Lambda/0x00003fc001064000 +org.junit.platform.launcher.core.ListenerRegistry +org.junit.platform.launcher.listeners.session.LauncherSessionListeners +org.junit.platform.launcher.core.ListenerRegistry$$Lambda/0x00003fc001064678 +org.junit.platform.launcher.core.ServiceLoaderRegistry +org.junit.platform.launcher.core.ServiceLoaderRegistry$$Lambda/0x00003fc001064ad0 +org.junit.platform.launcher.core.ServiceLoaderRegistry$$Lambda/0x00003fc001064d28 +org.junit.platform.launcher.core.ServiceLoaderRegistry$$Lambda/0x00003fc001064f78 +org.junit.platform.commons.util.ServiceLoaderUtils +java.util.ServiceLoader$ProviderSpliterator +org.junit.platform.commons.util.ServiceLoaderUtils$$Lambda/0x00003fc0010653e8 +org.junit.platform.commons.util.ServiceLoaderUtils$$Lambda/0x00003fc001065648 +org.junit.platform.launcher.core.ServiceLoaderRegistry$$Lambda/0x00003fc001065890 +java.lang.invoke.LambdaForm$DMH/0x00003fc001060400 +org.junit.platform.launcher.core.LauncherFactory$$Lambda/0x00003fc001065ac0 +org.junit.platform.launcher.core.LauncherFactory$$Lambda/0x00003fc001065d00 +org.junit.platform.commons.util.Preconditions$$Lambda/0x00003fc001065f40 +org.junit.platform.launcher.LauncherSessionListener$1 +org.junit.platform.launcher.core.DelegatingLauncher +org.junit.platform.launcher.core.InterceptingLauncher +java.lang.invoke.DirectMethodHandle$Special +org.junit.platform.launcher.core.DefaultLauncherSession$$Lambda/0x00003fc0010668b0 +org.junit.platform.launcher.core.ServiceLoaderTestEngineRegistry +org.junit.platform.engine.TestEngine +org.junit.platform.launcher.core.ServiceLoaderTestEngineRegistry$$Lambda/0x00003fc001066ef8 +org.junit.platform.launcher.core.LauncherFactory$$Lambda/0x00003fc001067128 +org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine +org.junit.jupiter.engine.JupiterTestEngine +org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutorService +org.junit.jupiter.engine.config.JupiterConfiguration +org.junit.platform.engine.TestDescriptor +org.junit.platform.engine.support.hierarchical.EngineExecutionContext +org.junit.platform.launcher.core.LauncherFactory$$Lambda/0x00003fc001062208 +org.junit.platform.launcher.core.DefaultLauncher +org.junit.platform.launcher.TestPlan +org.junit.platform.launcher.core.InternalTestPlan +org.junit.platform.launcher.core.LauncherListenerRegistry +org.junit.platform.launcher.listeners.discovery.LauncherDiscoveryListeners +org.junit.platform.engine.EngineDiscoveryListener +org.junit.platform.launcher.LauncherDiscoveryListener +org.junit.platform.launcher.core.ListenerRegistry$$Lambda/0x00003fc001063440 +org.junit.platform.launcher.core.CompositeTestExecutionListener +org.junit.platform.launcher.core.ListenerRegistry$$Lambda/0x00003fc001063930 +org.junit.platform.launcher.core.EngineExecutionOrchestrator +org.junit.platform.launcher.TestPlan$Visitor +org.junit.platform.engine.EngineExecutionListener +org.junit.platform.launcher.core.DiscoveryIssueException +org.junit.platform.launcher.core.DefaultLauncher$$Lambda/0x00003fc001061470 +org.junit.platform.launcher.core.EngineDiscoveryOrchestrator +org.junit.platform.engine.EngineDiscoveryRequest +org.junit.platform.launcher.LauncherDiscoveryRequest +org.junit.platform.launcher.core.EngineDiscoveryResultValidator +org.junit.platform.launcher.core.EngineIdValidator +org.junit.platform.launcher.core.EngineIdValidator$$Lambda/0x00003fc001060a10 +org.junit.platform.launcher.core.LauncherFactory$$Lambda/0x00003fc001060c40 +org.junit.platform.launcher.core.LauncherFactory$$Lambda/0x00003fc001068000 +org.junit.platform.commons.util.ClassNamePatternFilterUtils +org.junit.platform.launcher.core.LauncherFactory$$Lambda/0x00003fc001068450 +org.junit.platform.launcher.core.LauncherFactory$$Lambda/0x00003fc001068698 +java.lang.invoke.LambdaForm$DMH/0x00003fc00106c000 +org.junit.platform.launcher.core.ServiceLoaderRegistry$$Lambda/0x00003fc0010688f0 +org.junit.platform.launcher.core.ServiceLoaderRegistry$$Lambda/0x00003fc001068b50 +org.junitpioneer.jupiter.issue.IssueExtensionExecutionListener +org.junitpioneer.jupiter.IssueProcessor +org.junit.platform.launcher.listeners.UniqueIdTrackingListener +org.junit.platform.launcher.core.LauncherFactory$$Lambda/0x00003fc001069500 +org.junit.platform.launcher.core.LauncherFactory$$Lambda/0x00003fc001069940 +org.apache.maven.surefire.junitplatform.LauncherAdapter +org.apache.maven.surefire.junitplatform.TestPlanScannerFilter +org.apache.maven.surefire.api.util.DefaultScanResult +jdk.internal.loader.URLClassPath$FileLoader$1 +software.amazon.lambda.powertools.metadata.LambdaMetadataTest +org.junit.platform.launcher.core.LauncherDiscoveryRequestBuilder +org.junit.platform.engine.OutputDirectoryCreator +org.junit.platform.engine.DiscoverySelector +org.junit.platform.engine.discovery.DiscoverySelectors +org.junit.platform.engine.discovery.ClassSelector +org.junit.platform.commons.util.Preconditions$$Lambda/0x00003fc00106b118 +java.lang.invoke.LambdaForm$DMH/0x00003fc00106c400 +org.junit.platform.launcher.core.LauncherDiscoveryRequestBuilder$$Lambda/0x00003fc00106b358 +org.junit.platform.launcher.listeners.discovery.LauncherDiscoveryListeners$LauncherDiscoveryListenerType +org.junit.platform.launcher.listeners.discovery.LauncherDiscoveryListeners$LauncherDiscoveryListenerType$$Lambda/0x00003fc00106b7e8 +org.junit.platform.launcher.listeners.discovery.LauncherDiscoveryListeners$LauncherDiscoveryListenerType$$Lambda/0x00003fc00106ba10 +org.junit.platform.launcher.listeners.discovery.LauncherDiscoveryListeners$$Lambda/0x00003fc00106e000 +org.junit.platform.launcher.listeners.discovery.LauncherDiscoveryListeners$$Lambda/0x00003fc00106e260 +org.junit.platform.launcher.listeners.discovery.AbortOnFailureLauncherDiscoveryListener +org.junit.platform.engine.EngineDiscoveryListener$1 +org.junit.platform.launcher.LauncherDiscoveryListener$1 +org.junit.platform.launcher.listeners.discovery.LauncherDiscoveryListeners$$Lambda/0x00003fc00106ec08 +org.junit.platform.launcher.core.HierarchicalOutputDirectoryCreator +java.util.regex.Pattern$$Lambda/0x00003fc00101d840 +java.util.regex.Pattern$$Lambda/0x00003fc00101daa8 +java.util.regex.Pattern$$Lambda/0x80000002f +org.junit.platform.launcher.core.LauncherDiscoveryRequestBuilder$$Lambda/0x00003fc00106f080 +org.junit.platform.launcher.core.DefaultDiscoveryRequest +org.junit.platform.launcher.core.InterceptingLauncher$$Lambda/0x00003fc00106f558 +org.junit.platform.launcher.core.LauncherPhase +org.junit.platform.engine.UniqueId +org.junit.platform.launcher.core.EngineDiscoveryOrchestrator$$Lambda/0x00003fc00106d000 +org.junit.platform.launcher.core.DiscoveryIssueCollector +org.junit.platform.engine.TestSource +org.junit.platform.launcher.listeners.discovery.CompositeLauncherDiscoveryListener +org.junit.platform.launcher.core.DelegatingLauncherDiscoveryRequest +org.junit.platform.launcher.core.EngineDiscoveryOrchestrator$1 +org.junit.platform.launcher.listeners.discovery.CompositeLauncherDiscoveryListener$$Lambda/0x00003fc00106c800 +org.junit.platform.launcher.core.EngineFilterer +org.junit.platform.engine.FilterResult +org.junit.platform.launcher.core.EngineFilterer$$Lambda/0x00003fc001070000 +java.lang.invoke.LambdaForm$DMH/0x00003fc001074000 +org.junit.platform.launcher.core.EngineFilterer$$Lambda/0x00003fc001070250 +org.junit.platform.launcher.core.EngineDiscoveryOrchestrator$$Lambda/0x00003fc0010704a8 +org.junit.platform.engine.UniqueIdFormat +java.io.UnsupportedEncodingException +java.util.Formatter +java.util.Locale$Category +java.util.Formatter$Conversion +java.util.Formatter$FormatString +java.util.Formatter$FormatSpecifier +java.util.Formatter$FixedString +java.util.Formattable +java.util.Formatter$Flags +java.util.regex.Pattern$$Lambda/0x00003fc00101e3c0 +java.lang.invoke.LambdaForm$DMH/0x00003fc001074400 +org.junit.platform.engine.UniqueIdFormat$$Lambda/0x00003fc001070900 +java.net.URLEncoder +java.util.function.IntPredicate +jdk.internal.util.ImmutableBitSetPredicate +jdk.internal.util.ImmutableBitSetPredicate$SmallImmutableBitSetPredicate +org.junit.platform.engine.UniqueIdFormat$$Lambda/0x00003fc001070b48 +org.junit.platform.engine.UniqueIdFormat$$Lambda/0x00003fc001070d90 +org.junit.platform.engine.UniqueIdFormat$$Lambda/0x00003fc001070fd8 +org.junit.platform.engine.UniqueIdFormat$$Lambda/0x00003fc001071220 +org.junit.platform.engine.UniqueIdFormat$$Lambda/0x00003fc001071468 +org.junit.platform.engine.UniqueId$Segment +org.junit.platform.launcher.listeners.discovery.CompositeLauncherDiscoveryListener$$Lambda/0x00003fc0010718d8 +org.junit.jupiter.engine.config.CachingJupiterConfiguration +org.junit.jupiter.engine.config.DefaultJupiterConfiguration +org.junit.jupiter.api.parallel.ExecutionMode +org.junit.jupiter.api.TestInstance$Lifecycle +org.junit.jupiter.api.io.CleanupMode +org.junit.jupiter.api.extension.TestInstantiationAwareExtension$ExtensionContextScope +org.junit.jupiter.engine.config.EnumConfigurationParameterConverter +org.junit.jupiter.engine.config.InstantiatingConfigurationParameterConverter +org.junit.jupiter.api.DisplayNameGenerator +org.junit.jupiter.api.MethodOrderer +org.junit.jupiter.api.ClassOrderer +org.junit.jupiter.api.io.TempDirFactory +org.junit.platform.engine.support.hierarchical.Node +org.junit.platform.engine.support.descriptor.AbstractTestDescriptor +org.junit.platform.engine.support.descriptor.EngineDescriptor +org.junit.jupiter.engine.descriptor.JupiterEngineDescriptor +org.junit.jupiter.engine.extension.ExtensionRegistry +org.junit.jupiter.api.extension.ExtensionContext +org.junit.jupiter.engine.discovery.DiscoverySelectorResolver +org.junit.platform.engine.support.discovery.SelectorResolver +org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolver +org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolver$InitializationContext +org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolver$Builder +org.junit.jupiter.engine.discovery.DiscoverySelectorResolver$$Lambda/0x00003fc001077650 +org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolver$Builder$$Lambda/0x00003fc001077898 +org.junit.jupiter.engine.discovery.DiscoverySelectorResolver$$Lambda/0x00003fc001077ae8 +org.junit.jupiter.engine.discovery.DiscoverySelectorResolver$$Lambda/0x00003fc001077d30 +org.junit.platform.engine.TestDescriptor$Visitor +org.junit.jupiter.engine.discovery.DiscoverySelectorResolver$$Lambda/0x00003fc001075208 +org.junit.platform.engine.support.discovery.DiscoveryIssueReporter +org.junit.platform.engine.DiscoveryIssue +org.junit.platform.engine.support.discovery.DiscoveryIssueReporter$$Lambda/0x00003fc001075860 +org.junit.platform.engine.support.discovery.DiscoveryIssueReporter$$Lambda/0x00003fc001075ab0 +org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolver$DefaultInitializationContext +org.junit.platform.engine.DiscoveryFilter +org.junit.platform.engine.discovery.ClassNameFilter +org.junit.platform.launcher.core.DefaultDiscoveryRequest$$Lambda/0x00003fc001074c10 +org.junit.platform.launcher.core.DefaultDiscoveryRequest$$Lambda/0x00003fc001078000 +org.junit.platform.engine.discovery.PackageNameFilter +org.junit.platform.engine.CompositeFilter +org.junit.platform.engine.CompositeFilter$1 +org.junit.platform.engine.CompositeFilter$1$$Lambda/0x00003fc0010788e0 +org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolver$$Lambda/0x00003fc001078b38 +org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolver$$Lambda/0x00003fc001078d88 +java.util.stream.Collectors$$Lambda/0x00003fc00101ecf8 +java.util.stream.Collectors$$Lambda/0x00003fc00101ef30 +org.junit.platform.engine.support.discovery.ClassContainerSelectorResolver +org.junit.jupiter.engine.discovery.predicates.TestClassPredicates +org.junit.jupiter.engine.discovery.predicates.TestClassPredicates$$Lambda/0x00003fc0010794f0 +org.junit.jupiter.engine.discovery.predicates.TestClassPredicates$$Lambda/0x00003fc001079748 +org.junit.jupiter.engine.discovery.predicates.TestClassPredicates$$Lambda/0x00003fc0010799a0 +org.junit.jupiter.engine.discovery.predicates.TestClassPredicates$$Lambda/0x00003fc001079c00 +org.junit.jupiter.engine.discovery.predicates.IsTestableMethod +org.junit.jupiter.engine.discovery.predicates.IsTestMethod +org.junit.jupiter.api.Test +org.junit.platform.engine.support.discovery.DiscoveryIssueReporter$Condition +org.junit.jupiter.engine.discovery.predicates.IsTestMethod$$Lambda/0x00003fc00107a750 +org.junit.platform.commons.support.ModifierSupport +java.lang.invoke.LambdaForm$DMH/0x00003fc00107c000 +org.junit.jupiter.engine.discovery.predicates.IsTestableMethod$$Lambda/0x00003fc00107ab98 +org.junit.jupiter.engine.discovery.predicates.IsTestableMethod$$Lambda/0x00003fc00107adf0 +java.lang.invoke.LambdaForm$DMH/0x00003fc00107c400 +org.junit.platform.engine.support.discovery.DiscoveryIssueReporter$$Lambda/0x00003fc00107b040 +org.junit.jupiter.engine.discovery.predicates.IsTestableMethod$$Lambda/0x00003fc00107b2a0 +org.junit.jupiter.engine.discovery.predicates.IsTestableMethod$$Lambda/0x00003fc00107b4f8 +java.lang.invoke.LambdaForm$DMH/0x00003fc00107c800 +org.junit.platform.engine.support.discovery.DiscoveryIssueReporter$Condition$$Lambda/0x00003fc00107b748 +org.junit.platform.commons.util.ReflectionUtils +org.junit.jupiter.engine.discovery.predicates.IsTestableMethod$$Lambda/0x00003fc00107bbb8 +org.junit.jupiter.engine.discovery.predicates.IsTestableMethod$$Lambda/0x00003fc00107e000 +org.junit.jupiter.engine.discovery.predicates.IsTestFactoryMethod +org.junit.jupiter.api.DynamicNode +java.util.Formatter$FormatSpecifierParser +org.junit.jupiter.api.TestFactory +org.junit.jupiter.engine.discovery.predicates.IsTestFactoryMethod$$Lambda/0x00003fc00107e8f0 +org.junit.jupiter.engine.discovery.predicates.IsTestFactoryMethod$$Lambda/0x00003fc00107eb28 +org.junit.jupiter.engine.discovery.predicates.IsTestFactoryMethod$$Lambda/0x00003fc00107ed88 +java.util.function.Predicate$$Lambda/0x00003fc00101f398 +org.junit.jupiter.engine.discovery.predicates.IsTestTemplateMethod +org.junit.jupiter.api.TestTemplate +org.junit.jupiter.engine.discovery.predicates.IsTestTemplateMethod$$Lambda/0x00003fc00107f450 +org.junit.jupiter.engine.discovery.predicates.TestClassPredicates$$Lambda/0x00003fc00107f688 +org.junit.jupiter.engine.discovery.predicates.TestClassPredicates$$Lambda/0x00003fc00107f8e0 +org.junit.jupiter.engine.discovery.predicates.TestClassPredicates$$Lambda/0x00003fc00107fb30 +org.junit.jupiter.engine.discovery.predicates.TestClassPredicates$$Lambda/0x00003fc00107fd88 +org.junit.jupiter.engine.discovery.predicates.TestClassPredicates$$Lambda/0x00003fc00107d000 +org.junit.jupiter.engine.discovery.predicates.TestClassPredicates$$Lambda/0x00003fc00107d258 +org.junit.jupiter.engine.discovery.predicates.TestClassPredicates$$Lambda/0x00003fc00107d4a0 +org.junit.jupiter.engine.discovery.predicates.TestClassPredicates$$Lambda/0x00003fc00107d6f8 +org.junit.jupiter.engine.discovery.predicates.TestClassPredicates$$Lambda/0x00003fc00107d940 +org.junit.jupiter.engine.discovery.predicates.TestClassPredicates$$Lambda/0x00003fc00107db98 +org.junit.jupiter.engine.discovery.ClassSelectorResolver +org.junit.jupiter.engine.descriptor.ResourceLockAware +org.junit.jupiter.engine.descriptor.TestClassAware +org.junit.jupiter.engine.descriptor.Validatable +org.junit.jupiter.engine.descriptor.JupiterTestDescriptor +org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor +org.junit.jupiter.engine.descriptor.ClassTestDescriptor +org.junit.jupiter.engine.descriptor.NestedClassTestDescriptor +org.junit.jupiter.api.extension.ClassTemplateInvocationContext +org.junit.jupiter.engine.descriptor.Filterable +org.junit.jupiter.engine.descriptor.ClassTemplateTestDescriptor +org.junit.jupiter.engine.discovery.MethodSelectorResolver +org.junit.jupiter.engine.discovery.MethodFinder +java.util.regex.Pattern$$Lambda/0x00003fc00101f5f8 +org.junit.jupiter.engine.discovery.MethodSelectorResolver$MethodType +org.junit.jupiter.engine.discovery.MethodSelectorResolver$MethodType$TestDescriptorFactory +org.junit.jupiter.engine.descriptor.MethodBasedTestDescriptor +org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor +org.junit.jupiter.engine.extension.ExtensionRegistrar +java.lang.invoke.LambdaForm$DMH/0x00003fc001084000 +org.junit.jupiter.engine.discovery.MethodSelectorResolver$MethodType$$Lambda/0x00003fc001083cd8 +org.junit.jupiter.engine.descriptor.TestFactoryTestDescriptor +org.junit.jupiter.engine.descriptor.DynamicNodeTestDescriptor +org.junit.jupiter.engine.descriptor.DynamicContainerTestDescriptor +org.junit.jupiter.engine.descriptor.DynamicTestTestDescriptor +org.junit.jupiter.engine.discovery.MethodSelectorResolver$MethodType$$Lambda/0x00003fc001087338 +org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor +org.junit.jupiter.engine.discovery.MethodSelectorResolver$MethodType$$Lambda/0x00003fc001087b00 +org.junit.jupiter.engine.discovery.AbstractOrderingVisitor +org.junit.jupiter.engine.discovery.ClassOrderingVisitor +org.junit.jupiter.api.ClassOrdererContext +org.junit.platform.commons.util.LruCache +org.junit.jupiter.engine.config.CachingJupiterConfiguration$$Lambda/0x00003fc001085c10 +org.junit.jupiter.engine.config.InstantiatingConfigurationParameterConverter$$Lambda/0x00003fc001084800 +org.junit.jupiter.engine.config.InstantiatingConfigurationParameterConverter$$Lambda/0x00003fc001084a48 +org.junit.jupiter.engine.config.InstantiatingConfigurationParameterConverter$$Lambda/0x00003fc001084ca0 +org.junit.jupiter.engine.config.InstantiatingConfigurationParameterConverter$$Lambda/0x00003fc001084400 +org.junit.jupiter.engine.discovery.AbstractOrderingVisitor$DescriptorWrapperOrderer +org.junit.jupiter.engine.discovery.AbstractOrderingVisitor$MessageGenerator +org.junit.jupiter.engine.discovery.AbstractOrderingVisitor$DescriptorWrapperOrderer$$Lambda/0x00003fc001088428 +org.junit.jupiter.engine.discovery.AbstractOrderingVisitor$DescriptorWrapperOrderer$$Lambda/0x00003fc001088650 +org.junit.jupiter.engine.discovery.ClassOrderingVisitor$$Lambda/0x00003fc001088878 +org.junit.jupiter.engine.discovery.ClassOrderingVisitor$$Lambda/0x00003fc001088ad0 +org.junit.jupiter.engine.discovery.MethodOrderingVisitor +org.junit.jupiter.api.MethodOrdererContext +org.junit.jupiter.engine.discovery.MethodOrderingVisitor$$Lambda/0x00003fc001089170 +org.junit.jupiter.engine.discovery.MethodOrderingVisitor$$Lambda/0x00003fc0010893c8 +org.junit.jupiter.engine.discovery.MethodOrderingVisitor$$Lambda/0x00003fc001089610 +java.lang.invoke.InnerClassLambdaMetafactory$SerializationSupport +java.lang.invoke.InnerClassLambdaMetafactory$4 +java.lang.classfile.constantpool.ConstantValueEntry +java.lang.classfile.constantpool.StringEntry +jdk.internal.classfile.impl.AbstractPoolEntry$StringEntryImpl +sun.invoke.util.BytecodeDescriptor +java.lang.classfile.constantpool.IntegerEntry +jdk.internal.classfile.impl.AbstractPoolEntry$IntegerEntryImpl +jdk.internal.classfile.impl.BytecodeHelpers$1 +java.util.Comparator$$Lambda/0x00003fc001020b98 +java.util.Collections$ReverseComparator +java.util.Comparators$NaturalOrderComparator +java.util.Collections$ReverseComparator2 +java.util.function.UnaryOperator +org.junit.jupiter.engine.discovery.MethodOrderingVisitor$$Lambda/0x00003fc001089860 +org.junit.jupiter.engine.discovery.DiscoverySelectorResolver$$Lambda/0x00003fc001089ac8 +org.junit.platform.engine.CompositeTestDescriptorVisitor +org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution +org.junit.platform.engine.support.discovery.SelectorResolver$Context +org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution$DefaultContext +org.junit.platform.engine.support.discovery.SelectorResolver$Match +org.junit.platform.engine.support.discovery.SelectorResolver$Match$$Lambda/0x00003fc00108a7d8 +org.junit.platform.engine.support.discovery.SelectorResolver$Match$Type +org.junit.platform.launcher.core.DefaultDiscoveryRequest$$Lambda/0x00003fc00108ae50 +org.junit.platform.launcher.core.DefaultDiscoveryRequest$$Lambda/0x00003fc00108b0b0 +java.util.ArrayDeque$$Lambda/0x00003fc001021c80 +org.junit.platform.engine.discovery.UniqueIdSelector +org.junit.platform.engine.support.discovery.SelectorResolver$Resolution +org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution$$Lambda/0x00003fc00108b770 +org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution$$Lambda/0x00003fc00108b9c0 +org.junit.platform.engine.discovery.ClasspathResourceSelector +org.junit.platform.engine.discovery.ClasspathRootSelector +org.junit.platform.commons.support.ReflectionSupport +org.junit.platform.commons.util.ClasspathScannerLoader +org.junit.platform.commons.support.scanning.ClasspathScanner +java.util.Spliterators$IteratorSpliterator +java.lang.foreign.MemorySegment$Scope +jdk.internal.foreign.MemorySessionImpl +org.junit.platform.commons.util.DefaultClasspathScanner +java.nio.file.FileVisitor +org.junit.platform.commons.util.ClasspathScannerLoader$$Lambda/0x00003fc00108c960 +org.junit.platform.commons.function.Try +java.lang.invoke.LambdaForm$DMH/0x00003fc001090000 +org.junit.platform.commons.util.ClasspathScannerLoader$$Lambda/0x00003fc00108cde0 +java.lang.invoke.LambdaForm$DMH/0x00003fc001090400 +org.junit.platform.commons.util.ReflectionUtils$$Lambda/0x00003fc00108d018 +org.junit.platform.commons.util.ReflectionUtils$$Lambda/0x00003fc00108d258 +org.junit.platform.commons.function.Try$Success +org.junit.platform.commons.function.Try$Failure +org.junit.platform.commons.function.Try$$Lambda/0x00003fc00108d948 +java.util.regex.MatchResult +java.util.regex.Matcher +java.util.regex.IntHashSet +org.junit.platform.engine.discovery.ClassSelector$$Lambda/0x00003fc00108db78 +org.junit.jupiter.api.Nested +org.junit.platform.commons.support.AnnotationSupport +org.junit.platform.commons.util.AnnotationUtils +java.lang.annotation.Inherited +sun.reflect.generics.parser.SignatureParser +sun.reflect.generics.tree.Tree +sun.reflect.generics.tree.TypeTree +sun.reflect.generics.tree.TypeArgument +sun.reflect.generics.tree.ReturnType +sun.reflect.generics.tree.TypeSignature +sun.reflect.generics.tree.BaseType +sun.reflect.generics.tree.FieldTypeSignature +sun.reflect.generics.tree.SimpleClassTypeSignature +sun.reflect.generics.tree.ClassTypeSignature +sun.reflect.generics.scope.Scope +sun.reflect.generics.scope.AbstractScope +sun.reflect.generics.scope.ClassScope +sun.reflect.generics.factory.GenericsFactory +sun.reflect.generics.factory.CoreReflectionFactory +sun.reflect.generics.visitor.TypeTreeVisitor +sun.reflect.generics.visitor.Reifier +java.lang.annotation.Target +java.lang.reflect.GenericArrayType +sun.reflect.annotation.AnnotationType +java.lang.annotation.ElementType +java.lang.annotation.Retention +java.lang.annotation.Documented +java.lang.annotation.RetentionPolicy +sun.reflect.annotation.ExceptionProxy +sun.reflect.annotation.AnnotationTypeMismatchExceptionProxy +java.lang.reflect.InvocationHandler +sun.reflect.annotation.AnnotationInvocationHandler +java.lang.reflect.Proxy +java.lang.ClassValue +java.lang.reflect.Proxy$1 +java.lang.ClassValue$Entry +java.lang.ClassValue$Identity +java.lang.ClassValue$Version +jdk.internal.loader.AbstractClassLoaderValue$Sub +java.lang.reflect.Proxy$$Lambda/0x00003fc00102ac70 +java.lang.reflect.Proxy$ProxyBuilder +java.lang.PublicMethods +java.util.LinkedHashMap$LinkedValues +java.util.LinkedHashMap$LinkedValueIterator +java.lang.reflect.Proxy$ProxyBuilder$$Lambda/0x00003fc00102b960 +java.lang.module.ModuleDescriptor$Modifier +java.lang.reflect.AccessFlag +java.lang.reflect.AccessFlag$Location +java.lang.module.ModuleDescriptor$Builder +jdk.internal.module.Checks +java.lang.module.ModuleDescriptor$Builder$$Lambda/0x80000000e +java.lang.WeakPairMap$WeakRefPeer +java.lang.WeakPairMap$Pair$Weak +java.lang.WeakPairMap$Pair$Weak$1 +java.lang.Module$$Lambda/0x00003fc00102c2f0 +java.lang.WeakPairMap$$Lambda/0x00003fc00102c528 +java.lang.reflect.Proxy$ProxyBuilder$ProxyClassContext +java.lang.reflect.ProxyGenerator +java.lang.classfile.ClassFile$Option +java.lang.classfile.ClassFile$StackMapsOption +java.util.StringJoiner +java.lang.classfile.attribute.StackMapFrameInfo$VerificationTypeInfo +java.lang.classfile.attribute.StackMapFrameInfo$ObjectVerificationTypeInfo +jdk.internal.classfile.impl.StackMapDecoder$ObjectVerificationTypeInfoImpl +java.lang.reflect.ProxyGenerator$ProxyMethod +java.lang.reflect.ProxyGenerator$$Lambda/0x00003fc00102d1c0 +java.lang.reflect.ProxyGenerator$$Lambda/0x00003fc00102d408 +java.lang.reflect.ProxyGenerator$$Lambda/0x00003fc00102d648 +java.lang.reflect.ProxyGenerator$ProxyMethod$$Lambda/0x00003fc00102d888 +java.lang.classfile.attribute.ExceptionsAttribute +jdk.internal.classfile.impl.UnboundAttribute$UnboundExceptionsAttribute +jdk.internal.classfile.impl.AbstractAttributeMapper$ExceptionsMapper +java.lang.reflect.ProxyGenerator$ProxyMethod$$Lambda/0x00003fc00102e1f0 +java.lang.reflect.ProxyGenerator$PrimitiveTypeInfo +java.lang.classfile.instruction.ExceptionCatch +jdk.internal.classfile.impl.AbstractPseudoInstruction +jdk.internal.classfile.impl.AbstractPseudoInstruction$ExceptionCatchImpl +java.lang.classfile.attribute.StackMapFrameInfo +jdk.internal.classfile.impl.StackMapDecoder$StackMapFrameImpl +java.lang.classfile.attribute.StackMapTableAttribute +jdk.internal.classfile.impl.UnboundAttribute$UnboundStackMapTableAttribute +jdk.internal.classfile.impl.AbstractAttributeMapper$StackMapTableMapper +java.lang.reflect.ProxyGenerator$$Lambda/0x00003fc00102ef60 +java.lang.reflect.ProxyGenerator$$Lambda/0x00003fc00102f1a0 +java.lang.reflect.ProxyGenerator$$Lambda/0x00003fc00102f3e0 +jdk.internal.classfile.impl.StackCounter +jdk.internal.classfile.impl.StackCounter$Target +java.lang.classfile.attribute.StackMapFrameInfo$SimpleVerificationTypeInfo +jdk.internal.classfile.impl.StackMapDecoder +jdk.internal.classfile.impl.StackMapDecoder$1 +java.util.Arrays$LegacyMergeSort +java.util.TimSort +jdk.proxy1.$Proxy0 +sun.reflect.annotation.AnnotationParser$$Lambda/0x00003fc0010302a8 +java.lang.invoke.LambdaForm$DMH/0x00003fc001090800 +jdk.proxy1.$Proxy1 +jdk.proxy1.$Proxy2 +org.apiguardian.api.API +org.apiguardian.api.API$Status +jdk.proxy2.$Proxy3 +java.lang.reflect.UndeclaredThrowableException +java.lang.Class$AnnotationData +java.util.Collections$EmptyIterator +org.junit.platform.commons.util.KotlinReflectionUtils +org.junit.platform.commons.function.Try$Transformer +org.junit.platform.commons.util.KotlinReflectionUtils$$Lambda/0x00003fc00108f0d0 +org.junit.jupiter.api.ClassTemplate +jdk.proxy1.$Proxy4 +org.junit.platform.commons.annotation.Testable +jdk.proxy2.$Proxy5 +org.junit.platform.commons.util.ReflectionUtils$HierarchyTraversalMode +org.junit.platform.commons.util.ReflectionUtils$$Lambda/0x00003fc001094000 +org.junit.platform.commons.util.ReflectionUtils$$Lambda/0x00003fc001094258 +org.junit.platform.commons.util.ReflectionUtils$$Lambda/0x00003fc001094480 +jdk.proxy2.$Proxy6 +org.junit.jupiter.engine.discovery.ClassSelectorResolver$$Lambda/0x00003fc001094978 +org.junit.jupiter.api.extension.ExtensionConfigurationException +org.junit.jupiter.api.extension.TestInstanceFactoryContext +org.junit.jupiter.api.extension.Extension +org.junit.jupiter.api.extension.TestInstantiationAwareExtension +org.junit.jupiter.api.extension.TestInstantiationException +org.junit.jupiter.engine.execution.ConditionEvaluator +org.junit.jupiter.engine.execution.ConditionEvaluationException +org.junit.jupiter.api.extension.ConditionEvaluationResult +org.junit.jupiter.engine.execution.InterceptingExecutableInvoker +org.junit.jupiter.api.extension.ReflectiveInvocationContext +org.junit.jupiter.api.extension.InvocationInterceptor$Invocation +org.junit.jupiter.engine.execution.InvocationInterceptorChain +org.junit.jupiter.engine.descriptor.DisplayNameUtils +org.junit.jupiter.api.DisplayNameGenerator$Standard +org.junit.jupiter.api.DisplayNameGenerator$Simple +org.junit.jupiter.api.DisplayNameGenerator$ReplaceUnderscores +org.junit.jupiter.api.DisplayNameGenerator$IndicativeSentences +org.junit.jupiter.api.DisplayNameGenerator$IndicativeSentences$$Lambda/0x00003fc001097170 +org.junit.jupiter.engine.descriptor.DisplayNameUtils$$Lambda/0x00003fc0010973c8 +org.junit.jupiter.engine.descriptor.DisplayNameUtils$$Lambda/0x00003fc0010975f0 +org.junit.jupiter.engine.descriptor.DisplayNameUtils$$Lambda/0x00003fc001097830 +org.junit.platform.engine.support.descriptor.ClassSource +org.junit.jupiter.api.DisplayName +org.junit.jupiter.engine.descriptor.DisplayNameUtils$$Lambda/0x00003fc001092000 +org.junit.jupiter.engine.descriptor.DisplayNameUtils$$Lambda/0x00003fc001092248 +org.junit.jupiter.engine.descriptor.DisplayNameUtils$$Lambda/0x00003fc0010924a0 +org.junit.jupiter.api.DisplayNameGeneration +java.util.AbstractList$Itr +java.util.AbstractList$ListItr +org.junit.jupiter.engine.descriptor.DisplayNameUtils$$Lambda/0x00003fc0010928f0 +org.junit.jupiter.engine.descriptor.DisplayNameUtils$$Lambda/0x00003fc001092b38 +org.junit.jupiter.engine.descriptor.DisplayNameUtils$$Lambda/0x00003fc001092d80 +org.junit.jupiter.engine.descriptor.DisplayNameUtils$$Lambda/0x00003fc001092fd0 +org.junit.jupiter.engine.config.CachingJupiterConfiguration$$Lambda/0x00003fc001093200 +org.junit.jupiter.engine.config.DefaultJupiterConfiguration$$Lambda/0x00003fc001093450 +org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor$ClassInfo +org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor$ClassInfo$$Lambda/0x00003fc001093890 +org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor$ClassInfo$$Lambda/0x00003fc001093ac0 +org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor$ClassInfo$$Lambda/0x00003fc001093cf0 +org.junit.jupiter.api.Tag +java.lang.annotation.Repeatable +org.junit.jupiter.api.Tags +jdk.proxy1.$Proxy7 +org.junit.platform.commons.util.AnnotationUtils$$Lambda/0x00003fc001091410 +org.junit.jupiter.engine.descriptor.JupiterTestDescriptor$$Lambda/0x00003fc001091640 +java.lang.invoke.LambdaForm$DMH/0x00003fc001090c00 +org.junit.jupiter.engine.descriptor.JupiterTestDescriptor$$Lambda/0x00003fc001091888 +org.junit.platform.engine.TestTag +org.junit.jupiter.engine.descriptor.JupiterTestDescriptor$$Lambda/0x00003fc001091d00 +org.junit.jupiter.engine.descriptor.JupiterTestDescriptor$$Lambda/0x00003fc001098000 +org.junit.jupiter.engine.descriptor.JupiterTestDescriptor$$Lambda/0x00003fc001098228 +java.lang.invoke.LambdaForm$DMH/0x00003fc00109c000 +java.util.function.Function$$Lambda/0x00003fc001031a30 +org.junit.jupiter.engine.descriptor.TestInstanceLifecycleUtils +org.junit.jupiter.api.TestInstance +org.junit.jupiter.engine.descriptor.TestInstanceLifecycleUtils$$Lambda/0x00003fc001098888 +org.junit.jupiter.engine.descriptor.TestInstanceLifecycleUtils$$Lambda/0x00003fc001098ad0 +org.junit.jupiter.engine.config.CachingJupiterConfiguration$$Lambda/0x00003fc001098d00 +java.lang.invoke.LambdaForm$DMH/0x00003fc00109c400 +org.junit.jupiter.engine.config.EnumConfigurationParameterConverter$$Lambda/0x00003fc001099150 +org.junit.jupiter.engine.descriptor.ExclusiveResourceCollector +org.junit.jupiter.engine.descriptor.ExclusiveResourceCollector$1 +org.junit.jupiter.engine.descriptor.ExclusiveResourceCollector$DefaultExclusiveResourceCollector +org.junit.jupiter.api.parallel.ResourceLock +org.junit.jupiter.api.parallel.ResourceLocks +org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor$LifecycleMethods +org.junit.platform.engine.support.discovery.DiscoveryIssueReporter$$Lambda/0x00003fc00109a070 +java.lang.invoke.LambdaForm$DMH/0x00003fc00109c800 +org.junit.platform.engine.support.discovery.DiscoveryIssueReporter$$Lambda/0x00003fc00109a2b0 +org.junit.jupiter.engine.descriptor.LifecycleMethodUtils +org.junit.jupiter.api.BeforeAll +org.junit.platform.commons.support.HierarchyTraversalMode +org.junit.jupiter.engine.descriptor.LifecycleMethodUtils$$Lambda/0x00003fc00109ad68 +org.junit.jupiter.engine.descriptor.LifecycleMethodUtils$$Lambda/0x00003fc00109afb8 +org.junit.jupiter.engine.descriptor.LifecycleMethodUtils$$Lambda/0x00003fc00109b210 +org.junit.platform.commons.util.AnnotationUtils$$Lambda/0x00003fc00109b460 +org.junit.platform.commons.util.ReflectionUtils$$Lambda/0x00003fc00109b6c0 +java.util.function.IntFunction +org.junit.platform.commons.util.ReflectionUtils$$Lambda/0x00003fc00109b918 +java.util.stream.Nodes +java.util.stream.Node +java.util.stream.Nodes$EmptyNode +java.util.stream.Nodes$EmptyNode$OfRef +java.util.stream.Node$OfPrimitive +java.util.stream.Node$OfInt +java.util.stream.Nodes$EmptyNode$OfInt +java.util.stream.Node$OfLong +java.util.stream.Nodes$EmptyNode$OfLong +java.util.stream.Node$OfDouble +java.util.stream.Nodes$EmptyNode$OfDouble +java.util.stream.AbstractSpinedBuffer +java.util.stream.SpinedBuffer +java.util.stream.Node$Builder +java.util.stream.Nodes$SpinedNodeBuilder +java.util.Spliterators$EmptySpliterator +java.util.Spliterators$EmptySpliterator$OfRef +org.junit.platform.commons.util.ReflectionUtils$$Lambda/0x00003fc00109bb40 +org.junit.platform.commons.util.ReflectionUtils$$Lambda/0x00003fc00109bda0 +org.junit.platform.commons.util.ReflectionUtils$$Lambda/0x00003fc00109e000 +org.junit.platform.commons.util.ReflectionUtils$$Lambda/0x00003fc00109e260 +java.util.stream.DistinctOps +java.util.stream.DistinctOps$1 +org.junit.platform.commons.util.CollectionUtils$$Lambda/0x00003fc00109e488 +java.util.stream.DistinctOps$1$2 +java.util.LinkedHashMap$LinkedEntrySet +java.util.LinkedHashMap$LinkedEntryIterator +org.junit.jupiter.engine.descriptor.LifecycleMethodUtils$$Lambda/0x00003fc00109e6d0 +org.junit.jupiter.engine.descriptor.LifecycleMethodUtils$$Lambda/0x00003fc00109e900 +org.junit.jupiter.engine.descriptor.LifecycleMethodUtils$$Lambda/0x00003fc00109eb58 +org.junit.platform.engine.support.discovery.DiscoveryIssueReporter$Condition$$Lambda/0x00003fc00109eda8 +java.util.stream.ReferencePipeline$15 +org.junit.jupiter.engine.descriptor.LifecycleMethodUtils$$Lambda/0x00003fc00109efe8 +org.junit.jupiter.engine.descriptor.LifecycleMethodUtils$$Lambda/0x00003fc00109f238 +org.junit.jupiter.engine.descriptor.LifecycleMethodUtils$$Lambda/0x00003fc00109f490 +org.junit.platform.engine.support.discovery.DiscoveryIssueReporter$Condition$$Lambda/0x00003fc00109f6e0 +java.util.stream.ReferencePipeline$15$1 +org.junit.jupiter.api.AfterAll +org.junit.jupiter.api.BeforeEach +org.junit.jupiter.engine.descriptor.LifecycleMethodUtils$$Lambda/0x00003fc00109fd50 +org.junit.jupiter.engine.descriptor.LifecycleMethodUtils$$Lambda/0x00003fc00109d000 +org.junit.jupiter.engine.descriptor.LifecycleMethodUtils$$Lambda/0x00003fc00109d258 +org.junit.jupiter.api.AfterEach +org.junit.jupiter.engine.discovery.ClassSelectorResolver$$Lambda/0x00003fc00109d6b0 +org.junit.jupiter.engine.discovery.ClassSelectorResolver$$Lambda/0x00003fc00109d900 +org.junit.jupiter.engine.discovery.ClassSelectorResolver$$Lambda/0x00003fc00109db30 +org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution$$Lambda/0x00003fc00109dd60 +org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution$$Lambda/0x00003fc00109cc00 +org.junit.platform.engine.SelectorResolutionResult +org.junit.platform.engine.SelectorResolutionResult$Status +org.junit.platform.launcher.listeners.discovery.CompositeLauncherDiscoveryListener$$Lambda/0x00003fc0010a0678 +org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution$$Lambda/0x00003fc0010a08b8 +org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution$$Lambda/0x00003fc0010a0b10 +java.util.stream.ForEachOps +java.util.stream.ForEachOps$ForEachOp +java.util.stream.ForEachOps$ForEachOp$OfRef +org.junit.jupiter.engine.discovery.ClassSelectorResolver$$Lambda/0x00003fc0010a0d50 +org.junit.platform.commons.util.ReflectionUtils$CycleErrorHandling +org.junit.platform.commons.util.ReflectionUtils$CycleErrorHandling$1 +org.junit.platform.commons.util.ReflectionUtils$CycleErrorHandling$2 +org.junit.platform.commons.util.ReflectionUtils$$Lambda/0x00003fc0010a18a8 +java.lang.invoke.LambdaForm$DMH/0x00003fc0010a4000 +java.util.function.Predicate$$Lambda/0x00003fc001032468 +org.junit.jupiter.engine.discovery.ClassSelectorResolver$$Lambda/0x00003fc0010a1ae8 +java.util.function.Predicate$$Lambda/0x00003fc0010326c8 +java.util.stream.Streams$ConcatSpliterator +java.util.stream.Streams$ConcatSpliterator$OfRef +java.util.stream.Streams$2 +org.junit.platform.engine.discovery.NestedClassSelector +org.junit.jupiter.engine.discovery.ClassSelectorResolver$$Lambda/0x00003fc0010a1fa0 +java.util.stream.AbstractPipeline$$Lambda/0x00003fc0010330b0 +java.util.stream.StreamSpliterators$AbstractWrappingSpliterator +java.util.stream.StreamSpliterators$WrappingSpliterator +org.junit.jupiter.engine.discovery.ClassSelectorResolver$$Lambda/0x00003fc0010a21f0 +java.util.stream.StreamSpliterators +java.util.stream.StreamSpliterators$WrappingSpliterator$$Lambda/0x00003fc001033a30 +org.junit.platform.engine.discovery.MethodSelector +org.junit.platform.engine.discovery.MethodSelector$$Lambda/0x00003fc0010a2690 +org.junit.platform.commons.util.ClassUtils +org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution$$Lambda/0x00003fc0010a2ae8 +org.junit.platform.engine.discovery.IterationSelector +org.junit.platform.engine.discovery.DirectorySelector +org.junit.platform.engine.discovery.FileSelector +org.junit.jupiter.engine.discovery.MethodSelectorResolver$$Lambda/0x00003fc0010a3418 +org.junit.jupiter.engine.discovery.MethodSelectorResolver$$Lambda/0x00003fc0010a3648 +org.junit.jupiter.engine.discovery.MethodSelectorResolver$$Lambda/0x00003fc0010a3880 +org.junit.jupiter.engine.discovery.MethodSelectorResolver$$Lambda/0x00003fc0010a3ad0 +org.junit.jupiter.engine.discovery.MethodSelectorResolver$$Lambda/0x00003fc0010a3d28 +org.junit.jupiter.engine.discovery.MethodSelectorResolver$$Lambda/0x00003fc0010a6000 +org.junit.jupiter.engine.discovery.MethodSelectorResolver$MethodType$$Lambda/0x00003fc0010a6250 +org.junit.jupiter.engine.discovery.MethodSelectorResolver$MethodType$$Lambda/0x00003fc0010a6480 +org.junit.platform.commons.util.ClassUtils$$Lambda/0x00003fc0010a66d0 +org.junit.jupiter.engine.discovery.MethodSelectorResolver$MethodType$$Lambda/0x00003fc0010a6918 +org.junit.jupiter.engine.execution.InterceptingExecutableInvoker$ReflectiveInterceptorCall$VoidMethodInterceptorCall +org.junit.jupiter.api.extension.InvocationInterceptor +java.lang.invoke.LambdaForm$DMH/0x00003fc0010a4400 +org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor$$Lambda/0x00003fc0010a6f58 +org.junit.jupiter.engine.execution.InterceptingExecutableInvoker$ReflectiveInterceptorCall +org.junit.jupiter.engine.execution.InterceptingExecutableInvoker$ReflectiveInterceptorCall$$Lambda/0x00003fc0010a7388 +org.junit.jupiter.engine.descriptor.DisplayNameUtils$$Lambda/0x00003fc0010a75b8 +org.junit.jupiter.api.DisplayNameGenerator$$Lambda/0x00003fc0010a77f8 +org.junit.platform.engine.support.descriptor.MethodSource +org.junit.jupiter.engine.descriptor.MethodBasedTestDescriptor$MethodInfo +org.junit.jupiter.engine.descriptor.MethodBasedTestDescriptor$MethodInfo$$Lambda/0x00003fc0010a5000 +org.junit.jupiter.engine.descriptor.MethodBasedTestDescriptor$MethodInfo$$Lambda/0x00003fc0010a5230 +org.junit.jupiter.engine.descriptor.MethodBasedTestDescriptor$MethodInfo$$Lambda/0x00003fc0010a5460 +org.junit.platform.commons.util.AnnotationUtils$$Lambda/0x00003fc0010a56a0 +org.junit.platform.commons.util.AnnotationUtils$$Lambda/0x00003fc0010a58e8 +org.junit.platform.commons.util.AnnotationUtils$$Lambda/0x00003fc0010a5b40 +org.junit.jupiter.engine.discovery.MethodSelectorResolver$$Lambda/0x00003fc0010a5d88 +java.util.HashMap$KeySpliterator +org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution$$Lambda/0x00003fc0010a4800 +org.junit.jupiter.engine.discovery.ClassOrderingVisitor$$Lambda/0x00003fc0010a4a40 +org.junit.jupiter.engine.discovery.ClassOrderingVisitor$$Lambda/0x00003fc0010a4c80 +org.junit.jupiter.engine.discovery.ClassOrderingVisitor$$Lambda/0x00003fc0010a8000 +org.junit.jupiter.api.ClassDescriptor +org.junit.jupiter.engine.discovery.AbstractAnnotatedDescriptorWrapper +org.junit.jupiter.engine.discovery.DefaultClassDescriptor +org.junit.jupiter.engine.discovery.ClassOrderingVisitor$$Lambda/0x00003fc0010a88d0 +org.junit.jupiter.engine.discovery.AbstractOrderingVisitor$$Lambda/0x00003fc0010a8b18 +org.junit.jupiter.engine.discovery.AbstractOrderingVisitor$$Lambda/0x00003fc0010a8d78 +org.junit.jupiter.engine.discovery.AbstractOrderingVisitor$$Lambda/0x00003fc0010a8fc8 +org.junit.jupiter.api.Order +org.junit.jupiter.engine.discovery.ClassOrderingVisitor$$Lambda/0x00003fc0010a9410 +org.junit.jupiter.engine.discovery.ClassOrderingVisitor$$Lambda/0x00003fc0010a9650 +org.junit.jupiter.engine.discovery.MethodOrderingVisitor$$Lambda/0x00003fc0010a9898 +org.junit.jupiter.engine.discovery.MethodOrderingVisitor$$Lambda/0x00003fc0010a9ad8 +org.junit.platform.engine.TestDescriptor$$Lambda/0x00003fc0010a9d20 +org.junit.jupiter.api.TestClassOrder +org.junit.jupiter.engine.discovery.ClassOrderingVisitor$$Lambda/0x00003fc0010aa168 +org.junit.jupiter.engine.discovery.ClassOrderingVisitor$$Lambda/0x00003fc0010aa3b0 +org.junit.jupiter.engine.discovery.ClassOrderingVisitor$$Lambda/0x00003fc0010aa5f8 +org.junit.jupiter.engine.discovery.ClassOrderingVisitor$$Lambda/0x00003fc0010aa848 +org.junit.jupiter.engine.discovery.ClassOrderingVisitor$$Lambda/0x00003fc0010aaa78 +org.junit.jupiter.api.TestMethodOrder +org.junit.jupiter.engine.discovery.MethodOrderingVisitor$$Lambda/0x00003fc0010aaec8 +org.junit.jupiter.engine.discovery.MethodOrderingVisitor$$Lambda/0x00003fc0010ab110 +org.junit.jupiter.engine.discovery.MethodOrderingVisitor$$Lambda/0x00003fc0010ab358 +org.junit.jupiter.engine.discovery.MethodOrderingVisitor$$Lambda/0x00003fc0010ab5a0 +org.junit.jupiter.engine.config.CachingJupiterConfiguration$$Lambda/0x00003fc0010ab7d0 +org.junit.jupiter.engine.discovery.MethodOrderingVisitor$$Lambda/0x00003fc0010aba20 +org.junit.jupiter.engine.discovery.MethodOrderingVisitor$$Lambda/0x00003fc0010abc70 +org.junit.jupiter.engine.discovery.MethodOrderingVisitor$$Lambda/0x00003fc0010abe98 +org.junit.jupiter.api.MethodDescriptor +org.junit.jupiter.engine.discovery.DefaultMethodDescriptor +org.junit.jupiter.engine.discovery.MethodOrderingVisitor$$Lambda/0x00003fc0010ac540 +org.junit.jupiter.engine.discovery.MethodOrderingVisitor$$Lambda/0x00003fc0010ac788 +org.junit.platform.engine.support.hierarchical.Node$ExecutionMode +org.junit.jupiter.engine.discovery.MethodOrderingVisitor$$Lambda/0x00003fc0010acc20 +org.junit.jupiter.engine.descriptor.Validatable$$Lambda/0x00003fc0010ace60 +org.junit.jupiter.api.extension.ClassTemplateInvocationLifecycleMethod +org.junit.jupiter.engine.descriptor.LifecycleMethodUtils$$Lambda/0x00003fc0010ad2a8 +org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor$$Lambda/0x00003fc0010ad4e8 +org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor$$Lambda/0x00003fc0010ad718 +org.junit.jupiter.engine.descriptor.DisplayNameUtils$$Lambda/0x00003fc0010ad948 +org.junit.jupiter.engine.descriptor.DisplayNameUtils$$Lambda/0x00003fc0010adb90 +org.junit.jupiter.engine.descriptor.DisplayNameUtils$$Lambda/0x00003fc0010adde8 +org.junit.jupiter.engine.descriptor.MethodBasedTestDescriptor$$Lambda/0x00003fc0010ae028 +org.junit.jupiter.engine.descriptor.MethodBasedTestDescriptor$$Lambda/0x00003fc0010ae258 +org.junit.platform.launcher.core.EngineDiscoveryResultValidator$$Lambda/0x00003fc0010ae488 +org.junit.platform.engine.TestDescriptor$Type +org.junit.platform.launcher.core.EngineDiscoveryResultValidator$$Lambda/0x00003fc0010aeb08 +org.junit.platform.launcher.EngineDiscoveryResult +org.junit.platform.launcher.EngineDiscoveryResult$Status +org.junit.platform.launcher.listeners.discovery.CompositeLauncherDiscoveryListener$$Lambda/0x00003fc0010af3b0 +java.util.Collections$UnmodifiableList$1 +java.util.ArrayList$ListItr +org.junit.platform.commons.util.ExceptionUtils +java.io.StringWriter +org.junit.platform.launcher.listeners.discovery.AbortOnFailureLauncherDiscoveryListener$$Lambda/0x00003fc0010af800 +org.junit.platform.launcher.core.DiscoveryIssueNotifier +org.junit.platform.engine.DiscoveryIssue$Severity +org.junit.platform.launcher.core.LauncherDiscoveryResult$EngineResultInfo +org.junit.platform.launcher.core.EngineFilterer$$Lambda/0x00003fc0010b0238 +org.junit.platform.launcher.core.EngineFilterer$$Lambda/0x00003fc0010b0480 +org.junit.platform.launcher.core.EngineFilterer$$Lambda/0x00003fc0010b06d8 +org.junit.platform.launcher.core.EngineFilterer$$Lambda/0x00003fc0010b0920 +org.junit.platform.launcher.core.EngineFilterer$$Lambda/0x00003fc0010b0b68 +java.util.SortedSet +java.util.NavigableSet +java.util.TreeSet +org.junit.platform.launcher.core.EngineFilterer$$Lambda/0x00003fc0010b0dc8 +java.util.SortedMap +java.util.NavigableMap +java.util.TreeMap +org.junit.platform.launcher.core.EngineFilterer$$Lambda/0x00003fc0010b0ff0 +java.util.AbstractSequentialList +java.util.LinkedList +java.lang.invoke.LambdaForm$DMH/0x00003fc0010b4000 +org.junit.platform.launcher.core.EngineDiscoveryOrchestrator$$Lambda/0x00003fc0010b1248 +org.junit.platform.launcher.core.EngineDiscoveryOrchestrator$$Lambda/0x00003fc0010b1478 +org.junit.platform.launcher.core.EngineDiscoveryOrchestrator$$Lambda/0x00003fc0010b16b8 +java.lang.invoke.LambdaForm$DMH/0x00003fc0010b4400 +org.junit.platform.launcher.core.EngineDiscoveryOrchestrator$$Lambda/0x00003fc0010b18f0 +org.junit.platform.engine.TestDescriptor$$Lambda/0x00003fc0010b1b18 +org.junit.platform.launcher.core.LauncherDiscoveryResult +org.junit.platform.launcher.listeners.discovery.CompositeLauncherDiscoveryListener$$Lambda/0x00003fc0010b1fd0 +org.junit.platform.launcher.core.LauncherPhase$$Lambda/0x00003fc0010b2210 +org.junit.platform.engine.ConfigurationParameters$$Lambda/0x00003fc0010b2458 +org.junit.platform.launcher.core.LauncherDiscoveryResult$$Lambda/0x00003fc0010b26a8 +org.junit.platform.launcher.core.LauncherDiscoveryResult$$Lambda/0x00003fc0010b2900 +org.junit.platform.launcher.TestPlan$$Lambda/0x00003fc0010b2b48 +org.junit.platform.launcher.TestPlan$$Lambda/0x00003fc0010b2d78 +org.junit.platform.launcher.TestIdentifier +org.junit.platform.launcher.TestIdentifier$SerializedForm +java.io.ObjectStreamClass$Caches +java.io.ClassCache +java.io.ObjectStreamClass$Caches$1 +java.io.ClassCache$1 +java.io.ObjectStreamClass$Caches$2 +java.lang.ClassValue$ClassValueMap +java.io.Externalizable +java.lang.invoke.DirectMethodHandle$StaticAccessor +jdk.internal.reflect.FieldAccessor +jdk.internal.reflect.FieldAccessorImpl +jdk.internal.reflect.MethodHandleFieldAccessorImpl +jdk.internal.reflect.MethodHandleLongFieldAccessorImpl +java.lang.invoke.LambdaForm$DMH/0x00003fc0010b4800 +java.lang.invoke.LambdaForm$MH/0x00003fc0010b4c00 +java.util.ComparableTimSort +java.io.ObjectOutput +java.io.ObjectStreamConstants +java.io.ObjectOutputStream +java.io.ObjectInput +java.io.ObjectInputStream +java.lang.Class$$Lambda/0x00003fc001038638 +java.util.stream.Collectors$$Lambda/0x800000046 +java.util.stream.Collectors$$Lambda/0x80000003e +java.util.stream.Collectors$$Lambda/0x800000041 +java.util.stream.Collectors$$Lambda/0x800000043 +java.lang.CloneNotSupportedException +java.io.ClassCache$CacheRef +java.lang.ClassValue$RemovalToken +java.io.ObjectStreamClass$FieldReflectorKey +java.io.ObjectStreamClass$FieldReflector +jdk.internal.event.Event +jdk.internal.event.SerializationMisdeclarationEvent +org.junit.platform.launcher.TestIdentifier$$Lambda/0x00003fc0010b33f0 +org.junit.platform.launcher.TestPlan$$Lambda/0x00003fc0010b3638 +org.junit.jupiter.engine.descriptor.MethodBasedTestDescriptor$$Lambda/0x00003fc0010b3880 +org.junit.jupiter.engine.descriptor.MethodBasedTestDescriptor$$Lambda/0x00003fc0010b3ac0 +software.amazon.lambda.powertools.metadata.internal.LambdaMetadataHttpClientTest +com.github.tomakehurst.wiremock.junit5.WireMockTest +org.junit.jupiter.api.extension.ExtendWith +jdk.proxy2.$Proxy8 +sun.reflect.annotation.AnnotationParser$$Lambda/0x00003fc001039cc0 +org.junit.jupiter.api.extension.ParameterResolver +org.junit.jupiter.api.extension.BeforeEachCallback +org.junit.jupiter.api.extension.BeforeAllCallback +org.junit.jupiter.api.extension.AfterEachCallback +org.junit.jupiter.api.extension.AfterAllCallback +com.github.tomakehurst.wiremock.core.Admin +com.github.tomakehurst.wiremock.junit.Stubbing +com.github.tomakehurst.wiremock.junit.DslWrapper +com.github.tomakehurst.wiremock.junit5.WireMockExtension +jdk.proxy2.$Proxy9 +org.junit.jupiter.api.extension.Extensions +software.amazon.lambda.powertools.metadata.internal.LambdaMetadataHttpClient +software.amazon.lambda.powertools.metadata.internal.LambdaMetadataHttpClientTest$3 +software.amazon.lambda.powertools.metadata.internal.LambdaMetadataHttpClientTest$1 +software.amazon.lambda.powertools.metadata.internal.LambdaMetadataHttpClientTest$2 +com.github.tomakehurst.wiremock.junit5.WireMockRuntimeInfo +org.junit.platform.commons.util.ClassUtils$$Lambda/0x00003fc0010b86b0 +software.amazon.lambda.powertools.metadata.LambdaMetadataClientConcurrencyTest +software.amazon.lambda.powertools.metadata.LambdaMetadata +jdk.proxy2.$Proxy10 +jdk.proxy2.$Proxy11 +software.amazon.lambda.powertools.metadata.LambdaMetadataClientTest +software.amazon.lambda.powertools.metadata.exception.LambdaMetadataExceptionTest +org.apache.maven.surefire.api.util.TestsToRun +org.apache.maven.surefire.api.util.DefaultRunOrderCalculator +java.util.random.RandomGenerator +java.util.Random +org.apache.maven.surefire.api.util.CloseableIterator +org.apache.maven.surefire.api.util.TestsToRun$ClassesIterator +java.util.NoSuchElementException +org.apache.maven.surefire.junitplatform.JUnitPlatformProvider$$Lambda/0x00003fc0010ba040 +org.apache.maven.surefire.junitplatform.JUnitPlatformProvider$$Lambda/0x00003fc0010ba270 +org.junit.platform.launcher.core.LauncherDiscoveryRequestBuilder$$Lambda/0x00003fc0010ba4b0 +org.junit.platform.launcher.core.InterceptingLauncher$$Lambda/0x00003fc0010ba6f0 +org.junit.platform.launcher.core.EngineExecutionOrchestrator$$Lambda/0x00003fc0010ba920 +org.junit.platform.launcher.core.CompositeTestExecutionListener$EagerTestExecutionListener +org.junit.platform.launcher.core.CompositeTestExecutionListener$$Lambda/0x00003fc0010bad68 +org.junit.platform.launcher.core.CompositeTestExecutionListener$$Lambda/0x00003fc0010bafc8 +org.junit.platform.engine.reporting.ReportEntry +java.lang.invoke.LambdaForm$DMH/0x00003fc0010bc000 +org.junit.platform.launcher.core.EngineExecutionOrchestrator$$Lambda/0x00003fc0010bb430 +org.junit.platform.launcher.core.StreamInterceptingTestExecutionListener +org.junit.platform.launcher.core.EngineExecutionOrchestrator$$Lambda/0x00003fc0010bb950 +org.junit.platform.engine.EngineExecutionListener$1 +org.junit.platform.launcher.core.IterationOrder +org.junit.platform.launcher.core.IterationOrder$1 +org.junit.platform.launcher.core.IterationOrder$2 +org.junit.platform.launcher.core.CompositeTestExecutionListener$$Lambda/0x00003fc0010be908 +org.junit.platform.launcher.core.CompositeTestExecutionListener$$Lambda/0x00003fc0010beb48 +org.junit.platform.launcher.core.CompositeTestExecutionListener$$Lambda/0x00003fc0010bed78 +org.junit.platform.launcher.core.CompositeEngineExecutionListener +org.junit.platform.launcher.core.ListenerRegistry$$Lambda/0x00003fc0010bf240 +org.junit.platform.launcher.core.ExecutionListenerAdapter +org.junit.platform.launcher.core.DelegatingEngineExecutionListener +org.junit.platform.launcher.core.StackTracePruningEngineExecutionListener +org.junit.platform.launcher.core.EngineExecutionOrchestrator$$Lambda/0x00003fc0010bfc20 +org.junit.platform.launcher.core.OutcomeDelayingEngineExecutionListener +org.junit.jupiter.engine.config.CachingJupiterConfiguration$$Lambda/0x00003fc0010bd2a0 +org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService +org.junit.jupiter.engine.execution.JupiterEngineExecutionContext +org.junit.jupiter.engine.execution.LauncherStoreFacade +org.junit.jupiter.api.extension.ExtensionContext$Store +org.junit.jupiter.engine.execution.LauncherStoreFacade$$Lambda/0x00003fc0010bc800 +org.junit.jupiter.engine.execution.JupiterEngineExecutionContext$State +org.junit.platform.engine.support.hierarchical.ThrowableCollector$Factory +org.junit.platform.engine.support.hierarchical.ThrowableCollector +org.junit.jupiter.engine.support.JupiterThrowableCollectorFactory +org.junit.jupiter.engine.support.OpenTest4JAndJUnit4AwareThrowableCollector +org.junit.jupiter.engine.JupiterTestEngine$$Lambda/0x00003fc0010c0458 +org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor +org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutorService$TestTask +org.junit.platform.engine.support.hierarchical.NodeTreeWalker +org.junit.platform.engine.support.hierarchical.LockManager +org.junit.platform.engine.support.hierarchical.ResourceLock +java.util.concurrent.locks.ReadWriteLock +org.junit.platform.engine.support.hierarchical.SingleLock +org.junit.platform.engine.support.hierarchical.ExclusiveResource +org.junit.platform.engine.support.hierarchical.ExclusiveResource$LockMode +org.junit.platform.engine.support.hierarchical.ExclusiveResource$$Lambda/0x00003fc0010c1a18 +org.junit.platform.engine.support.hierarchical.ExclusiveResource$$Lambda/0x00003fc0010c1c60 +java.util.Comparator$$Lambda/0x00003fc00103a360 +java.lang.invoke.LambdaForm$DMH/0x00003fc0010c4000 +java.util.Comparator$$Lambda/0x00003fc00103a608 +org.junit.platform.engine.support.hierarchical.ExclusiveResource$$Lambda/0x00003fc0010c1ea8 +org.junit.platform.engine.support.hierarchical.LockManager$$Lambda/0x00003fc0010c20f0 +java.util.concurrent.locks.ReentrantReadWriteLock +java.util.concurrent.locks.AbstractQueuedLongSynchronizer +java.util.concurrent.locks.ReentrantReadWriteLock$Sync +java.util.concurrent.locks.ReentrantReadWriteLock$NonfairSync +java.util.concurrent.locks.ReentrantReadWriteLock$Sync$ThreadLocalHoldCounter +java.util.concurrent.locks.ReentrantReadWriteLock$ReadLock +java.util.concurrent.locks.ReentrantReadWriteLock$WriteLock +org.junit.platform.commons.util.CollectionUtils$$Lambda/0x00003fc0010c2338 +org.junit.platform.engine.support.hierarchical.NodeUtils +org.junit.platform.engine.support.hierarchical.NodeUtils$1 +org.junit.platform.engine.support.hierarchical.NodeExecutionAdvisor +org.junit.platform.engine.support.hierarchical.NodeTreeWalker$$Lambda/0x00003fc0010c2c88 +org.junit.platform.engine.support.hierarchical.NopLock +org.junit.jupiter.api.parallel.ResourceLocksProvider +org.junit.jupiter.engine.descriptor.ClassTestDescriptor$$Lambda/0x00003fc0010c3368 +org.junit.platform.engine.support.hierarchical.NodeTreeWalker$$Lambda/0x00003fc0010c35b8 +org.junit.jupiter.engine.descriptor.MethodBasedTestDescriptor$$Lambda/0x00003fc0010c37f8 +org.junit.jupiter.engine.descriptor.MethodBasedTestDescriptor$$Lambda/0x00003fc0010c3a28 +org.junit.jupiter.engine.descriptor.ResourceLockAware$1 +org.junit.jupiter.api.parallel.ResourceLockTarget +java.util.ArrayDeque$DeqSpliterator +org.junit.jupiter.engine.descriptor.ResourceLockAware$$Lambda/0x00003fc0010c6450 +org.junit.jupiter.engine.descriptor.ResourceLockAware$$Lambda/0x00003fc0010c6698 +org.junit.jupiter.engine.descriptor.ResourceLockAware$$Lambda/0x00003fc0010c68e8 +org.junit.platform.engine.support.hierarchical.NodeTestTaskContext +org.junit.platform.engine.support.hierarchical.NodeTestTask +org.junit.platform.engine.support.hierarchical.Node$DynamicTestExecutor +org.junit.platform.engine.support.hierarchical.NodeTestTask$$Lambda/0x00003fc0010c71d8 +org.opentest4j.IncompleteExecutionException +org.opentest4j.TestAbortedException +org.junit.jupiter.engine.support.OpenTest4JAndJUnit4AwareThrowableCollector$$Lambda/0x00003fc0010c78d0 +org.junit.platform.commons.util.UnrecoverableExceptions +org.junit.jupiter.engine.support.OpenTest4JAndJUnit4AwareThrowableCollector$$Lambda/0x00003fc0010c7d40 +org.junit.platform.engine.support.hierarchical.ThrowableCollector$Executable +org.junit.platform.engine.support.hierarchical.NodeTestTask$$Lambda/0x00003fc0010c5208 +org.junit.jupiter.engine.extension.MutableExtensionRegistry +org.junit.jupiter.engine.extension.MutableExtensionRegistry$Entry +org.junit.jupiter.api.extension.ExecutionCondition +org.junit.jupiter.engine.extension.DisabledCondition +org.junit.jupiter.api.extension.TestInstancePreDestroyCallback +org.junit.jupiter.engine.extension.AutoCloseExtension +org.junit.jupiter.engine.extension.TimeoutExtension +org.junit.jupiter.api.Timeout +org.junit.jupiter.api.extension.ExtensionContext$Namespace +org.junit.jupiter.api.extension.TestTemplateInvocationContextProvider +org.junit.jupiter.engine.extension.RepeatedTestExtension +org.junit.jupiter.api.extension.TestTemplateInvocationContext +org.junit.jupiter.engine.extension.TestInfoParameterResolver +org.junit.jupiter.api.TestInfo +org.junit.jupiter.engine.extension.TestReporterParameterResolver +org.junit.jupiter.api.TestReporter +org.junit.jupiter.engine.extension.MutableExtensionRegistry$$Lambda/0x00003fc0010c9168 +org.junit.jupiter.engine.extension.MutableExtensionRegistry$$Lambda/0x00003fc0010c93a8 +org.junit.jupiter.engine.extension.MutableExtensionRegistry$$Lambda/0x00003fc0010c95e8 +org.junit.jupiter.engine.extension.MutableExtensionRegistry$Entry$$Lambda/0x00003fc0010c9818 +org.junit.jupiter.engine.extension.TempDirectory +org.junit.jupiter.api.extension.AnnotatedElementContext +org.junit.jupiter.engine.extension.TempDirectory$Scope +org.junit.jupiter.engine.config.CachingJupiterConfiguration$$Lambda/0x00003fc0010ca148 +org.junit.jupiter.engine.config.CachingJupiterConfiguration$$Lambda/0x00003fc0010ca398 +org.junit.jupiter.engine.extension.ExtensionContextInternal +org.junit.jupiter.engine.descriptor.AbstractExtensionContext +org.junit.jupiter.engine.descriptor.JupiterEngineExtensionContext +org.junit.jupiter.api.extension.ExecutableInvoker +org.junit.jupiter.engine.execution.DefaultExecutableInvoker +org.junit.jupiter.engine.descriptor.AbstractExtensionContext$$Lambda/0x00003fc0010cb650 +org.junit.jupiter.engine.descriptor.AbstractExtensionContext$$Lambda/0x00003fc0010cb898 +org.junit.jupiter.engine.descriptor.AbstractExtensionContext$$Lambda/0x00003fc0010cbac0 +org.junit.jupiter.engine.execution.NamespaceAwareStore +org.junit.jupiter.api.extension.ExtensionContextException +org.junit.platform.engine.support.store.Namespace +java.lang.invoke.LambdaForm$DMH/0x00003fc0010d0000 +org.junit.jupiter.engine.descriptor.AbstractExtensionContext$$Lambda/0x00003fc0010cc448 +org.junit.jupiter.engine.execution.JupiterEngineExecutionContext$Builder +org.junit.platform.engine.support.hierarchical.NodeTestTask$$Lambda/0x00003fc0010cc8b8 +org.junit.platform.engine.support.hierarchical.Node$SkipResult +org.junit.platform.launcher.core.CompositeEngineExecutionListener$$Lambda/0x00003fc0010ccd10 +org.junit.platform.launcher.core.CompositeEngineExecutionListener$$Lambda/0x00003fc0010ccf50 +org.junit.platform.launcher.core.CompositeEngineExecutionListener$$Lambda/0x00003fc0010cd180 +org.junit.platform.launcher.TestPlan$$Lambda/0x00003fc0010cd3c0 +org.junit.platform.launcher.TestPlan$$Lambda/0x00003fc0010cd5e8 +org.junit.platform.launcher.core.CompositeTestExecutionListener$$Lambda/0x00003fc0010cd818 +org.junit.platform.launcher.core.CompositeTestExecutionListener$$Lambda/0x00003fc0010cda58 +org.junit.platform.launcher.core.CompositeTestExecutionListener$$Lambda/0x00003fc0010cdc88 +org.junit.platform.launcher.core.CompositeTestExecutionListener$$Lambda/0x00003fc0010cdec8 +org.junit.platform.engine.UniqueIdFormat$$Lambda/0x00003fc0010ce0f8 +org.apache.maven.surefire.junitplatform.RunListenerAdapter$$Lambda/0x00003fc0010ce348 +org.junit.platform.engine.support.hierarchical.NodeTestTask$$Lambda/0x00003fc0010ce5a8 +org.junit.platform.engine.support.hierarchical.Node$Invocation +org.junit.platform.engine.support.hierarchical.NodeTestTask$$Lambda/0x00003fc0010ce9e0 +org.junit.platform.engine.support.hierarchical.NodeTestTask$$Lambda/0x00003fc0010cec10 +org.junit.platform.engine.support.hierarchical.NodeTestTask$$Lambda/0x00003fc0010cee40 +org.junit.platform.engine.support.hierarchical.NodeTestTask$$Lambda/0x00003fc0010cf090 +org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor +java.util.concurrent.CancellationException +org.junit.platform.engine.support.hierarchical.NodeTestTask$$Lambda/0x00003fc0010cf510 +org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService$$Lambda/0x00003fc0010cf750 +org.junit.jupiter.engine.descriptor.ExtensionUtils +java.util.function.ToIntFunction +org.junit.jupiter.engine.descriptor.ExtensionUtils$$Lambda/0x00003fc0010cfb98 +java.util.Comparator$$Lambda/0x00003fc00103c2c0 +org.junit.jupiter.engine.descriptor.ExtensionUtils$$Lambda/0x00003fc0010d4000 +org.junit.jupiter.engine.descriptor.ExtensionUtils$$Lambda/0x00003fc0010d4258 +org.junit.jupiter.engine.descriptor.ExtensionUtils$$Lambda/0x00003fc0010d44a0 +org.junit.jupiter.engine.extension.MutableExtensionRegistry$LateInitEntry +org.junit.jupiter.engine.extension.MutableExtensionRegistry$$Lambda/0x00003fc0010d4938 +org.junit.jupiter.engine.descriptor.ExtensionUtils$$Lambda/0x00003fc0010d4b78 +com.fasterxml.jackson.core.Versioned +com.fasterxml.jackson.core.TreeCodec +com.fasterxml.jackson.core.ObjectCodec +com.fasterxml.jackson.databind.ObjectMapper +org.junit.platform.commons.util.ReflectionUtils$$Lambda/0x00003fc0010d5f48 +org.junit.platform.commons.util.ReflectionUtils$$Lambda/0x00003fc0010d61e8 +org.junit.platform.commons.util.ReflectionUtils$$Lambda/0x00003fc0010d6440 +org.junit.platform.commons.util.ReflectionUtils$$Lambda/0x00003fc0010d6668 +org.junit.platform.commons.util.ReflectionUtils$$Lambda/0x00003fc0010d68c8 +org.junit.platform.commons.util.ReflectionUtils$$Lambda/0x00003fc0010d6af0 +org.junit.platform.commons.util.ReflectionUtils$$Lambda/0x00003fc0010d6d50 +java.util.stream.SortedOps +java.util.stream.SortedOps$OfRef +org.junit.jupiter.engine.descriptor.ExtensionUtils$$Lambda/0x00003fc0010d6f78 +java.util.stream.SortedOps$AbstractRefSortingSink +java.util.stream.SortedOps$RefSortingSink +java.util.stream.SortedOps$RefSortingSink$$Lambda/0x00003fc00103d228 +org.junit.jupiter.api.extension.TestInstanceFactory +org.junit.jupiter.engine.extension.MutableExtensionRegistry$$Lambda/0x00003fc0010d73c0 +org.junit.jupiter.engine.extension.MutableExtensionRegistry$$Lambda/0x00003fc0010d7608 +org.junit.jupiter.engine.extension.MutableExtensionRegistry$$Lambda/0x00003fc0010d7868 +org.junit.jupiter.engine.extension.ExtensionRegistry$$Lambda/0x00003fc0010d7ab8 +org.junit.platform.commons.util.ReflectionUtils$$Lambda/0x00003fc0010d7ce0 +org.junit.platform.commons.util.ReflectionUtils$$Lambda/0x00003fc0010d2000 +org.junit.platform.commons.util.ReflectionUtils$$Lambda/0x00003fc0010d2228 +java.lang.reflect.Executable$ParameterData +org.junit.jupiter.engine.descriptor.ExtensionUtils$$Lambda/0x00003fc0010d2458 +org.junit.jupiter.engine.descriptor.ExtensionUtils$$Lambda/0x00003fc0010d26a8 +org.junit.jupiter.engine.descriptor.ExtensionUtils$$Lambda/0x00003fc0010d28f0 +org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor$$Lambda/0x00003fc0010d2b30 +org.junit.jupiter.engine.execution.BeforeEachMethodAdapter +org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor$$Lambda/0x00003fc0010d2f78 +org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor$$Lambda/0x00003fc0010d31c8 +org.junit.jupiter.engine.execution.AfterEachMethodAdapter +org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor$$Lambda/0x00003fc0010d3610 +org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor$$Lambda/0x00003fc0010d3860 +org.junit.jupiter.engine.descriptor.ExtensionUtils$$Lambda/0x00003fc0010d3aa0 +org.junit.jupiter.engine.descriptor.ExtensionUtils$$Lambda/0x00003fc0010d3cf8 +org.junit.jupiter.api.extension.RegisterExtension +org.junit.jupiter.engine.descriptor.ClassExtensionContext +org.junit.jupiter.engine.execution.TestInstancesProvider +org.junit.jupiter.api.extension.TestInstances +org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor$$Lambda/0x00003fc0010d1b10 +org.junit.jupiter.engine.config.CachingJupiterConfiguration$$Lambda/0x00003fc0010d1d50 +org.junit.platform.commons.util.ClassNamePatternFilterUtils$$Lambda/0x00003fc0010d0800 +org.junit.platform.commons.util.ClassNamePatternFilterUtils$FilterType +org.junit.platform.commons.util.ClassNamePatternFilterUtils$$Lambda/0x00003fc0010d0400 +org.junit.platform.commons.util.ClassNamePatternFilterUtils$$Lambda/0x00003fc0010d8000 +org.junit.platform.commons.util.ClassNamePatternFilterUtils$$Lambda/0x00003fc0010d8248 +org.junit.platform.commons.util.ClassNamePatternFilterUtils$$Lambda/0x00003fc0010d8498 +org.junit.jupiter.engine.execution.ConditionEvaluator$$Lambda/0x00003fc0010d86f0 +org.junit.jupiter.engine.execution.ConditionEvaluator$$Lambda/0x00003fc0010d8940 +org.junit.jupiter.api.Disabled +org.junit.jupiter.engine.extension.DisabledCondition$$Lambda/0x00003fc0010d8da0 +org.junit.jupiter.engine.execution.ConditionEvaluator$$Lambda/0x00003fc0010d8ff0 +org.junit.platform.engine.UniqueIdFormat$$Lambda/0x00003fc0010d9220 +java.lang.invoke.LambdaForm$DMH/0x00003fc0010dc000 +org.junit.platform.engine.UniqueIdFormat$$Lambda/0x00003fc0010d9470 +java.lang.invoke.LambdaForm$DMH/0x00003fc0010dc400 +java.net.URLDecoder +org.apache.maven.surefire.junitplatform.RunListenerAdapter$$Lambda/0x00003fc0010d96a0 +org.apache.maven.surefire.junitplatform.RunListenerAdapter$$Lambda/0x00003fc0010d9900 +org.apache.maven.surefire.junitplatform.RunListenerAdapter$$Lambda/0x00003fc0010d9b60 +org.apache.maven.surefire.junitplatform.RunListenerAdapter$$Lambda/0x00003fc0010d9dc0 +org.apache.maven.surefire.junitplatform.RunListenerAdapter$$Lambda/0x00003fc0010da010 +org.apache.maven.surefire.junitplatform.RunListenerAdapter$$Lambda/0x00003fc0010da270 +org.apache.maven.surefire.junitplatform.RunListenerAdapter$$Lambda/0x00003fc0010da4b8 +org.apache.maven.surefire.junitplatform.RunListenerAdapter$$Lambda/0x00003fc0010da718 +org.apache.maven.surefire.junitplatform.RunListenerAdapter$$Lambda/0x00003fc0010da968 +org.apache.maven.surefire.junitplatform.RunListenerAdapter$ResultDisplay +org.apache.maven.surefire.api.report.SimpleReportEntry +org.apache.maven.surefire.api.util.internal.ClassMethod +org.apache.maven.surefire.report.ClassMethodIndexer$$Lambda/0x00003fc0010db318 +org.apache.maven.surefire.api.util.internal.ImmutableMap +org.apache.maven.surefire.booter.spi.EventChannelEncoder$StackTrace +java.nio.StringCharBuffer +org.junit.jupiter.engine.descriptor.CallbackSupport$CallbackInvoker +org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor$$Lambda/0x00003fc0010de000 +org.junit.jupiter.engine.descriptor.CallbackSupport +org.junit.jupiter.engine.descriptor.CallbackSupport$$Lambda/0x00003fc0010de438 +org.junit.jupiter.engine.extension.TimeoutDuration +java.time.temporal.TemporalUnit +org.junit.jupiter.engine.extension.TimeoutExtension$$Lambda/0x00003fc0010de898 +org.junit.jupiter.engine.extension.TimeoutExtension$$Lambda/0x00003fc0010deae0 +org.junit.jupiter.api.Timeout$ThreadMode +org.junit.jupiter.engine.extension.TimeoutExtension$$Lambda/0x00003fc0010def70 +org.junit.jupiter.engine.extension.TimeoutExtension$$Lambda/0x00003fc0010df1b8 +org.junit.jupiter.engine.extension.TempDirectory$$Lambda/0x00003fc0010df3f8 +org.junit.jupiter.engine.extension.TempDirectory$$Lambda/0x00003fc0010df658 +org.junit.jupiter.engine.extension.TempDirectory$$Lambda/0x00003fc0010df898 +org.junit.jupiter.engine.extension.TempDirectory$$Lambda/0x00003fc0010dfaf0 +org.junit.jupiter.engine.execution.NamespaceAwareStore$$Lambda/0x00003fc0010dfd40 +org.junit.platform.engine.support.store.NamespacedHierarchicalStore$CompositeKey +org.junit.platform.engine.support.store.NamespacedHierarchicalStore$StoredValue +org.junit.platform.engine.support.store.NamespacedHierarchicalStore$$Lambda/0x00003fc0010dd430 +org.junit.platform.engine.support.store.NamespacedHierarchicalStore$MemoizingSupplier +org.junit.platform.engine.support.store.NamespacedHierarchicalStore$$Lambda/0x00003fc0010dd8b8 +org.junit.jupiter.engine.extension.TempDirectory$$Lambda/0x00003fc0010ddae8 +org.junit.platform.engine.support.store.NamespacedHierarchicalStore$MemoizingSupplier$Failure +org.junit.jupiter.api.io.TempDir +org.junit.platform.commons.util.AnnotationUtils$$Lambda/0x00003fc0010dcc20 +org.junit.jupiter.engine.extension.TempDirectory$$Lambda/0x00003fc0010e0000 +org.junit.jupiter.engine.descriptor.ClassExtensionContext$$Lambda/0x00003fc0010e0240 +org.junit.jupiter.engine.descriptor.MethodExtensionContext +org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor$$Lambda/0x00003fc0010e0980 +org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor$$Lambda/0x00003fc0010e0bb0 +org.junit.jupiter.engine.execution.ExtensionContextSupplier +org.junit.jupiter.engine.config.CachingJupiterConfiguration$$Lambda/0x00003fc0010e0fe8 +org.junit.jupiter.engine.execution.ExtensionContextSupplier$ScopeBasedExtensionContextSupplier +org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor$$Lambda/0x00003fc0010e1670 +org.junit.jupiter.engine.descriptor.DefaultTestInstanceFactoryContext +org.junit.jupiter.api.extension.TestInstancePreConstructCallback +org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor$$Lambda/0x00003fc0010e1d08 +java.lang.invoke.LambdaForm$DMH/0x00003fc0010e4000 +org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor$$Lambda/0x00003fc0010e1f48 +org.junit.jupiter.engine.execution.ParameterResolutionUtils +org.junit.jupiter.api.extension.ParameterResolutionException +org.junit.jupiter.api.extension.ParameterContext +org.junit.jupiter.engine.execution.ConstructorInvocation +org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptorCall +org.junit.jupiter.engine.execution.InterceptingExecutableInvoker$$Lambda/0x00003fc0010e2c98 +org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation +org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation +com.fasterxml.jackson.databind.introspect.ClassIntrospector +com.fasterxml.jackson.databind.introspect.BasicClassIntrospector +com.fasterxml.jackson.databind.Module$SetupContext +com.fasterxml.jackson.databind.DatabindContext +com.fasterxml.jackson.databind.DeserializationContext +com.fasterxml.jackson.databind.deser.DefaultDeserializationContext +com.fasterxml.jackson.databind.SerializerProvider +com.fasterxml.jackson.databind.ser.DefaultSerializerProvider +com.fasterxml.jackson.databind.introspect.VisibilityChecker +com.fasterxml.jackson.core.JacksonException +com.fasterxml.jackson.core.JsonProcessingException +com.fasterxml.jackson.databind.DatabindException +com.fasterxml.jackson.databind.JsonMappingException +com.fasterxml.jackson.core.TreeNode +com.fasterxml.jackson.databind.JsonSerializable +com.fasterxml.jackson.databind.JsonSerializable$Base +com.fasterxml.jackson.databind.JsonNode +com.fasterxml.jackson.databind.node.BaseJsonNode +com.fasterxml.jackson.databind.node.ValueNode +com.fasterxml.jackson.databind.node.NullNode +com.fasterxml.jackson.core.JsonParser +com.fasterxml.jackson.core.base.ParserMinimalBase +com.fasterxml.jackson.databind.node.TreeTraversingParser +com.fasterxml.jackson.core.JsonGenerator +com.fasterxml.jackson.databind.util.TokenBuffer +com.fasterxml.jackson.core.util.BufferRecycler$Gettable +com.fasterxml.jackson.core.io.SegmentedStringWriter +com.fasterxml.jackson.core.util.ByteArrayBuilder +com.fasterxml.jackson.core.type.ResolvedType +com.fasterxml.jackson.databind.JavaType +com.fasterxml.jackson.databind.type.TypeBase +com.fasterxml.jackson.databind.type.ArrayType +com.fasterxml.jackson.databind.type.CollectionLikeType +com.fasterxml.jackson.databind.type.CollectionType +com.fasterxml.jackson.databind.type.MapLikeType +com.fasterxml.jackson.databind.type.MapType +com.fasterxml.jackson.databind.jsontype.TypeResolverBuilder +com.fasterxml.jackson.databind.exc.MismatchedInputException +com.fasterxml.jackson.core.TokenStreamFactory +com.fasterxml.jackson.core.JsonFactory +com.fasterxml.jackson.databind.MappingJsonFactory +com.fasterxml.jackson.databind.jsontype.SubtypeResolver +com.fasterxml.jackson.databind.jsontype.impl.StdSubtypeResolver +com.fasterxml.jackson.databind.ser.DefaultSerializerProvider$Impl +com.fasterxml.jackson.databind.deser.DeserializerFactory +com.fasterxml.jackson.databind.deser.BasicDeserializerFactory +com.fasterxml.jackson.databind.deser.BeanDeserializerFactory +com.fasterxml.jackson.databind.deser.DefaultDeserializationContext$Impl +com.fasterxml.jackson.databind.ser.SerializerFactory +com.fasterxml.jackson.databind.ser.BasicSerializerFactory +com.fasterxml.jackson.databind.ser.BeanSerializerFactory +com.fasterxml.jackson.databind.AnnotationIntrospector +com.fasterxml.jackson.databind.introspect.JacksonAnnotationIntrospector +com.fasterxml.jackson.databind.introspect.AccessorNamingStrategy$Provider +com.fasterxml.jackson.databind.introspect.DefaultAccessorNamingStrategy$Provider +com.fasterxml.jackson.databind.jsontype.PolymorphicTypeValidator +com.fasterxml.jackson.databind.jsontype.PolymorphicTypeValidator$Base +com.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypeValidator +java.text.Format +java.text.DateFormat +com.fasterxml.jackson.databind.util.StdDateFormat +com.fasterxml.jackson.databind.introspect.NopAnnotationIntrospector +com.fasterxml.jackson.databind.introspect.AnnotationIntrospectorPair +com.fasterxml.jackson.databind.introspect.Annotated +com.fasterxml.jackson.databind.introspect.TypeResolutionContext +com.fasterxml.jackson.databind.introspect.AnnotatedClass +com.fasterxml.jackson.databind.introspect.AnnotatedMember +com.fasterxml.jackson.databind.introspect.AnnotatedWithParams +com.fasterxml.jackson.databind.introspect.AnnotatedMethod +com.fasterxml.jackson.databind.introspect.VirtualAnnotatedMember +com.fasterxml.jackson.databind.util.Named +com.fasterxml.jackson.databind.introspect.BeanPropertyDefinition +com.fasterxml.jackson.databind.util.SimpleBeanPropertyDefinition +com.fasterxml.jackson.databind.BeanProperty +com.fasterxml.jackson.databind.introspect.ConcreteBeanPropertyBase +com.fasterxml.jackson.databind.ser.PropertyWriter +com.fasterxml.jackson.databind.ser.BeanPropertyWriter +com.fasterxml.jackson.databind.ser.VirtualBeanPropertyWriter +com.fasterxml.jackson.databind.ser.impl.AttributePropertyWriter +com.fasterxml.jackson.databind.annotation.JsonSerialize +com.fasterxml.jackson.annotation.JsonView +com.fasterxml.jackson.annotation.JsonFormat +com.fasterxml.jackson.annotation.JsonTypeInfo +com.fasterxml.jackson.annotation.JsonRawValue +com.fasterxml.jackson.annotation.JsonUnwrapped +com.fasterxml.jackson.annotation.JsonBackReference +com.fasterxml.jackson.annotation.JsonManagedReference +com.fasterxml.jackson.databind.annotation.JsonDeserialize +com.fasterxml.jackson.annotation.JsonMerge +com.fasterxml.jackson.databind.ext.Java7Support +java.lang.IllegalAccessError +com.fasterxml.jackson.databind.ext.Java7SupportImpl +com.fasterxml.jackson.databind.util.ClassUtil +com.fasterxml.jackson.databind.util.ClassUtil$Ctor +java.lang.reflect.TypeVariable +java.lang.InstantiationException +java.lang.reflect.AnnotatedType +java.beans.Transient +java.beans.ConstructorProperties +com.fasterxml.jackson.databind.util.LookupCache +com.fasterxml.jackson.databind.util.LRUMap +com.fasterxml.jackson.databind.util.internal.PrivateMaxEntriesMap$Builder +com.fasterxml.jackson.databind.util.internal.PrivateMaxEntriesMap +com.fasterxml.jackson.databind.util.internal.Linked +java.io.ObjectStreamException +java.io.InvalidObjectException +com.fasterxml.jackson.databind.util.internal.LinkedDeque +com.fasterxml.jackson.databind.util.internal.PrivateMaxEntriesMap$DrainStatus +com.fasterxml.jackson.databind.util.internal.PrivateMaxEntriesMap$DrainStatus$1 +com.fasterxml.jackson.databind.util.internal.PrivateMaxEntriesMap$DrainStatus$2 +com.fasterxml.jackson.databind.util.internal.PrivateMaxEntriesMap$DrainStatus$3 +java.util.concurrent.atomic.AtomicLongArray +java.lang.invoke.VarHandleLongs$Array +java.util.concurrent.atomic.AtomicReferenceArray +java.lang.invoke.VarHandleReferences$Array +com.fasterxml.jackson.databind.cfg.BaseSettings +java.util.TimeZone +java.time.ZoneId +sun.util.calendar.ZoneInfo +sun.util.calendar.ZoneInfoFile +java.io.DataInputStream +jdk.internal.util.ByteArray +java.lang.invoke.VarHandleByteArrayAsShorts$ByteArrayViewVarHandle +java.lang.invoke.VarHandleByteArrayAsShorts$ArrayHandle +java.lang.invoke.VarHandleByteArrayAsChars$ByteArrayViewVarHandle +java.lang.invoke.VarHandleByteArrayAsChars$ArrayHandle +java.lang.invoke.VarHandleByteArrayAsInts$ByteArrayViewVarHandle +java.lang.invoke.VarHandleByteArrayAsInts$ArrayHandle +java.lang.invoke.VarHandleByteArrayAsFloats$ByteArrayViewVarHandle +java.lang.invoke.VarHandleByteArrayAsFloats$ArrayHandle +java.lang.invoke.VarHandleByteArrayAsLongs$ByteArrayViewVarHandle +java.lang.invoke.VarHandleByteArrayAsLongs$ArrayHandle +java.lang.invoke.VarHandleByteArrayAsDoubles$ByteArrayViewVarHandle +java.lang.invoke.VarHandleByteArrayAsDoubles$ArrayHandle +sun.util.calendar.ZoneInfoFile$ZoneOffsetTransitionRule +com.fasterxml.jackson.databind.type.TypeFactory +com.fasterxml.jackson.databind.type.SimpleType +com.fasterxml.jackson.databind.type.IdentityEqualityType +com.fasterxml.jackson.databind.type.PlaceholderForType +com.fasterxml.jackson.databind.type.ReferenceType +com.fasterxml.jackson.databind.type.IterationType +com.fasterxml.jackson.databind.type.ResolvedRecursiveType +com.fasterxml.jackson.databind.type.TypeParser +com.fasterxml.jackson.databind.type.TypeBindings +java.text.SimpleDateFormat +java.text.ParseException +java.util.Calendar +java.util.GregorianCalendar +java.text.AttributedCharacterIterator$Attribute +java.text.Format$Field +java.text.DateFormat$Field +sun.util.calendar.CalendarUtils +sun.util.calendar.ZoneInfoFile$Checksum +java.util.spi.LocaleServiceProvider +sun.util.spi.CalendarProvider +sun.util.locale.provider.LocaleProviderAdapter +sun.util.locale.provider.LocaleProviderAdapter$Type +sun.util.locale.provider.ResourceBundleBasedAdapter +sun.util.locale.provider.JRELocaleProviderAdapter +sun.util.cldr.CLDRLocaleProviderAdapter +sun.util.locale.provider.LocaleDataMetaInfo +sun.util.cldr.CLDRBaseLocaleDataMetaInfo +java.text.ParsePosition +sun.util.locale.LanguageTag +sun.util.locale.StringTokenIterator +sun.util.locale.InternalLocaleBuilder +sun.util.locale.InternalLocaleBuilder$CaseInsensitiveChar +sun.util.locale.BaseLocale$1InterningCache +jdk.internal.util.ReferencedKeyMap$1 +jdk.internal.util.SoftReferenceKey +java.util.Locale$LocaleCache +jdk.internal.module.ModulePatcher$PatchedModuleReader +sun.net.www.protocol.jrt.Handler +sun.util.resources.cldr.provider.CLDRLocaleDataMetaInfo +sun.util.locale.provider.AvailableLanguageTags +sun.util.locale.provider.CalendarProviderImpl +java.util.Calendar$Builder +sun.util.calendar.CalendarSystem +sun.util.calendar.CalendarSystem$GregorianHolder +sun.util.calendar.AbstractCalendar +sun.util.calendar.BaseCalendar +sun.util.calendar.Gregorian +sun.util.locale.provider.CalendarDataUtility +java.util.Locale$Builder +java.util.spi.CalendarDataProvider +sun.util.locale.provider.LocaleServiceProviderPool +java.text.spi.BreakIteratorProvider +java.text.spi.CollatorProvider +java.text.spi.DateFormatProvider +java.text.spi.DateFormatSymbolsProvider +java.text.spi.DecimalFormatSymbolsProvider +java.text.spi.NumberFormatProvider +java.util.spi.CurrencyNameProvider +java.util.spi.LocaleNameProvider +java.util.spi.TimeZoneNameProvider +sun.util.locale.provider.LocaleServiceProviderPool$LocalizedObjectGetter +sun.util.locale.provider.CalendarDataUtility$CalendarWeekParameterGetter +java.util.ResourceBundle$Control +java.util.ResourceBundle +java.util.ResourceBundle$Control$$Lambda/0x80000001e +java.util.ResourceBundle$SingleFormatControl +java.util.ResourceBundle$NoFallbackControl +java.util.ResourceBundle$Control$$Lambda/0x80000001d +sun.util.locale.provider.CalendarDataProviderImpl +sun.util.cldr.CLDRCalendarDataProviderImpl +sun.util.locale.provider.LocaleProviderAdapter$$Lambda/0x80000005b +sun.util.locale.provider.LocaleProviderAdapter$$Lambda/0x80000005d +sun.util.locale.provider.LocaleResources +sun.util.resources.LocaleData +sun.util.resources.Bundles$Strategy +sun.util.resources.LocaleData$LocaleDataStrategy +sun.util.resources.Bundles +sun.util.resources.Bundles$1 +jdk.internal.access.JavaUtilResourceBundleAccess +java.util.ResourceBundle$1 +java.util.ResourceBundle$2 +sun.util.resources.Bundles$CacheKey +sun.util.cldr.CLDRLocaleProviderAdapter$$Lambda/0x80000005a +java.util.ListResourceBundle +sun.util.resources.cldr.CalendarData +java.util.ResourceBundle$ResourceBundleProviderHelper +sun.util.resources.Bundles$CacheKeyReference +sun.util.resources.Bundles$BundleReference +sun.util.locale.provider.LocaleResources$ResourceReference +sun.util.calendar.CalendarDate +sun.util.calendar.BaseCalendar$Date +sun.util.calendar.Gregorian$Date +java.text.DateFormatSymbols +sun.util.locale.provider.DateFormatSymbolsProviderImpl +sun.text.resources.cldr.FormatData +sun.text.resources.cldr.FormatData_en +java.text.NumberFormat +sun.util.locale.provider.NumberFormatProviderImpl +java.text.DecimalFormatSymbols +sun.util.locale.provider.DecimalFormatSymbolsProviderImpl +java.lang.CharacterData00 +java.text.DecimalFormat +java.text.FieldPosition +java.text.DigitList +java.math.RoundingMode +java.util.Date +com.fasterxml.jackson.core.Base64Variants +com.fasterxml.jackson.core.Base64Variant +com.fasterxml.jackson.core.Base64Variant$PaddingReadBehaviour +com.fasterxml.jackson.databind.introspect.AccessorNamingStrategy +com.fasterxml.jackson.databind.introspect.DefaultAccessorNamingStrategy +com.fasterxml.jackson.databind.introspect.DefaultAccessorNamingStrategy$RecordNaming +com.fasterxml.jackson.databind.cfg.CacheProvider +com.fasterxml.jackson.databind.cfg.DefaultCacheProvider +com.fasterxml.jackson.core.io.DataOutputAsStream +com.fasterxml.jackson.core.TSFBuilder +com.fasterxml.jackson.core.JsonFactoryBuilder +com.fasterxml.jackson.core.async.NonBlockingInputFeeder +com.fasterxml.jackson.core.async.ByteBufferFeeder +com.fasterxml.jackson.core.base.ParserBase +com.fasterxml.jackson.core.json.JsonParserBase +com.fasterxml.jackson.core.json.async.NonBlockingJsonParserBase +com.fasterxml.jackson.core.json.async.NonBlockingUtf8JsonParserBase +com.fasterxml.jackson.core.json.async.NonBlockingByteBufferJsonParser +com.fasterxml.jackson.core.json.ReaderBasedJsonParser +com.fasterxml.jackson.core.json.UTF8DataInputJsonParser +com.fasterxml.jackson.core.base.GeneratorBase +com.fasterxml.jackson.core.json.JsonGeneratorImpl +com.fasterxml.jackson.core.json.WriterBasedJsonGenerator +com.fasterxml.jackson.core.json.UTF8JsonGenerator +com.fasterxml.jackson.core.io.UTF8Writer +java.io.CharArrayReader +com.fasterxml.jackson.core.async.ByteArrayFeeder +com.fasterxml.jackson.core.json.async.NonBlockingJsonParser +com.fasterxml.jackson.core.SerializableString +com.fasterxml.jackson.core.util.JacksonFeature +com.fasterxml.jackson.core.JsonFactory$Feature +com.fasterxml.jackson.core.JsonParser$Feature +com.fasterxml.jackson.core.JsonGenerator$Feature +com.fasterxml.jackson.core.io.SerializedString +com.fasterxml.jackson.core.io.JsonStringEncoder +com.fasterxml.jackson.core.io.CharTypes +com.fasterxml.jackson.core.sym.ByteQuadsCanonicalizer +com.fasterxml.jackson.core.exc.StreamConstraintsException +com.fasterxml.jackson.core.sym.ByteQuadsCanonicalizer$TableInfo +com.fasterxml.jackson.core.util.JsonRecyclerPools +com.fasterxml.jackson.core.util.RecyclerPool +com.fasterxml.jackson.core.util.RecyclerPool$ThreadLocalPoolBase +com.fasterxml.jackson.core.util.JsonRecyclerPools$ThreadLocalPool +com.fasterxml.jackson.core.util.RecyclerPool$WithPool +com.fasterxml.jackson.core.StreamReadConstraints +com.fasterxml.jackson.core.StreamWriteConstraints +com.fasterxml.jackson.core.ErrorReportConfiguration +com.fasterxml.jackson.core.sym.CharsToNameCanonicalizer +com.fasterxml.jackson.core.sym.CharsToNameCanonicalizer$TableInfo +com.fasterxml.jackson.core.sym.CharsToNameCanonicalizer$Bucket +com.fasterxml.jackson.databind.util.RootNameLookup +com.fasterxml.jackson.databind.introspect.ClassIntrospector$MixInResolver +com.fasterxml.jackson.databind.introspect.SimpleMixInResolver +com.fasterxml.jackson.databind.BeanDescription +com.fasterxml.jackson.databind.introspect.BasicBeanDescription +com.fasterxml.jackson.databind.cfg.MapperConfig +com.fasterxml.jackson.databind.cfg.MapperConfigBase +com.fasterxml.jackson.databind.SerializationConfig +com.fasterxml.jackson.databind.DeserializationConfig +com.fasterxml.jackson.databind.introspect.AnnotatedClassResolver +com.fasterxml.jackson.databind.introspect.AnnotationCollector +com.fasterxml.jackson.databind.introspect.AnnotationCollector$EmptyCollector +com.fasterxml.jackson.databind.util.Annotations +com.fasterxml.jackson.databind.introspect.AnnotationCollector$NoAnnotations +com.fasterxml.jackson.databind.introspect.AnnotatedClass$Creators +com.fasterxml.jackson.databind.introspect.AnnotatedConstructor +com.fasterxml.jackson.databind.cfg.ConfigOverrides +com.fasterxml.jackson.annotation.JacksonAnnotationValue +com.fasterxml.jackson.annotation.JsonInclude$Value +com.fasterxml.jackson.annotation.JsonInclude$Include +com.fasterxml.jackson.annotation.JsonSetter$Value +com.fasterxml.jackson.annotation.Nulls +com.fasterxml.jackson.databind.introspect.VisibilityChecker$Std +com.fasterxml.jackson.annotation.JsonAutoDetect$Visibility +com.fasterxml.jackson.databind.cfg.CoercionConfigs +com.fasterxml.jackson.databind.type.LogicalType +com.fasterxml.jackson.databind.cfg.CoercionAction +com.fasterxml.jackson.databind.cfg.CoercionConfig +com.fasterxml.jackson.databind.cfg.MutableCoercionConfig +com.fasterxml.jackson.databind.cfg.CoercionInputShape +com.fasterxml.jackson.databind.jsontype.DefaultBaseTypeLimitingValidator +com.fasterxml.jackson.core.PrettyPrinter +com.fasterxml.jackson.annotation.JsonFormat$Value +com.fasterxml.jackson.annotation.JsonFormat$Shape +com.fasterxml.jackson.annotation.JsonFormat$Features +com.fasterxml.jackson.databind.cfg.ConfigOverride +com.fasterxml.jackson.databind.cfg.ConfigOverride$Empty +com.fasterxml.jackson.databind.cfg.ConfigFeature +com.fasterxml.jackson.databind.MapperFeature +com.fasterxml.jackson.core.util.Instantiatable +com.fasterxml.jackson.core.util.DefaultPrettyPrinter +com.fasterxml.jackson.core.util.DefaultPrettyPrinter$Indenter +com.fasterxml.jackson.core.util.Separators +com.fasterxml.jackson.core.util.Separators$Spacing +com.fasterxml.jackson.core.util.DefaultPrettyPrinter$NopIndenter +com.fasterxml.jackson.core.util.DefaultPrettyPrinter$FixedSpaceIndenter +com.fasterxml.jackson.core.util.DefaultIndenter +com.fasterxml.jackson.databind.SerializationFeature +com.fasterxml.jackson.databind.cfg.DatatypeFeatures +com.fasterxml.jackson.databind.cfg.DatatypeFeatures$DefaultHolder +com.fasterxml.jackson.databind.cfg.DatatypeFeature +com.fasterxml.jackson.databind.cfg.EnumFeature +com.fasterxml.jackson.databind.cfg.JsonNodeFeature +com.fasterxml.jackson.databind.cfg.ContextAttributes +com.fasterxml.jackson.databind.cfg.ContextAttributes$Impl +com.fasterxml.jackson.databind.DeserializationFeature +com.fasterxml.jackson.databind.node.JsonNodeCreator +com.fasterxml.jackson.databind.node.JsonNodeFactory +com.fasterxml.jackson.databind.node.BooleanNode +com.fasterxml.jackson.databind.node.NumericNode +com.fasterxml.jackson.databind.node.FloatNode +com.fasterxml.jackson.databind.node.DoubleNode +com.fasterxml.jackson.databind.node.DecimalNode +com.fasterxml.jackson.databind.node.ShortNode +com.fasterxml.jackson.databind.node.IntNode +com.fasterxml.jackson.databind.node.LongNode +com.fasterxml.jackson.databind.node.BigIntegerNode +com.fasterxml.jackson.databind.node.TextNode +com.fasterxml.jackson.databind.node.BinaryNode +com.fasterxml.jackson.databind.node.POJONode +com.fasterxml.jackson.databind.node.MissingNode +com.fasterxml.jackson.databind.exc.InvalidDefinitionException +com.fasterxml.jackson.databind.exc.InvalidTypeIdException +com.fasterxml.jackson.databind.jsonFormatVisitors.JsonFormatVisitable +com.fasterxml.jackson.databind.JsonSerializer +com.fasterxml.jackson.databind.ser.ContextualSerializer +com.fasterxml.jackson.databind.ser.impl.TypeWrappedSerializer +com.fasterxml.jackson.databind.jsonschema.SchemaAware +com.fasterxml.jackson.databind.ser.std.StdSerializer +com.fasterxml.jackson.databind.ser.std.ToEmptyObjectSerializer +com.fasterxml.jackson.databind.ser.impl.UnknownSerializer +com.fasterxml.jackson.databind.ser.std.NullSerializer +com.fasterxml.jackson.databind.ser.impl.FailingSerializer +com.fasterxml.jackson.databind.ser.ResolvableSerializer +com.fasterxml.jackson.databind.ser.std.StdDelegatingSerializer +com.fasterxml.jackson.databind.node.ContainerNode +com.fasterxml.jackson.databind.node.ObjectNode +com.fasterxml.jackson.databind.ser.SerializerCache +com.fasterxml.jackson.databind.deser.NullValueProvider +com.fasterxml.jackson.databind.JsonDeserializer +com.fasterxml.jackson.databind.deser.impl.TypeWrappedDeserializer +com.fasterxml.jackson.databind.exc.PropertyBindingException +com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException +com.fasterxml.jackson.databind.exc.InvalidFormatException +com.fasterxml.jackson.databind.exc.ValueInstantiationException +com.fasterxml.jackson.databind.exc.MissingInjectableValueExcepion +com.fasterxml.jackson.databind.deser.UnresolvedForwardReference +com.fasterxml.jackson.databind.deser.ContextualDeserializer +com.fasterxml.jackson.databind.deser.AbstractDeserializer +com.fasterxml.jackson.databind.deser.ValueInstantiator$Gettable +com.fasterxml.jackson.databind.deser.std.StdDeserializer +com.fasterxml.jackson.databind.deser.std.StdScalarDeserializer +com.fasterxml.jackson.databind.deser.std.EnumDeserializer +com.fasterxml.jackson.databind.deser.std.ReferenceTypeDeserializer +com.fasterxml.jackson.databind.deser.std.AtomicReferenceDeserializer +com.fasterxml.jackson.databind.deser.std.StringArrayDeserializer +com.fasterxml.jackson.databind.deser.std.ContainerDeserializerBase +com.fasterxml.jackson.databind.deser.std.ObjectArrayDeserializer +com.fasterxml.jackson.databind.deser.std.EnumSetDeserializer +com.fasterxml.jackson.databind.deser.std.CollectionDeserializer +com.fasterxml.jackson.databind.deser.std.ArrayBlockingQueueDeserializer +com.fasterxml.jackson.databind.deser.std.StringCollectionDeserializer +com.fasterxml.jackson.databind.deser.ResolvableDeserializer +com.fasterxml.jackson.databind.deser.std.EnumMapDeserializer +com.fasterxml.jackson.databind.deser.std.MapDeserializer +com.fasterxml.jackson.databind.deser.std.UntypedObjectDeserializer +com.fasterxml.jackson.databind.deser.std.StringDeserializer +com.fasterxml.jackson.databind.deser.std.MapEntryDeserializer +com.fasterxml.jackson.databind.deser.std.TokenBufferDeserializer +com.fasterxml.jackson.databind.introspect.AnnotatedParameter +com.fasterxml.jackson.databind.deser.SettableBeanProperty +com.fasterxml.jackson.databind.deser.CreatorProperty +com.fasterxml.jackson.databind.deser.impl.UnsupportedTypeDeserializer +com.fasterxml.jackson.databind.deser.impl.ErrorThrowingDeserializer +com.fasterxml.jackson.annotation.ObjectIdGenerator +com.fasterxml.jackson.annotation.ObjectIdGenerators$Base +com.fasterxml.jackson.annotation.ObjectIdGenerators$PropertyGenerator +com.fasterxml.jackson.databind.deser.impl.PropertyBasedObjectIdGenerator +com.fasterxml.jackson.databind.deser.BeanDeserializerBase +com.fasterxml.jackson.databind.deser.BeanDeserializer +com.fasterxml.jackson.databind.deser.std.ThrowableDeserializer +com.fasterxml.jackson.databind.deser.impl.MethodProperty +com.fasterxml.jackson.databind.deser.impl.FieldProperty +com.fasterxml.jackson.databind.deser.impl.SetterlessProperty +com.fasterxml.jackson.databind.deser.Deserializers +com.fasterxml.jackson.databind.cfg.DeserializerFactoryConfig +com.fasterxml.jackson.databind.deser.BeanDeserializerModifier +com.fasterxml.jackson.databind.AbstractTypeResolver +com.fasterxml.jackson.databind.deser.ValueInstantiators +com.fasterxml.jackson.databind.deser.KeyDeserializers +com.fasterxml.jackson.databind.deser.std.StdKeyDeserializers +com.fasterxml.jackson.databind.KeyDeserializer +com.fasterxml.jackson.databind.deser.std.StdKeyDeserializer$DelegatingKD +com.fasterxml.jackson.databind.deser.std.StdKeyDeserializer +com.fasterxml.jackson.databind.deser.std.StdKeyDeserializer$EnumKD +com.fasterxml.jackson.databind.deser.std.StdKeyDeserializer$StringCtorKeyDeserializer +com.fasterxml.jackson.databind.deser.std.StdKeyDeserializer$StringFactoryKeyDeserializer +com.fasterxml.jackson.databind.deser.DeserializerCache +com.fasterxml.jackson.databind.deser.std.StdDelegatingDeserializer +com.fasterxml.jackson.databind.ser.std.SerializableSerializer +com.fasterxml.jackson.databind.ser.std.JsonValueSerializer +com.fasterxml.jackson.databind.ser.std.StdScalarSerializer +com.fasterxml.jackson.databind.ser.std.DateTimeSerializerBase +com.fasterxml.jackson.databind.ser.std.CalendarSerializer +com.fasterxml.jackson.databind.ser.std.DateSerializer +com.fasterxml.jackson.databind.ser.std.ByteBufferSerializer +com.fasterxml.jackson.databind.ser.std.InetAddressSerializer +com.fasterxml.jackson.databind.ser.std.InetSocketAddressSerializer +com.fasterxml.jackson.databind.ser.std.TimeZoneSerializer +com.fasterxml.jackson.databind.ser.std.ToStringSerializerBase +com.fasterxml.jackson.databind.ser.std.ToStringSerializer +com.fasterxml.jackson.databind.ser.std.NumberSerializer +com.fasterxml.jackson.databind.ser.std.StaticListSerializerBase +com.fasterxml.jackson.databind.ser.impl.IndexedStringListSerializer +com.fasterxml.jackson.databind.ser.ContainerSerializer +com.fasterxml.jackson.databind.ser.impl.StringCollectionSerializer +com.fasterxml.jackson.databind.ser.std.AsArraySerializerBase +com.fasterxml.jackson.databind.ser.std.CollectionSerializer +com.fasterxml.jackson.databind.ser.impl.IndexedListSerializer +com.fasterxml.jackson.databind.ser.std.EnumSetSerializer +com.fasterxml.jackson.databind.ser.std.MapSerializer +com.fasterxml.jackson.databind.ser.impl.MapEntrySerializer +com.fasterxml.jackson.databind.ser.std.ArraySerializerBase +com.fasterxml.jackson.databind.ser.impl.StringArraySerializer +com.fasterxml.jackson.databind.ser.std.ObjectArraySerializer +com.fasterxml.jackson.databind.ser.std.ReferenceTypeSerializer +com.fasterxml.jackson.databind.ser.impl.IteratorSerializer +com.fasterxml.jackson.databind.ser.std.IterableSerializer +com.fasterxml.jackson.databind.ser.std.EnumSerializer +com.fasterxml.jackson.databind.ser.impl.MapEntryAsPOJOSerializer +com.fasterxml.jackson.databind.ser.std.BeanSerializerBase +com.fasterxml.jackson.databind.ser.BeanSerializer +com.fasterxml.jackson.databind.ser.impl.PropertyBasedObjectIdGenerator +com.fasterxml.jackson.databind.introspect.AnnotatedField +com.fasterxml.jackson.databind.ser.impl.UnsupportedTypeSerializer +com.fasterxml.jackson.databind.ser.std.StringSerializer +com.fasterxml.jackson.databind.ser.std.NumberSerializers +com.fasterxml.jackson.databind.ser.std.NumberSerializers$Base +com.fasterxml.jackson.databind.ser.std.NumberSerializers$IntegerSerializer +com.fasterxml.jackson.core.JsonParser$NumberType +com.fasterxml.jackson.databind.ser.std.NumberSerializers$LongSerializer +com.fasterxml.jackson.databind.ser.std.NumberSerializers$IntLikeSerializer +com.fasterxml.jackson.databind.ser.std.NumberSerializers$ShortSerializer +com.fasterxml.jackson.databind.ser.std.NumberSerializers$DoubleSerializer +com.fasterxml.jackson.databind.ser.std.NumberSerializers$FloatSerializer +com.fasterxml.jackson.databind.ser.std.BooleanSerializer +com.fasterxml.jackson.databind.ser.std.BooleanSerializer$AsNumber +com.fasterxml.jackson.databind.ser.std.NumberSerializer$BigDecimalAsStringSerializer +com.fasterxml.jackson.databind.ser.std.StdJdkSerializers +java.util.Currency +java.util.UUID +com.fasterxml.jackson.databind.ser.std.UUIDSerializer +com.fasterxml.jackson.databind.ser.std.StdJdkSerializers$AtomicBooleanSerializer +com.fasterxml.jackson.databind.ser.std.StdJdkSerializers$AtomicIntegerSerializer +com.fasterxml.jackson.databind.ser.std.StdJdkSerializers$AtomicLongSerializer +com.fasterxml.jackson.databind.ser.std.FileSerializer +com.fasterxml.jackson.databind.ser.std.ClassSerializer +com.fasterxml.jackson.databind.ser.std.TokenBufferSerializer +com.fasterxml.jackson.databind.cfg.SerializerFactoryConfig +com.fasterxml.jackson.databind.ser.Serializers +com.fasterxml.jackson.databind.ser.BeanSerializerModifier +org.junit.jupiter.engine.execution.DefaultTestInstances +org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor$$Lambda/0x00003fc001179ab0 +org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor$$Lambda/0x00003fc001179d00 +org.junit.jupiter.api.extension.TestInstancePostProcessor +org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor$$Lambda/0x00003fc00117a138 +org.apache.maven.surefire.junitplatform.RunListenerAdapter$$Lambda/0x00003fc00117a378 +org.apache.maven.surefire.junitplatform.RunListenerAdapter$$Lambda/0x00003fc00117a5d8 +org.junit.platform.launcher.TestIdentifier$$Lambda/0x00003fc00117a828 +org.apache.maven.surefire.junitplatform.RunListenerAdapter$$Lambda/0x00003fc00117aa70 +org.apache.maven.surefire.junitplatform.RunListenerAdapter$$Lambda/0x00003fc00117acc0 +org.apache.maven.surefire.junitplatform.RunListenerAdapter$$Lambda/0x00003fc00117af10 +org.apache.maven.surefire.junitplatform.RunListenerAdapter$$Lambda/0x00003fc00117b138 +org.apache.maven.surefire.junitplatform.RunListenerAdapter$$Lambda/0x00003fc00117b390 +org.apache.maven.surefire.junitplatform.RunListenerAdapter$$Lambda/0x00003fc00117b5e0 +org.apache.maven.surefire.junitplatform.RunListenerAdapter$$Lambda/0x00003fc00117b830 +org.apache.maven.surefire.junitplatform.RunListenerAdapter$$Lambda/0x00003fc00117ba78 +org.apache.maven.surefire.junitplatform.RunListenerAdapter$$Lambda/0x00003fc00117bcd0 +org.apache.maven.surefire.junitplatform.RunListenerAdapter$$Lambda/0x00003fc00117bf18 +org.apache.maven.surefire.junitplatform.RunListenerAdapter$$Lambda/0x00003fc00117c178 +org.apache.maven.surefire.junitplatform.RunListenerAdapter$$Lambda/0x00003fc00117c3d0 +org.apache.maven.surefire.junitplatform.RunListenerAdapter$$Lambda/0x00003fc00117c618 +org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor$$Lambda/0x00003fc00117c870 +org.junit.jupiter.api.extension.ExtensionContext$Store$CloseableResource +org.junit.jupiter.engine.extension.TempDirectory$FailureTracker +org.junit.jupiter.engine.execution.NamespaceAwareStore$$Lambda/0x00003fc00117cef0 +org.junit.platform.engine.support.store.NamespacedHierarchicalStore$$Lambda/0x00003fc00117d120 +org.junit.jupiter.engine.extension.TempDirectory$$Lambda/0x00003fc00117d350 +org.junit.jupiter.engine.extension.TempDirectory$$Lambda/0x00003fc00117d590 +org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor$$Lambda/0x00003fc00117d7e8 +org.junit.jupiter.api.extension.BeforeTestExecutionCallback +org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor$$Lambda/0x00003fc00117dc20 +org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor$$Lambda/0x00003fc00117de48 +org.junit.jupiter.engine.descriptor.MethodExtensionContext$$Lambda/0x00003fc00117e078 +org.junit.jupiter.engine.execution.ParameterResolutionUtils$$Lambda/0x00003fc00117e2c0 +org.junit.jupiter.engine.execution.MethodInvocation +org.junit.jupiter.engine.execution.InterceptingExecutableInvoker$$Lambda/0x00003fc00117e790 +org.junit.jupiter.engine.extension.TimeoutExtension$TimeoutProvider +org.junit.jupiter.engine.extension.TimeoutConfiguration +org.junit.jupiter.engine.extension.TimeoutExtension$$Lambda/0x00003fc00117ee20 +org.junit.jupiter.engine.execution.NamespaceAwareStore$$Lambda/0x00003fc00117f080 +org.junit.jupiter.engine.extension.TimeoutExtension$$Lambda/0x00003fc00117f2b0 +org.junit.jupiter.engine.extension.TimeoutDurationParser +java.time.DateTimeException +java.time.format.DateTimeParseException +java.util.regex.Pattern$$Lambda/0x00003fc001102200 +java.util.regex.Pattern$$Lambda/0x00003fc001102468 +org.junit.jupiter.engine.extension.TimeoutConfiguration$$Lambda/0x00003fc00117f718 +org.junit.jupiter.engine.extension.TimeoutConfiguration$$Lambda/0x00003fc00117f948 +org.junit.jupiter.engine.extension.TimeoutConfiguration$$Lambda/0x00003fc00117fb98 +org.junit.jupiter.engine.extension.TimeoutConfiguration$$Lambda/0x00003fc001180000 +org.junit.platform.commons.util.ReflectionUtils$$Lambda/0x00003fc001180230 +java.lang.invoke.LambdaForm$DMH/0x00003fc001184000 +java.lang.invoke.LambdaForm$MH/0x00003fc001184400 +java.lang.invoke.MethodHandleImpl$IntrinsicMethodHandle +java.lang.invoke.LambdaForm$MH/0x00003fc001184800 +com.fasterxml.jackson.databind.type.ClassStack +sun.reflect.generics.repository.AbstractRepository +sun.reflect.generics.repository.GenericDeclRepository +sun.reflect.generics.repository.ClassRepository +sun.reflect.generics.tree.FormalTypeParameter +sun.reflect.generics.tree.Signature +sun.reflect.generics.tree.ClassSignature +com.fasterxml.jackson.databind.util.internal.PrivateMaxEntriesMap$WeightedValue +com.fasterxml.jackson.databind.util.internal.PrivateMaxEntriesMap$Node +com.fasterxml.jackson.databind.util.internal.PrivateMaxEntriesMap$AddTask +com.fasterxml.jackson.core.io.ContentReference +com.fasterxml.jackson.core.util.BufferRecyclers +com.fasterxml.jackson.core.util.BufferRecycler +com.fasterxml.jackson.core.io.IOContext +com.fasterxml.jackson.core.util.TextBuffer +com.fasterxml.jackson.core.util.ReadConstrainedTextBuffer +com.fasterxml.jackson.core.exc.StreamReadException +com.fasterxml.jackson.core.exc.InputCoercionException +com.fasterxml.jackson.core.JsonParseException +com.fasterxml.jackson.core.io.JsonEOFException +com.fasterxml.jackson.core.JsonStreamContext +com.fasterxml.jackson.core.json.JsonReadContext +com.fasterxml.jackson.core.StreamReadCapability +com.fasterxml.jackson.core.util.JacksonFeatureSet +java.util.concurrent.ForkJoinTask +java.util.concurrent.RecursiveTask +java.math.BigInteger$RecursiveOp +java.util.concurrent.ForkJoinTask$Aux +java.util.concurrent.ForkJoinPool +java.util.concurrent.ForkJoinPool$ForkJoinWorkerThreadFactory +java.util.concurrent.DelayScheduler +java.util.concurrent.ForkJoinPool$WorkQueue +jdk.internal.access.JavaUtilConcurrentFJPAccess +java.util.concurrent.ForkJoinPool$1 +java.util.concurrent.ForkJoinPool$DefaultForkJoinWorkerThreadFactory +java.math.BigInteger$RecursiveOp$RecursiveSquare +com.fasterxml.jackson.core.JsonToken +com.fasterxml.jackson.databind.introspect.AnnotationCollector$OneCollector +com.fasterxml.jackson.annotation.JsonIgnoreProperties +com.fasterxml.jackson.annotation.JacksonAnnotation +jdk.proxy2.$Proxy12 +com.fasterxml.jackson.databind.introspect.AnnotationCollector$NCollector +com.fasterxml.jackson.annotation.JacksonAnnotationsInside +jdk.proxy2.$Proxy13 +com.fasterxml.jackson.databind.introspect.AnnotationCollector$OneAnnotation +sun.invoke.util.ValueConversions$WrapperCache +java.lang.invoke.LambdaForm$MH/0x00003fc001184c00 +java.lang.invoke.BoundMethodHandle$Species_LLL +java.lang.invoke.LambdaForm$MH/0x00003fc001185000 +com.fasterxml.jackson.databind.introspect.POJOPropertiesCollector +com.fasterxml.jackson.annotation.JsonAutoDetect +com.fasterxml.jackson.annotation.JsonIdentityInfo +com.fasterxml.jackson.databind.util.ArrayIterator +com.fasterxml.jackson.databind.ext.OptionalHandlerFactory +org.w3c.dom.Node +org.w3c.dom.Document +com.fasterxml.jackson.databind.ext.Java7Handlers +com.fasterxml.jackson.databind.ext.Java7HandlersImpl +com.fasterxml.jackson.databind.ext.NioPathSerializer +com.fasterxml.jackson.databind.ext.NioPathDeserializer +com.fasterxml.jackson.databind.deser.std.JdkDeserializers +com.fasterxml.jackson.databind.deser.std.FromStringDeserializer +com.fasterxml.jackson.databind.deser.std.UUIDDeserializer +com.fasterxml.jackson.databind.deser.std.AtomicBooleanDeserializer +com.fasterxml.jackson.databind.deser.std.AtomicIntegerDeserializer +com.fasterxml.jackson.databind.deser.std.AtomicLongDeserializer +com.fasterxml.jackson.databind.deser.std.ByteBufferDeserializer +com.fasterxml.jackson.databind.deser.std.NullifyingDeserializer +com.fasterxml.jackson.databind.deser.std.StdNodeBasedDeserializer +com.fasterxml.jackson.databind.deser.std.ThreadGroupDeserializer +com.fasterxml.jackson.databind.deser.std.FromStringDeserializer$StringBuilderDeserializer +com.fasterxml.jackson.databind.deser.std.FromStringDeserializer$StringBufferDeserializer +com.fasterxml.jackson.databind.deser.std.FromStringDeserializer$Std +java.net.InetAddress +com.fasterxml.jackson.databind.jsontype.impl.SubTypeValidator +com.fasterxml.jackson.databind.util.BeanUtil +com.fasterxml.jackson.databind.annotation.JsonValueInstantiator +com.fasterxml.jackson.databind.deser.impl.JDKValueInstantiators +com.fasterxml.jackson.databind.deser.ValueInstantiator +com.fasterxml.jackson.databind.deser.ValueInstantiator$Base +com.fasterxml.jackson.databind.deser.std.JsonLocationInstantiator +com.fasterxml.jackson.databind.deser.impl.JDKValueInstantiators$JDKValueInstantiator +com.fasterxml.jackson.databind.deser.impl.JDKValueInstantiators$ArrayListInstantiator +com.fasterxml.jackson.databind.deser.impl.JDKValueInstantiators$HashSetInstantiator +com.fasterxml.jackson.databind.deser.impl.JDKValueInstantiators$LinkedListInstantiator +com.fasterxml.jackson.databind.deser.impl.JDKValueInstantiators$TreeSetInstantiator +com.fasterxml.jackson.databind.deser.impl.JDKValueInstantiators$LinkedHashSetInstantiator +com.fasterxml.jackson.databind.deser.impl.JDKValueInstantiators$ConstantValueInstantiator +com.fasterxml.jackson.databind.deser.impl.JDKValueInstantiators$LinkedHashMapInstantiator +com.fasterxml.jackson.databind.deser.impl.JDKValueInstantiators$HashMapInstantiator +com.fasterxml.jackson.databind.deser.impl.JDKValueInstantiators$ConcurrentHashMapInstantiator +com.fasterxml.jackson.databind.deser.impl.JDKValueInstantiators$TreeMapInstantiator +com.fasterxml.jackson.databind.deser.impl.JDKValueInstantiators$PropertiesInstantiator +com.fasterxml.jackson.core.JsonLocation +com.fasterxml.jackson.databind.introspect.PotentialCreators +com.fasterxml.jackson.databind.introspect.CollectorBase +com.fasterxml.jackson.databind.introspect.AnnotatedFieldCollector +com.fasterxml.jackson.databind.introspect.AnnotationMap +com.fasterxml.jackson.databind.introspect.TypeResolutionContext$Basic +com.fasterxml.jackson.databind.introspect.AnnotatedFieldCollector$FieldBuilder +com.fasterxml.jackson.annotation.JsonProperty +com.fasterxml.jackson.annotation.OptBoolean +com.fasterxml.jackson.annotation.JsonProperty$Access +jdk.proxy2.$Proxy14 +com.fasterxml.jackson.annotation.JsonKey +com.fasterxml.jackson.annotation.JsonValue +com.fasterxml.jackson.annotation.JsonAnyGetter +com.fasterxml.jackson.annotation.JsonAnySetter +com.fasterxml.jackson.databind.PropertyName +com.fasterxml.jackson.core.util.InternCache +com.fasterxml.jackson.annotation.JsonSetter +com.fasterxml.jackson.annotation.JsonIgnore +com.fasterxml.jackson.databind.introspect.POJOPropertyBuilder +com.fasterxml.jackson.databind.introspect.POJOPropertyBuilder$WithMember +com.fasterxml.jackson.databind.AnnotationIntrospector$ReferenceProperty +com.fasterxml.jackson.databind.AnnotationIntrospector$ReferenceProperty$Type +com.fasterxml.jackson.databind.introspect.POJOPropertyBuilder$Linked +com.fasterxml.jackson.databind.introspect.AnnotatedMethodCollector +com.fasterxml.jackson.databind.introspect.MemberKey +com.fasterxml.jackson.databind.introspect.AnnotatedMethodCollector$MethodBuilder +com.fasterxml.jackson.databind.introspect.AnnotatedMethodMap +com.fasterxml.jackson.annotation.JsonGetter +com.fasterxml.jackson.annotation.JsonAutoDetect$1 +com.fasterxml.jackson.annotation.PropertyAccessor +com.fasterxml.jackson.databind.introspect.AnnotatedCreatorCollector +com.fasterxml.jackson.annotation.JsonCreator +com.fasterxml.jackson.databind.introspect.PotentialCreator +com.fasterxml.jackson.annotation.JsonCreator$Mode +com.fasterxml.jackson.databind.cfg.ConstructorDetector +com.fasterxml.jackson.databind.cfg.ConstructorDetector$SingleArgConstructor +com.fasterxml.jackson.databind.introspect.POJOPropertyBuilder$5 +com.fasterxml.jackson.databind.introspect.POJOPropertyBuilder$6 +java.util.LinkedList$Node +java.util.LinkedList$ListItr +com.fasterxml.jackson.annotation.JacksonInject +com.fasterxml.jackson.databind.annotation.JsonNaming +com.fasterxml.jackson.annotation.JsonPropertyOrder +com.fasterxml.jackson.annotation.JsonPropertyDescription +com.fasterxml.jackson.databind.PropertyMetadata +com.fasterxml.jackson.databind.deser.impl.CreatorCollector +com.fasterxml.jackson.databind.deser.std.StdValueInstantiator +com.fasterxml.jackson.databind.deser.BeanDeserializerBuilder +com.fasterxml.jackson.databind.deser.BuilderBasedDeserializer +com.fasterxml.jackson.databind.deser.impl.ObjectIdValueProperty +com.fasterxml.jackson.annotation.JsonIgnoreProperties$Value +com.fasterxml.jackson.annotation.JsonIncludeProperties +com.fasterxml.jackson.annotation.JsonIncludeProperties$Value +com.fasterxml.jackson.databind.util.IgnorePropertiesUtil +com.fasterxml.jackson.databind.annotation.JsonTypeResolver +com.fasterxml.jackson.databind.deser.impl.FailingDeserializer +com.fasterxml.jackson.databind.deser.impl.NullsConstantProvider +com.fasterxml.jackson.databind.util.AccessPattern +com.fasterxml.jackson.databind.introspect.POJOPropertyBuilder$2 +com.fasterxml.jackson.databind.introspect.POJOPropertyBuilder$4 +com.fasterxml.jackson.databind.introspect.POJOPropertyBuilder$1 +com.fasterxml.jackson.annotation.JsonAlias +com.fasterxml.jackson.annotation.JsonFormat$Feature +com.fasterxml.jackson.databind.deser.impl.BeanPropertyMap +com.fasterxml.jackson.databind.exc.IgnoredPropertyException +com.fasterxml.jackson.databind.deser.SettableBeanProperty$Delegating +com.fasterxml.jackson.databind.deser.impl.ManagedReferenceProperty +com.fasterxml.jackson.databind.deser.impl.ObjectIdReferenceProperty +com.fasterxml.jackson.databind.deser.impl.InnerClassProperty +com.fasterxml.jackson.databind.deser.impl.MergingSettableBeanProperty +com.fasterxml.jackson.databind.deser.impl.ReadableObjectId$Referring +com.fasterxml.jackson.databind.deser.BeanDeserializer$BeanReferring +com.fasterxml.jackson.databind.deser.impl.BeanAsArrayDeserializer +com.fasterxml.jackson.databind.util.LinkedNode +jdk.internal.reflect.MethodHandleObjectFieldAccessorImpl +java.lang.invoke.LambdaForm$MH/0x00003fc0011a0000 +java.lang.invoke.LambdaForm$MH/0x00003fc0011a0400 +java.lang.invoke.LambdaForm$MH/0x00003fc0011a0800 +org.assertj.core.api.InstanceOfAssertFactories +org.assertj.core.api.Assertions +org.assertj.core.data.TemporalOffset +org.assertj.core.data.TemporalUnitOffset +org.assertj.core.data.TemporalUnitWithinOffset +org.assertj.core.data.TemporalUnitLessThanOffset +org.assertj.core.api.NumberAssert +org.assertj.core.api.ComparableAssert +org.assertj.core.api.Descriptable +org.assertj.core.api.ExtensionPoints +org.assertj.core.api.Assert +org.assertj.core.api.AbstractAssert +org.assertj.core.api.AbstractObjectAssert +org.assertj.core.api.AbstractComparableAssert +org.assertj.core.api.AbstractBigIntegerAssert +org.assertj.core.api.BigIntegerAssert +org.assertj.core.configuration.ConfigurationProvider +org.assertj.core.api.AssertionsForClassTypes +org.assertj.core.api.AbstractTemporalAssert +org.assertj.core.api.AbstractYearMonthAssert +org.assertj.core.api.YearMonthAssert +org.assertj.core.api.AbstractInstantAssert +org.assertj.core.api.InstantAssert +org.assertj.core.api.AbstractDurationAssert +org.assertj.core.api.DurationAssert +org.assertj.core.api.AbstractPeriodAssert +org.assertj.core.api.PeriodAssert +org.assertj.core.api.AbstractThrowableAssert +org.assertj.core.api.ThrowableAssert +org.assertj.core.api.FloatingPointNumberAssert +org.assertj.core.api.AbstractDoubleAssert +org.assertj.core.api.DoubleAssert +org.assertj.core.api.ArraySortedAssert +org.assertj.core.api.EnumerableAssert +org.assertj.core.api.AbstractEnumerableAssert +org.assertj.core.api.AbstractArrayAssert +org.assertj.core.api.AbstractDoubleArrayAssert +org.assertj.core.api.DoubleArrayAssert +org.assertj.core.api.AbstractCharacterAssert +org.assertj.core.api.CharacterAssert +org.assertj.core.api.AbstractCharArrayAssert +org.assertj.core.api.CharArrayAssert +org.assertj.core.api.AbstractFloatAssert +org.assertj.core.api.FloatAssert +org.assertj.core.api.AbstractFloatArrayAssert +org.assertj.core.api.FloatArrayAssert +org.assertj.core.api.AbstractIntegerAssert +org.assertj.core.api.IntegerAssert +org.assertj.core.api.AbstractFileAssert +org.assertj.core.api.FileAssert +org.assertj.core.api.AbstractInputStreamAssert +org.assertj.core.api.InputStreamAssert +org.assertj.core.api.AbstractBigDecimalAssert +org.assertj.core.api.BigDecimalAssert +org.assertj.core.api.AbstractUriAssert +org.assertj.core.api.UriAssert +org.assertj.core.api.AbstractUrlAssert +org.assertj.core.api.UrlAssert +org.assertj.core.api.AbstractByteAssert +org.assertj.core.api.ByteAssert +org.assertj.core.api.AbstractByteArrayAssert +org.assertj.core.api.ByteArrayAssert +org.assertj.core.api.AbstractBooleanAssert +org.assertj.core.api.BooleanAssert +org.assertj.core.api.AbstractBooleanArrayAssert +org.assertj.core.api.BooleanArrayAssert +org.assertj.core.api.AbstractShortArrayAssert +org.assertj.core.api.ShortArrayAssert +org.assertj.core.api.AbstractCharSequenceAssert +org.assertj.core.api.CharSequenceAssert +org.assertj.core.api.AbstractShortAssert +org.assertj.core.api.ShortAssert +org.assertj.core.api.AbstractOffsetDateTimeAssert +org.assertj.core.api.OffsetDateTimeAssert +org.assertj.core.api.AbstractOffsetTimeAssert +org.assertj.core.api.OffsetTimeAssert +org.assertj.core.api.AbstractLocalTimeAssert +org.assertj.core.api.LocalTimeAssert +org.assertj.core.api.AbstractLocalDateAssert +org.assertj.core.api.LocalDateAssert +org.assertj.core.api.AbstractStringAssert +org.assertj.core.api.StringAssert +org.assertj.core.api.AbstractDateAssert +org.assertj.core.api.DateAssert +org.assertj.core.api.AbstractZonedDateTimeAssert +org.assertj.core.api.ZonedDateTimeAssert +org.assertj.core.api.AbstractLocalDateTimeAssert +org.assertj.core.api.LocalDateTimeAssert +org.assertj.core.api.AbstractLongAssert +org.assertj.core.api.LongAssert +org.assertj.core.api.AbstractIntArrayAssert +org.assertj.core.api.IntArrayAssert +org.assertj.core.api.AbstractLongArrayAssert +org.assertj.core.api.LongArrayAssert +org.assertj.core.description.Description +org.assertj.core.description.LazyTextDescription +org.assertj.core.description.TextDescription +org.assertj.core.api.AssertionInfo +org.assertj.core.internal.ComparisonStrategy +org.assertj.core.api.ObjectEnumerableAssert +org.assertj.core.api.IndexedObjectEnumerableAssert +org.assertj.core.api.AbstractIterableAssert +org.assertj.core.api.AbstractCollectionAssert +org.assertj.core.api.AbstractListAssert +org.assertj.core.api.FactoryBasedNavigableListAssert +org.assertj.core.api.ListAssert +org.assertj.core.internal.Objects +org.assertj.core.error.ErrorMessageFactory +org.assertj.core.util.introspection.IntrospectionError +org.assertj.core.internal.AbstractComparisonStrategy +org.assertj.core.internal.StandardComparisonStrategy +org.assertj.core.util.introspection.PropertySupport +org.assertj.core.internal.Failures +org.assertj.core.error.AssertionErrorCreator +org.assertj.core.util.Arrays +org.assertj.core.error.ConstructorInvoker +org.assertj.core.util.introspection.FieldSupport +org.assertj.core.error.GroupTypeDescription +org.assertj.core.internal.Conditions +org.assertj.core.api.WritableAssertionInfo +org.assertj.core.presentation.Representation +org.assertj.core.configuration.Configuration +org.assertj.core.configuration.PreferredAssumptionException +org.assertj.core.configuration.PreferredAssumptionException$1 +org.assertj.core.configuration.Services +org.assertj.core.util.Lists +org.assertj.core.util.Streams +org.assertj.core.util.Lists$$Lambda/0x00003fc0011ddec0 +org.assertj.core.presentation.CompositeRepresentation +java.lang.invoke.LambdaForm$DMH/0x00003fc0011a0c00 +org.assertj.core.presentation.CompositeRepresentation$$Lambda/0x00003fc0011de348 +java.util.stream.SortedOps$SizedRefSortingSink +org.assertj.core.presentation.StandardRepresentation +java.time.temporal.TemporalAccessor +java.time.temporal.Temporal +java.time.temporal.TemporalAdjuster +java.time.chrono.ChronoLocalDateTime +java.time.LocalDateTime +java.time.chrono.ChronoZonedDateTime +java.time.ZonedDateTime +java.time.OffsetDateTime +java.nio.file.DirectoryStream +org.assertj.core.internal.Strings +org.assertj.core.internal.Comparables +org.junit.jupiter.api.extension.AfterTestExecutionCallback +org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor$$Lambda/0x00003fc0011df1e0 +org.junit.jupiter.engine.descriptor.CallbackSupport$$Lambda/0x00003fc0011df408 +org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor$$Lambda/0x00003fc0011df648 +org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor$$Lambda/0x00003fc0011df878 +org.junit.platform.engine.support.hierarchical.NodeTestTask$$Lambda/0x00003fc0011dfaa0 +org.junit.platform.engine.support.hierarchical.NodeTestTask$$Lambda/0x00003fc0011dfcd0 +org.junit.platform.engine.support.hierarchical.NodeTestTask$$Lambda/0x00003fc0011e0000 +org.junit.jupiter.engine.descriptor.MethodExtensionContext$$Lambda/0x00003fc0011e0230 +org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor$$Lambda/0x00003fc0011e0478 +org.junit.jupiter.engine.descriptor.CallbackSupport$$Lambda/0x00003fc0011e06a0 +org.junit.jupiter.engine.extension.AutoCloseExtension$$Lambda/0x00003fc0011e08d0 +org.junit.jupiter.engine.extension.AutoCloseExtension$$Lambda/0x00003fc0011e0b28 +org.junit.jupiter.api.extension.TestInstancePreDestroyCallback$$Lambda/0x00003fc0011e0d68 +org.junit.jupiter.api.extension.TestInstancePreDestroyCallback$$Lambda/0x00003fc0011e0fb0 +org.junit.jupiter.engine.extension.AutoCloseExtension$$Lambda/0x00003fc0011e11f0 +org.junit.jupiter.api.AutoClose +org.junit.jupiter.engine.extension.AutoCloseExtension$$Lambda/0x00003fc0011e1650 +org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor$$Lambda/0x00003fc0011e1890 +java.util.concurrent.ConcurrentHashMap$EntrySpliterator +org.junit.platform.engine.support.store.NamespacedHierarchicalStore$EvaluatedValue +org.junit.platform.engine.support.store.NamespacedHierarchicalStore$$Lambda/0x00003fc0011e1cd8 +org.junit.platform.engine.support.store.NamespacedHierarchicalStore$$Lambda/0x00003fc0011e1f20 +org.junit.platform.engine.support.store.NamespacedHierarchicalStore$EvaluatedValue$$Lambda/0x00003fc0011e2178 +org.junit.platform.engine.support.store.NamespacedHierarchicalStore$$Lambda/0x00003fc0011e23c0 +org.junit.jupiter.engine.config.CachingJupiterConfiguration$$Lambda/0x00003fc0011e2600 +org.junit.platform.engine.TestExecutionResult +org.junit.platform.engine.TestExecutionResult$Status +org.junit.jupiter.api.extension.TestWatcher +org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor$$Lambda/0x00003fc0011e30d0 +org.junit.jupiter.engine.descriptor.MethodBasedTestDescriptor$$Lambda/0x00003fc0011e3310 +org.junit.platform.launcher.core.StackTracePruningEngineExecutionListener$$Lambda/0x00003fc0011e3550 +org.junit.platform.launcher.core.StackTracePruningEngineExecutionListener$$Lambda/0x00003fc0011e3798 +org.junit.platform.launcher.core.StackTracePruningEngineExecutionListener$$Lambda/0x00003fc0011e39f0 +org.junit.platform.launcher.core.StackTracePruningEngineExecutionListener$$Lambda/0x00003fc0011e3c38 +org.junit.platform.launcher.core.StackTracePruningEngineExecutionListener$$Lambda/0x00003fc0011e3e80 +org.junit.platform.launcher.core.CompositeEngineExecutionListener$$Lambda/0x00003fc0011e40d8 +org.junit.platform.launcher.core.CompositeEngineExecutionListener$$Lambda/0x00003fc0011e4318 +org.junit.platform.launcher.core.CompositeTestExecutionListener$$Lambda/0x00003fc0011e4548 +org.junit.platform.launcher.core.CompositeTestExecutionListener$$Lambda/0x00003fc0011e4788 +org.junit.platform.launcher.core.CompositeTestExecutionListener$$Lambda/0x00003fc0011e49b8 +org.junit.platform.launcher.core.CompositeTestExecutionListener$$Lambda/0x00003fc0011e4bf8 +org.apache.maven.surefire.junitplatform.RunListenerAdapter$$Lambda/0x00003fc0011e4e28 +org.apache.maven.surefire.junitplatform.RunListenerAdapter$1 +java.lang.invoke.LambdaForm$DMH/0x00003fc0011e8000 +org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor$$Lambda/0x00003fc0011e5298 +org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor$$Lambda/0x00003fc0011e54d8 +org.junit.jupiter.engine.extension.AutoCloseExtension$$Lambda/0x00003fc0011e5700 +org.junit.jupiter.engine.extension.AutoCloseExtension$$Lambda/0x00003fc0011e5958 +org.apache.maven.surefire.junitplatform.RunListenerAdapter$$Lambda/0x00003fc0011e5bb0 +org.apache.maven.surefire.api.util.internal.ObjectUtils +org.apache.maven.surefire.api.util.internal.ImmutableMap$Node +org.junit.platform.commons.util.ReflectionUtils$$Lambda/0x00003fc0011e6270 +org.junit.platform.commons.util.ReflectionUtils$$Lambda/0x00003fc0011e64b8 +java.util.stream.Nodes$ArrayNode +java.util.stream.Nodes$FixedNodeBuilder +com.github.tomakehurst.wiremock.core.Options +com.github.tomakehurst.wiremock.junit5.WireMockExtension$Builder +com.github.tomakehurst.wiremock.core.Container +com.github.tomakehurst.wiremock.WireMockServer +com.github.tomakehurst.wiremock.store.Store +com.github.tomakehurst.wiremock.store.BlobStore +com.github.tomakehurst.wiremock.http.RequestListener +com.github.tomakehurst.wiremock.client.VerificationException +com.github.tomakehurst.wiremock.common.FatalStartupException +com.github.tomakehurst.wiremock.core.WireMockConfiguration +com.github.tomakehurst.wiremock.store.StoresLifecycle +com.github.tomakehurst.wiremock.store.Stores +com.github.tomakehurst.wiremock.standalone.MappingsLoader +com.github.tomakehurst.wiremock.core.MappingsSaver +com.github.tomakehurst.wiremock.standalone.MappingsSource +com.github.tomakehurst.wiremock.common.FileSource +com.github.tomakehurst.wiremock.security.Authenticator +com.github.tomakehurst.wiremock.common.Notifier +com.github.tomakehurst.wiremock.extension.Extension +com.github.tomakehurst.wiremock.http.HttpServerFactory +com.github.tomakehurst.wiremock.http.client.HttpClientFactory +com.github.tomakehurst.wiremock.http.trafficlistener.WiremockNetworkTrafficListener +com.github.tomakehurst.wiremock.common.ResourceUtil +com.github.tomakehurst.wiremock.common.ParameterUtils +com.github.tomakehurst.wiremock.common.BrowserProxySettings +java.lang.invoke.StringConcatFactory$InlineHiddenClassStrategy +java.lang.invoke.StringConcatFactory$InlineHiddenClassStrategy$1 +java.lang.invoke.StringConcatFactory$InlineHiddenClassStrategy$2 +java.lang.invoke.StringConcatFactory$InlineHiddenClassStrategy$3 +java.lang.invoke.StringConcatFactory$InlineHiddenClassStrategy$3$3 +java.lang.invoke.StringConcatFactory$InlineHiddenClassStrategy$5 +java.lang.invoke.StringConcatFactory$InlineHiddenClassStrategy$3$2 +java.lang.invoke.StringConcatFactory$InlineHiddenClassStrategy$7 +java.lang.invoke.StringConcatFactory$InlineHiddenClassStrategy$3$1 +java.lang.invoke.StringConcatFactory$InlineHiddenClassStrategy$4 +java.lang.invoke.StringConcatFactory$InlineHiddenClassStrategy$3$4 +java.lang.invoke.StringConcatFactory$InlineHiddenClassStrategy$6 +java.lang.StringConcatHelper$StringConcatBase +java.lang.String$$StringConcat/0x00003fc0011e8400 +java.lang.invoke.LambdaForm$DMH/0x00003fc0011e8800 +java.lang.invoke.StringConcatFactory$InlineHiddenClassStrategy$MethodHandlePair +java.lang.invoke.LambdaForm$DMH/0x00003fc0011e8c00 +java.lang.invoke.LambdaForm$BMH/0x00003fc0011e9000 +java.lang.invoke.LambdaForm$MH/0x00003fc0011e9400 +java.lang.invoke.LambdaForm$MH/0x00003fc0011e9800 +com.github.tomakehurst.wiremock.common.BrowserProxySettings$Builder +com.github.tomakehurst.wiremock.common.ssl.KeyStoreSettings +com.github.tomakehurst.wiremock.common.Source +com.github.tomakehurst.wiremock.common.ProxySettings +com.github.tomakehurst.wiremock.common.AbstractFileSource +com.github.tomakehurst.wiremock.common.SingleRootFileSource +com.github.tomakehurst.wiremock.security.NotAuthorisedException +com.github.tomakehurst.wiremock.common.Slf4jNotifier +org.slf4j.LoggerFactory +java.util.ServiceConfigurationError +org.slf4j.event.LoggingEvent +org.slf4j.spi.SLF4JServiceProvider +org.slf4j.helpers.SubstituteServiceProvider +org.slf4j.ILoggerFactory +org.slf4j.IMarkerFactory +org.slf4j.spi.MDCAdapter +org.slf4j.helpers.SubstituteLoggerFactory +org.slf4j.Logger +java.util.concurrent.LinkedBlockingQueue +java.util.concurrent.LinkedBlockingQueue$Node +org.slf4j.helpers.BasicMarkerFactory +org.slf4j.Marker +org.slf4j.helpers.BasicMDCAdapter +java.lang.InheritableThreadLocal +org.slf4j.helpers.BasicMDCAdapter$1 +org.slf4j.helpers.ThreadLocalMapOfStacks +org.slf4j.helpers.NOP_FallbackServiceProvider +org.slf4j.helpers.NOPLoggerFactory +org.slf4j.helpers.NOPMDCAdapter +org.slf4j.helpers.Util +org.slf4j.simple.SimpleServiceProvider +org.slf4j.MDC +org.slf4j.simple.SimpleLoggerFactory +org.slf4j.helpers.AbstractLogger +org.slf4j.helpers.LegacyAbstractLogger +org.slf4j.simple.SimpleLogger +org.slf4j.spi.LoggingEventBuilder +org.slf4j.simple.SimpleLoggerConfiguration +org.slf4j.simple.SimpleLoggerConfiguration$$Lambda/0x00003fc0011f2108 +org.slf4j.simple.OutputChoice +org.slf4j.simple.OutputChoice$OutputChoiceType +org.slf4j.helpers.Reporter +org.slf4j.helpers.Reporter$TargetChoice +org.slf4j.helpers.Reporter$Level +org.slf4j.simple.SimpleLoggerFactory$$Lambda/0x00003fc0011f3450 +com.github.tomakehurst.wiremock.http.DefaultFactory +com.github.tomakehurst.wiremock.jetty.JettyHttpServerFactory +com.github.tomakehurst.wiremock.http.HttpServer +com.github.tomakehurst.wiremock.http.client.ApacheHttpClientFactory +com.github.tomakehurst.wiremock.http.client.HttpClient +com.github.tomakehurst.wiremock.extension.ExtensionDeclarations +com.github.tomakehurst.wiremock.http.trafficlistener.DoNothingWiremockNetworkTrafficListener +com.github.tomakehurst.wiremock.security.NoAuthenticator +com.github.tomakehurst.wiremock.admin.AdminTask +com.github.tomakehurst.wiremock.verification.notmatched.NotMatchedRenderer +com.github.tomakehurst.wiremock.verification.notmatched.PlainTextStubNotMatchedRenderer +com.github.tomakehurst.wiremock.extension.WireMockServices +com.github.tomakehurst.wiremock.extension.Extensions +com.github.tomakehurst.wiremock.core.WireMockConfiguration$$Lambda/0x00003fc0011f5400 +com.github.tomakehurst.wiremock.common.Limit +com.github.tomakehurst.wiremock.common.NetworkAddressRules +com.github.tomakehurst.wiremock.common.DefaultNetworkAddressRules +com.github.tomakehurst.wiremock.common.NetworkAddressRange +com.github.tomakehurst.wiremock.common.ClientError +com.github.tomakehurst.wiremock.common.InvalidInputException +com.github.tomakehurst.wiremock.common.NetworkAddressRange$All +com.github.tomakehurst.wiremock.common.NetworkAddressRange$SingleIp +com.github.tomakehurst.wiremock.common.NetworkAddressRange$IpRange +com.github.tomakehurst.wiremock.common.NetworkAddressRange$DomainNameWildcard +java.net.UnknownHostException +java.lang.String$$StringConcat/0x00003fc0011f8000 +java.lang.invoke.LambdaForm$MH/0x00003fc0011f8400 +com.github.tomakehurst.wiremock.common.DefaultNetworkAddressRules$$Lambda/0x00003fc0011f6c38 +com.github.tomakehurst.wiremock.common.DefaultNetworkAddressRules$$Lambda/0x00003fc0011f6e90 +com.github.tomakehurst.wiremock.common.DefaultNetworkAddressRules$$Lambda/0x00003fc0011f70e8 +com.github.tomakehurst.wiremock.common.DefaultNetworkAddressRules$$Lambda/0x00003fc0011f7340 +com.github.tomakehurst.wiremock.common.DefaultNetworkAddressRules$$Lambda/0x00003fc0011f7598 +com.github.tomakehurst.wiremock.junit5.WireMockExtension$$Lambda/0x00003fc0011f77e0 +com.github.tomakehurst.wiremock.junit5.WireMockExtension$$Lambda/0x00003fc0011f7a30 +com.github.tomakehurst.wiremock.junit5.WireMockExtension$$Lambda/0x00003fc0011f7c80 +com.github.tomakehurst.wiremock.core.StubServer +com.github.tomakehurst.wiremock.core.WireMockApp +com.github.tomakehurst.wiremock.http.ResponseRenderer +com.github.tomakehurst.wiremock.http.Request +com.github.tomakehurst.wiremock.core.ConfigurationException +com.github.tomakehurst.wiremock.verification.RequestJournalDisabledException +com.github.tomakehurst.wiremock.admin.Paginator +com.github.tomakehurst.wiremock.verification.RequestJournal +com.github.tomakehurst.wiremock.stubbing.Scenarios +com.github.tomakehurst.wiremock.stubbing.StubMappings +com.jayway.jsonpath.JsonPathException +com.jayway.jsonpath.spi.cache.Cache +com.github.tomakehurst.wiremock.common.xml.Xml +javax.xml.transform.Result +javax.xml.transform.Source +javax.xml.parsers.ParserConfigurationException +javax.xml.parsers.DocumentBuilderFactory +com.github.tomakehurst.wiremock.common.xml.DelegateDocumentBuilderFactory +com.github.tomakehurst.wiremock.common.xml.SkipResolvingEntitiesDocumentBuilderFactory +com.github.tomakehurst.wiremock.common.xml.SilentErrorDocumentBuilderFactory +com.github.tomakehurst.wiremock.common.xml.BuilderPerThreadDocumentBuilderFactory +org.xml.sax.SAXException +com.github.tomakehurst.wiremock.common.xml.XmlException +org.xml.sax.ErrorHandler +org.xml.sax.EntityResolver +com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl +jdk.xml.internal.JdkXmlConfig +jdk.xml.internal.SecuritySupport +jdk.xml.internal.XMLSecurityManager +jdk.xml.internal.XMLSecurityManager$ValueMapper +jdk.xml.internal.XMLSecurityManager$BooleanMapper +jdk.xml.internal.XMLSecurityManager$IntegerMapper +jdk.xml.internal.XMLSecurityManager$StringMapper +java.util.Collections$UnmodifiableMap$UnmodifiableEntrySet +java.util.Collections$UnmodifiableMap$UnmodifiableEntrySet$UnmodifiableEntrySetSpliterator +java.util.HashMap$EntrySpliterator +jdk.xml.internal.XMLSecurityManager$StringMapper$$Lambda/0x00003fc00110aff8 +jdk.xml.internal.XMLSecurityManager$StringMapper$$Lambda/0x00003fc00110b240 +java.util.stream.Collectors$$Lambda/0x00003fc00110b488 +java.util.stream.Collectors$$Lambda/0x00003fc00110b6b0 +java.util.stream.Collectors$$Lambda/0x00003fc00110b8f0 +java.util.Collections$UnmodifiableMap$UnmodifiableEntrySet$$Lambda/0x00003fc00110bb40 +java.util.Collections$UnmodifiableMap$UnmodifiableEntrySet$UnmodifiableEntry +jdk.xml.internal.XMLSecurityManager$Limit +jdk.xml.internal.XMLSecurityManager$Processor +jdk.xml.internal.JdkProperty$State +jdk.xml.internal.FeaturePropertyBase +jdk.xml.internal.XMLSecurityPropertyManager +jdk.xml.internal.FeaturePropertyBase$State +jdk.xml.internal.XMLSecurityPropertyManager$Property +jdk.xml.internal.JdkXmlFeatures +jdk.xml.internal.JdkXmlFeatures$XmlFeature +jdk.xml.internal.JdkProperty$ImplPropMap +javax.xml.parsers.DocumentBuilder +com.github.tomakehurst.wiremock.common.xml.BuilderPerThreadDocumentBuilderFactory$$Lambda/0x00003fc0011fec20 +java.lang.ThreadLocal$SuppliedThreadLocal +com.sun.org.apache.xerces.internal.jaxp.JAXPConstants +com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl +com.sun.org.apache.xerces.internal.xni.XMLDocumentHandler +com.sun.org.apache.xerces.internal.xni.XMLDTDHandler +com.sun.org.apache.xerces.internal.xni.XMLDTDContentModelHandler +com.sun.org.apache.xerces.internal.parsers.XMLParser +com.sun.org.apache.xerces.internal.parsers.AbstractXMLDocumentParser +com.sun.org.apache.xerces.internal.parsers.AbstractDOMParser +com.sun.org.apache.xerces.internal.parsers.DOMParser +com.sun.org.apache.xerces.internal.xni.parser.XMLComponentManager +com.sun.org.apache.xerces.internal.xni.parser.XMLParserConfiguration +com.sun.org.apache.xerces.internal.xni.parser.XMLPullParserConfiguration +com.sun.org.apache.xerces.internal.parsers.XML11Configurable +com.sun.org.apache.xerces.internal.util.ParserConfigurationSettings +com.sun.org.apache.xerces.internal.parsers.XML11Configuration +com.sun.org.apache.xerces.internal.parsers.XIncludeAwareParserConfiguration +jdk.xml.internal.JdkXmlUtils +javax.xml.catalog.CatalogFeatures$Feature +javax.xml.catalog.CatalogFeatures +javax.xml.catalog.CatalogFeatures$Builder +javax.xml.catalog.CatalogFeatures$State +javax.xml.catalog.Util +javax.xml.catalog.CatalogMessages +javax.xml.catalog.CatalogFeatures$$Lambda/0x00003fc001112f58 +jdk.xml.internal.JdkConstants +com.sun.org.apache.xerces.internal.util.SymbolTable +com.sun.org.apache.xerces.internal.util.SymbolTable$Entry +com.sun.org.apache.xerces.internal.xni.parser.XMLComponent +com.sun.org.apache.xerces.internal.xni.parser.XMLEntityResolver +com.sun.org.apache.xerces.internal.impl.XMLEntityManager +java.util.Vector +java.util.Stack +com.sun.org.apache.xerces.internal.xni.XMLResourceIdentifier +com.sun.org.apache.xerces.internal.util.XMLResourceIdentifierImpl +com.sun.org.apache.xerces.internal.xni.Augmentations +com.sun.org.apache.xerces.internal.util.AugmentationsImpl +com.sun.org.apache.xerces.internal.util.AugmentationsImpl$AugmentationsItemsContainer +com.sun.org.apache.xerces.internal.util.AugmentationsImpl$SmallContainer +com.sun.xml.internal.stream.XMLEntityStorage +com.sun.org.apache.xerces.internal.xni.XMLLocator +com.sun.org.apache.xerces.internal.impl.XMLEntityScanner +com.sun.org.apache.xerces.internal.impl.XMLEntityScanner$1 +com.sun.org.apache.xerces.internal.impl.XMLErrorReporter +com.sun.org.apache.xerces.internal.xni.parser.XMLDocumentSource +com.sun.org.apache.xerces.internal.xni.parser.XMLDocumentScanner +com.sun.org.apache.xerces.internal.impl.XMLEntityHandler +com.sun.xml.internal.stream.XMLBufferListener +com.sun.org.apache.xerces.internal.impl.XMLScanner +com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl +com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl +com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl +com.sun.org.apache.xerces.internal.xni.XMLString +com.sun.org.apache.xerces.internal.util.XMLStringBuffer +com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$ElementStack +com.sun.org.apache.xerces.internal.xni.QName +com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$ElementStack2 +com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$Driver +com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver +com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$ContentDriver +com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl$NSContentDriver +com.sun.org.apache.xerces.internal.xni.XMLAttributes +com.sun.org.apache.xerces.internal.util.XMLAttributesImpl +com.sun.org.apache.xerces.internal.util.XMLAttributesIteratorImpl +com.sun.org.apache.xerces.internal.util.XMLAttributesImpl$Attribute +com.sun.org.apache.xerces.internal.xni.NamespaceContext +com.sun.org.apache.xerces.internal.util.NamespaceSupport +com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$XMLDeclDriver +com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver +com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$TrailingMiscDriver +com.sun.org.apache.xerces.internal.xni.grammars.XMLGrammarDescription +com.sun.org.apache.xerces.internal.xni.grammars.XMLDTDDescription +com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDDescription +com.sun.org.apache.xerces.internal.xni.parser.XMLDTDSource +com.sun.org.apache.xerces.internal.xni.parser.XMLDTDContentModelSource +com.sun.org.apache.xerces.internal.xni.parser.XMLDTDScanner +com.sun.org.apache.xerces.internal.impl.XMLDTDScannerImpl +com.sun.org.apache.xerces.internal.xni.parser.XMLDTDFilter +com.sun.org.apache.xerces.internal.xni.parser.XMLDTDContentModelFilter +com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDProcessor +com.sun.org.apache.xerces.internal.impl.dtd.XMLEntityDecl +com.sun.org.apache.xerces.internal.xni.parser.XMLDocumentFilter +com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidatorFilter +com.sun.org.apache.xerces.internal.impl.RevalidationHandler +com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator +com.sun.org.apache.xerces.internal.impl.dtd.XMLNSDTDValidator +com.sun.org.apache.xerces.internal.impl.dv.ValidationContext +com.sun.org.apache.xerces.internal.impl.validation.ValidationState +com.sun.org.apache.xerces.internal.impl.dtd.XMLElementDecl +com.sun.org.apache.xerces.internal.impl.dtd.XMLSimpleType +com.sun.org.apache.xerces.internal.impl.dtd.XMLAttributeDecl +com.sun.org.apache.xerces.internal.impl.dtd.DTDGrammarBucket +com.sun.org.apache.xerces.internal.impl.dv.DTDDVFactory +com.sun.org.apache.xerces.internal.impl.dv.dtd.DTDDVFactoryImpl +com.sun.org.apache.xerces.internal.impl.dv.DatatypeValidator +com.sun.org.apache.xerces.internal.impl.dv.dtd.StringDatatypeValidator +com.sun.org.apache.xerces.internal.impl.dv.dtd.IDDatatypeValidator +com.sun.org.apache.xerces.internal.impl.dv.dtd.IDREFDatatypeValidator +com.sun.org.apache.xerces.internal.impl.dv.dtd.ListDatatypeValidator +com.sun.org.apache.xerces.internal.impl.dv.dtd.ENTITYDatatypeValidator +com.sun.org.apache.xerces.internal.impl.dv.dtd.NOTATIONDatatypeValidator +com.sun.org.apache.xerces.internal.impl.dv.dtd.NMTOKENDatatypeValidator +com.sun.org.apache.xerces.internal.impl.validation.ValidationManager +com.sun.org.apache.xerces.internal.impl.XMLVersionDetector +com.sun.org.apache.xerces.internal.util.MessageFormatter +com.sun.org.apache.xerces.internal.impl.msg.XMLMessageFormatter +com.sun.org.apache.xerces.internal.util.PropertyState +com.sun.org.apache.xerces.internal.util.Status +com.sun.org.apache.xerces.internal.util.FeatureState +javax.xml.transform.TransformerFactory +com.sun.org.apache.xalan.internal.xsltc.compiler.SourceLoader +javax.xml.transform.sax.SAXTransformerFactory +com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl +javax.xml.transform.ErrorListener +jdk.xml.internal.TransformErrorListener +jdk.xml.internal.JdkProperty +javax.xml.xpath.XPathFactory +com.sun.org.apache.xpath.internal.jaxp.XPathFactoryImpl +org.custommonkey.xmlunit.XMLUnit +org.custommonkey.xmlunit.exceptions.XMLUnitRuntimeException +org.custommonkey.xmlunit.exceptions.ConfigurationException +javax.xml.transform.TransformerException +org.custommonkey.xmlunit.XpathEngine +javax.xml.transform.FactoryFinder +javax.xml.transform.FactoryFinder$$Lambda/0x00003fc0011234b0 +javax.xml.transform.FactoryFinder$$Lambda/0x00003fc0011236e0 +javax.xml.transform.FactoryFinder$$Lambda/0x00003fc001123910 +com.jayway.jsonpath.spi.cache.NOOPCache +com.jayway.jsonpath.spi.cache.CacheProvider +java.util.concurrent.atomic.AtomicReferenceFieldUpdater +java.util.concurrent.atomic.AtomicReferenceFieldUpdater$AtomicReferenceFieldUpdaterImpl +sun.reflect.misc.ReflectUtil +com.jayway.jsonpath.internal.Utils +com.github.tomakehurst.wiremock.store.DefaultStores +com.github.tomakehurst.wiremock.store.RecorderStateStore +com.github.tomakehurst.wiremock.store.ObjectStore +com.github.tomakehurst.wiremock.store.StubMappingStore +com.github.tomakehurst.wiremock.store.RequestJournalStore +com.github.tomakehurst.wiremock.store.SettingsStore +com.github.tomakehurst.wiremock.store.ScenariosStore +com.github.tomakehurst.wiremock.store.InMemoryStubMappingStore +com.github.tomakehurst.wiremock.stubbing.SortedConcurrentMappingSet +java.util.concurrent.ConcurrentSkipListSet +com.github.tomakehurst.wiremock.stubbing.StubMapping +com.github.tomakehurst.wiremock.stubbing.SortedConcurrentMappingSet$$Lambda/0x00003fc0011fb7b0 +java.util.concurrent.ConcurrentNavigableMap +java.util.concurrent.ConcurrentSkipListMap +java.util.concurrent.ConcurrentSkipListMap$Index +java.util.concurrent.atomic.Striped64 +java.util.concurrent.atomic.LongAdder +java.util.concurrent.ConcurrentSkipListMap$Node +com.github.tomakehurst.wiremock.store.InMemoryRequestJournalStore +java.util.concurrent.ConcurrentLinkedDeque +java.util.concurrent.ConcurrentLinkedDeque$Node +com.github.tomakehurst.wiremock.store.InMemorySettingsStore +com.github.tomakehurst.wiremock.global.GlobalSettings +com.github.tomakehurst.wiremock.global.GlobalSettings$Builder +com.github.tomakehurst.wiremock.store.InMemoryScenariosStore +com.github.tomakehurst.wiremock.common.ssl.KeyStoreSourceFactory +com.github.tomakehurst.wiremock.common.ssl.KeyStoreSource +com.github.tomakehurst.wiremock.common.ssl.ReadOnlyFileOrClasspathKeyStoreSource +com.github.tomakehurst.wiremock.jetty11.WritableFileOrClasspathKeyStoreSource +java.nio.file.attribute.PosixFilePermission +java.security.GeneralSecurityException +java.security.KeyStoreException +java.security.NoSuchAlgorithmException +java.security.cert.CertificateException +java.lang.invoke.LambdaForm$MH/0x00003fc001200000 +java.lang.invoke.LambdaFormEditor$1 +java.util.TreeMap$Entry +java.util.TreeMap$EntrySet +java.util.TreeMap$PrivateEntryIterator +java.util.TreeMap$EntryIterator +java.lang.invoke.LambdaForm$MH/0x00003fc001200400 +java.lang.invoke.LambdaForm$MH/0x00003fc001200800 +com.github.tomakehurst.wiremock.standalone.JsonFileMappingsSource +com.github.tomakehurst.wiremock.common.JsonException +com.github.tomakehurst.wiremock.standalone.MappingFileException +com.github.tomakehurst.wiremock.common.NotWritableException +com.github.tomakehurst.wiremock.common.filemaker.FilenameMaker +com.github.tomakehurst.wiremock.standalone.JsonFileMappingsSource$$Lambda/0x00003fc0012046f8 +java.util.regex.CharPredicates$$Lambda/0x00003fc0011256e0 +java.util.regex.Pattern$$Lambda/0x800000030 +com.github.tomakehurst.wiremock.extension.responsetemplating.TemplateEngine +com.github.jknack.handlebars.Helper +com.github.jknack.handlebars.HelperRegistry +com.github.jknack.handlebars.Handlebars +com.github.jknack.handlebars.io.TemplateSource +com.github.jknack.handlebars.io.TemplateLoader +com.github.jknack.handlebars.cache.TemplateCache +com.github.jknack.handlebars.ParserFactory +com.github.jknack.handlebars.Formatter$Chain +com.github.jknack.handlebars.io.AbstractTemplateLoader +com.github.jknack.handlebars.io.URLTemplateLoader +com.github.jknack.handlebars.io.ClassPathTemplateLoader +com.github.jknack.handlebars.internal.lang3.Validate +com.github.jknack.handlebars.internal.lang3.Validate$$Lambda/0x00003fc0012068b0 +com.github.jknack.handlebars.internal.lang3.StringUtils +com.github.jknack.handlebars.cache.NullTemplateCache +com.github.jknack.handlebars.helper.DefaultHelperRegistry +com.github.jknack.handlebars.internal.Files +com.github.jknack.handlebars.helper.WithHelper +com.github.jknack.handlebars.internal.lang3.Validate$$Lambda/0x00003fc001207ac0 +com.github.jknack.handlebars.helper.IfHelper +com.github.jknack.handlebars.helper.UnlessHelper +com.github.jknack.handlebars.helper.EachHelper +com.github.jknack.handlebars.helper.EmbeddedHelper +com.github.jknack.handlebars.helper.BlockHelper +com.github.jknack.handlebars.helper.PartialHelper +com.github.jknack.handlebars.helper.PrecompileHelper +com.github.jknack.handlebars.helper.I18nHelper +com.github.jknack.handlebars.helper.I18nHelper$1 +com.github.jknack.handlebars.helper.I18nHelper$2 +com.github.jknack.handlebars.helper.I18nSource +com.github.jknack.handlebars.helper.LookupHelper +com.github.jknack.handlebars.helper.LogHelper +com.github.jknack.handlebars.Decorator +com.github.jknack.handlebars.helper.InlineDecorator +com.github.jknack.handlebars.EscapingStrategy +com.github.jknack.handlebars.EscapingStrategy$Hbs +com.github.jknack.handlebars.internal.text.translate.CharSequenceTranslator +com.github.jknack.handlebars.internal.text.translate.LookupTranslator +com.github.jknack.handlebars.internal.text.translate.AggregateTranslator +java.security.InvalidParameterException +com.github.jknack.handlebars.EscapingStrategy$$Lambda/0x00003fc001200c00 +com.github.jknack.handlebars.EscapingStrategy$$Lambda/0x00003fc001208000 +com.github.jknack.handlebars.EscapingStrategy$$Lambda/0x00003fc001208228 +com.github.jknack.handlebars.EscapingStrategy$$Lambda/0x00003fc001208450 +com.github.jknack.handlebars.internal.HbsParserFactory +com.github.jknack.handlebars.internal.antlr.TokenSource +com.github.jknack.handlebars.internal.antlr.IntStream +com.github.jknack.handlebars.internal.antlr.TokenStream +com.github.jknack.handlebars.internal.antlr.Recognizer +com.github.jknack.handlebars.internal.antlr.Parser +com.github.jknack.handlebars.internal.HbsParser +com.github.jknack.handlebars.internal.HbsParserFactory$3 +com.github.jknack.handlebars.internal.antlr.Lexer +com.github.jknack.handlebars.internal.HbsLexer +com.github.jknack.handlebars.internal.HbsParserFactory$2 +com.github.jknack.handlebars.internal.antlr.ANTLRErrorStrategy +com.github.jknack.handlebars.Parser +com.github.jknack.handlebars.Formatter +com.github.jknack.handlebars.Formatter$$Lambda/0x00003fc00120b290 +com.google.common.cache.CacheBuilder +com.google.common.base.Supplier +com.google.common.base.Ticker +com.google.common.cache.CacheBuilder$3 +com.google.common.cache.Cache +com.google.common.base.Function +com.google.common.cache.LoadingCache +com.google.common.cache.AbstractCache$StatsCounter +com.google.common.cache.CacheBuilder$1 +com.google.common.base.Suppliers +com.google.common.base.Suppliers$SupplierOfInstance +com.google.common.cache.CacheStats +com.google.common.base.Preconditions +com.google.common.cache.CacheBuilder$2 +com.google.common.base.Ticker$1 +com.google.common.cache.LocalCache$LocalManualCache +com.google.common.cache.CacheLoader +com.google.common.cache.LocalCache$LocalManualCache$1 +com.google.common.cache.LocalCache +com.google.common.cache.ReferenceEntry +com.google.common.cache.LocalCache$ValueReference +com.google.common.cache.CacheLoader$UnsupportedLoadingOperationException +com.google.common.cache.CacheLoader$InvalidCacheLoadException +com.google.common.util.concurrent.UncheckedExecutionException +com.google.common.util.concurrent.ExecutionError +com.google.common.cache.LocalCache$1 +com.google.common.cache.LocalCache$2 +com.google.common.cache.LocalCache$Strength +com.google.common.cache.LocalCache$Strength$1 +com.google.common.cache.LocalCache$Strength$2 +com.google.common.cache.LocalCache$Strength$3 +com.google.common.base.MoreObjects +java.util.function.BiPredicate +com.google.common.base.Equivalence +com.google.common.base.FunctionalEquivalence +com.google.common.base.PairwiseEquivalence +com.google.common.base.Predicate +com.google.common.base.Equivalence$Equals +com.google.common.base.Equivalence$Identity +com.google.common.cache.Weigher +com.google.common.cache.CacheBuilder$OneWeigher +com.google.common.cache.RemovalListener +com.google.common.cache.CacheBuilder$NullListener +com.google.common.cache.LocalCache$EntryFactory +com.google.common.cache.LocalCache$EntryFactory$1 +com.google.common.cache.LocalCache$EntryFactory$2 +com.google.common.cache.LocalCache$EntryFactory$3 +com.google.common.cache.LocalCache$EntryFactory$4 +com.google.common.cache.LocalCache$EntryFactory$5 +com.google.common.cache.LocalCache$EntryFactory$6 +com.google.common.cache.LocalCache$EntryFactory$7 +com.google.common.cache.LocalCache$EntryFactory$8 +com.google.common.cache.LocalCache$Segment +com.google.common.cache.LocalCache$LoadingValueReference +com.google.common.cache.LocalCache$ComputingValueReference +com.github.jknack.handlebars.helper.StringHelpers +com.github.jknack.handlebars.helper.StringHelpers$1 +com.github.jknack.handlebars.helper.StringHelpers$2 +com.github.jknack.handlebars.helper.StringHelpers$3 +com.github.jknack.handlebars.helper.StringHelpers$4 +com.github.jknack.handlebars.helper.StringHelpers$5 +com.github.jknack.handlebars.helper.StringHelpers$6 +com.github.jknack.handlebars.helper.StringHelpers$7 +com.github.jknack.handlebars.helper.StringHelpers$8 +com.github.jknack.handlebars.helper.StringHelpers$9 +com.github.jknack.handlebars.helper.StringHelpers$10 +com.github.jknack.handlebars.helper.StringHelpers$11 +com.github.jknack.handlebars.helper.StringHelpers$12 +com.github.jknack.handlebars.helper.StringHelpers$13 +com.github.jknack.handlebars.helper.StringHelpers$14 +com.github.jknack.handlebars.helper.StringHelpers$15 +com.github.jknack.handlebars.helper.StringHelpers$16 +com.github.jknack.handlebars.helper.StringHelpers$17 +com.github.jknack.handlebars.helper.StringHelpers$18 +com.github.jknack.handlebars.helper.StringHelpers$19 +com.github.jknack.handlebars.helper.StringHelpers$20 +com.github.jknack.handlebars.helper.StringHelpers$21 +com.github.jknack.handlebars.helper.StringHelpers$19$1 +java.time.format.FormatStyle +com.github.jknack.handlebars.helper.NumberHelper +com.github.jknack.handlebars.helper.NumberHelper$1 +com.github.jknack.handlebars.helper.NumberHelper$2 +com.github.jknack.handlebars.helper.NumberHelper$3 +com.github.jknack.handlebars.helper.ConditionalHelpers +com.github.jknack.handlebars.helper.ConditionalHelpers$1 +com.github.jknack.handlebars.helper.ConditionalHelpers$2 +com.github.jknack.handlebars.helper.ConditionalHelpers$3 +com.github.jknack.handlebars.helper.ConditionalHelpers$4 +com.github.jknack.handlebars.helper.ConditionalHelpers$5 +com.github.jknack.handlebars.helper.ConditionalHelpers$6 +com.github.jknack.handlebars.helper.ConditionalHelpers$7 +com.github.jknack.handlebars.helper.ConditionalHelpers$8 +com.github.jknack.handlebars.helper.ConditionalHelpers$9 +com.github.jknack.handlebars.helper.AssignHelper +com.github.tomakehurst.wiremock.extension.responsetemplating.helpers.WireMockHelpers +com.github.tomakehurst.wiremock.extension.responsetemplating.helpers.WireMockHelpers$1 +com.github.tomakehurst.wiremock.extension.responsetemplating.helpers.WireMockHelpers$2 +com.github.tomakehurst.wiremock.extension.responsetemplating.helpers.WireMockHelpers$3 +com.github.tomakehurst.wiremock.extension.responsetemplating.helpers.WireMockHelpers$4 +com.github.tomakehurst.wiremock.extension.responsetemplating.helpers.WireMockHelpers$5 +com.github.tomakehurst.wiremock.extension.responsetemplating.helpers.WireMockHelpers$6 +com.github.tomakehurst.wiremock.extension.responsetemplating.helpers.WireMockHelpers$7 +com.github.tomakehurst.wiremock.extension.responsetemplating.helpers.WireMockHelpers$8 +com.github.tomakehurst.wiremock.extension.responsetemplating.helpers.WireMockHelpers$9 +com.github.tomakehurst.wiremock.extension.responsetemplating.helpers.WireMockHelpers$10 +com.github.tomakehurst.wiremock.extension.responsetemplating.helpers.WireMockHelpers$11 +com.github.tomakehurst.wiremock.extension.responsetemplating.helpers.WireMockHelpers$12 +com.github.tomakehurst.wiremock.extension.responsetemplating.helpers.WireMockHelpers$13 +com.github.tomakehurst.wiremock.extension.responsetemplating.helpers.WireMockHelpers$14 +com.github.tomakehurst.wiremock.extension.responsetemplating.helpers.WireMockHelpers$15 +com.github.tomakehurst.wiremock.extension.responsetemplating.helpers.WireMockHelpers$16 +com.github.tomakehurst.wiremock.extension.responsetemplating.helpers.WireMockHelpers$17 +com.github.tomakehurst.wiremock.extension.responsetemplating.helpers.WireMockHelpers$18 +com.github.tomakehurst.wiremock.extension.responsetemplating.helpers.WireMockHelpers$19 +com.github.tomakehurst.wiremock.extension.responsetemplating.helpers.WireMockHelpers$20 +com.github.tomakehurst.wiremock.extension.responsetemplating.helpers.WireMockHelpers$21 +com.github.tomakehurst.wiremock.extension.responsetemplating.helpers.WireMockHelpers$22 +com.github.tomakehurst.wiremock.extension.responsetemplating.helpers.WireMockHelpers$23 +com.github.tomakehurst.wiremock.extension.responsetemplating.helpers.WireMockHelpers$24 +com.github.tomakehurst.wiremock.extension.responsetemplating.helpers.WireMockHelpers$25 +com.github.tomakehurst.wiremock.extension.responsetemplating.helpers.WireMockHelpers$26 +com.github.tomakehurst.wiremock.extension.responsetemplating.helpers.WireMockHelpers$27 +com.github.tomakehurst.wiremock.extension.responsetemplating.helpers.WireMockHelpers$28 +com.github.tomakehurst.wiremock.extension.responsetemplating.helpers.WireMockHelpers$29 +com.github.tomakehurst.wiremock.extension.responsetemplating.helpers.WireMockHelpers$30 +com.github.tomakehurst.wiremock.extension.responsetemplating.helpers.WireMockHelpers$31 +com.github.tomakehurst.wiremock.extension.responsetemplating.helpers.WireMockHelpers$32 +com.github.tomakehurst.wiremock.extension.responsetemplating.helpers.WireMockHelpers$33 +com.github.tomakehurst.wiremock.extension.responsetemplating.helpers.WireMockHelpers$34 +com.github.tomakehurst.wiremock.extension.responsetemplating.helpers.HandlebarsHelper +com.github.tomakehurst.wiremock.extension.responsetemplating.helpers.HandlebarsXPathHelper +com.github.tomakehurst.wiremock.common.xml.XPathException +com.github.tomakehurst.wiremock.extension.responsetemplating.helpers.HandlebarsSoapHelper +com.github.tomakehurst.wiremock.extension.responsetemplating.helpers.HandlebarsJsonPathHelper +com.jayway.jsonpath.InvalidJsonException +com.jayway.jsonpath.InvalidPathException +com.jayway.jsonpath.Configuration +com.jayway.jsonpath.Configuration$Defaults +com.jayway.jsonpath.internal.DefaultsImpl +com.jayway.jsonpath.spi.json.JsonProvider +com.jayway.jsonpath.spi.mapper.MappingProvider +com.jayway.jsonpath.spi.mapper.JsonSmartMappingProvider +net.minidev.json.writer.JsonReaderI +com.jayway.jsonpath.spi.mapper.JsonSmartMappingProvider$LongReader +com.jayway.jsonpath.spi.mapper.JsonSmartMappingProvider$IntegerReader +com.jayway.jsonpath.spi.mapper.JsonSmartMappingProvider$DoubleReader +com.jayway.jsonpath.spi.mapper.JsonSmartMappingProvider$FloatReader +com.jayway.jsonpath.spi.mapper.JsonSmartMappingProvider$BigDecimalReader +com.jayway.jsonpath.spi.mapper.JsonSmartMappingProvider$StringReader +com.jayway.jsonpath.spi.mapper.JsonSmartMappingProvider$DateReader +com.jayway.jsonpath.spi.mapper.JsonSmartMappingProvider$BigIntegerReader +com.jayway.jsonpath.spi.mapper.JsonSmartMappingProvider$BooleanReader +com.jayway.jsonpath.spi.mapper.MappingException +net.minidev.json.writer.JsonReader +net.minidev.json.writer.DefaultMapperCollection +net.minidev.json.writer.ArraysMapper +net.minidev.json.writer.ArraysMapper$GenericMapper +net.minidev.json.writer.CollectionMapper$ListClass +net.minidev.json.writer.CollectionMapper$MapClass +net.minidev.json.writer.BeansMapper$Bean +net.minidev.json.writer.CollectionMapper$ListType +net.minidev.json.writer.CollectionMapper$MapType +net.minidev.json.writer.MapperRemapped +net.minidev.json.writer.DefaultMapper +net.minidev.json.writer.DefaultMapperOrdered +net.minidev.json.writer.BeansMapper +net.minidev.json.writer.BeansMapper$1 +net.minidev.json.writer.ArraysMapper$1 +net.minidev.json.writer.ArraysMapper$2 +net.minidev.json.writer.ArraysMapper$3 +net.minidev.json.writer.ArraysMapper$4 +net.minidev.json.writer.ArraysMapper$5 +net.minidev.json.writer.ArraysMapper$6 +net.minidev.json.writer.ArraysMapper$7 +net.minidev.json.writer.ArraysMapper$8 +net.minidev.json.writer.ArraysMapper$9 +net.minidev.json.writer.ArraysMapper$10 +net.minidev.json.writer.ArraysMapper$11 +net.minidev.json.writer.ArraysMapper$12 +net.minidev.json.writer.ArraysMapper$13 +net.minidev.json.writer.ArraysMapper$14 +net.minidev.json.writer.ArraysMapper$15 +net.minidev.json.writer.ArraysMapper$16 +net.minidev.json.JSONAware +net.minidev.json.JSONAwareEx +net.minidev.json.JSONStreamAware +net.minidev.json.JSONStreamAwareEx +net.minidev.json.JSONArray +net.minidev.json.JSONObject +com.jayway.jsonpath.spi.mapper.JsonSmartMappingProvider$1 +com.jayway.jsonpath.Configuration$ConfigurationBuilder +com.jayway.jsonpath.Option +com.jayway.jsonpath.spi.json.AbstractJsonProvider +com.jayway.jsonpath.spi.json.JsonSmartJsonProvider +net.minidev.json.parser.ParseException +net.minidev.json.JSONValue +net.minidev.json.writer.CompessorMapper +net.minidev.json.writer.UpdaterMapper +net.minidev.json.JSONStyle +net.minidev.json.JStylerObj$MustProtect +net.minidev.json.JStylerObj$StringProtector +net.minidev.json.JStylerObj +net.minidev.json.JStylerObj$MPSimple +net.minidev.json.JStylerObj$MPTrue +net.minidev.json.JStylerObj$MPAgressive +net.minidev.json.JStylerObj$EscapeLT +net.minidev.json.JStylerObj$Escape4Web +net.minidev.json.reader.JsonWriter +net.minidev.json.reader.JsonWriterI +net.minidev.json.reader.JsonWriter$1 +net.minidev.json.reader.JsonWriter$2 +net.minidev.json.reader.JsonWriter$3 +net.minidev.json.reader.JsonWriter$4 +net.minidev.json.reader.JsonWriter$5 +net.minidev.json.reader.JsonWriter$6 +net.minidev.json.reader.JsonWriter$7 +net.minidev.json.reader.BeansWriterASM +net.minidev.asm.FieldFilter +net.minidev.json.reader.BeansWriter +net.minidev.json.reader.ArrayWriter +net.minidev.json.reader.JsonWriter$8 +net.minidev.json.reader.JsonWriter$9 +net.minidev.json.reader.JsonWriter$10 +net.minidev.json.reader.JsonWriter$11 +net.minidev.json.reader.JsonWriter$12 +net.minidev.json.reader.JsonWriter$13 +net.minidev.json.reader.JsonWriter$14 +net.minidev.json.reader.JsonWriter$15 +net.minidev.json.reader.JsonWriter$16 +net.minidev.json.reader.JsonWriter$17 +net.minidev.json.reader.JsonWriter$18 +net.minidev.json.reader.JsonWriter$WriterByInterface +java.util.RegularEnumSet$EnumSetIterator +com.jayway.jsonpath.JsonPath +com.jayway.jsonpath.ParseContext +com.jayway.jsonpath.PathNotFoundException +com.jayway.jsonpath.internal.ParseContextImpl +com.jayway.jsonpath.ReadContext +com.jayway.jsonpath.WriteContext +com.jayway.jsonpath.DocumentContext +com.github.tomakehurst.wiremock.extension.responsetemplating.helpers.HandlebarsRandomValuesHelper +com.github.tomakehurst.wiremock.extension.responsetemplating.helpers.HostnameHelper +jdk.internal.access.JavaNetInetAddressAccess +java.net.InetAddress$1 +jdk.internal.util.Exceptions +sun.security.util.SecurityProperties +java.security.Security +java.security.Security$1 +java.security.Security$SecPropLoader +java.security.Security$SecPropLoader$LoadingMode +java.nio.file.attribute.FileAttribute +sun.nio.fs.UnixFileModeAttribute +sun.nio.fs.UnixChannelFactory +sun.nio.fs.UnixChannelFactory$Flags +java.nio.channels.InterruptibleChannel +java.nio.channels.spi.AbstractInterruptibleChannel +java.nio.channels.ByteChannel +java.nio.channels.SeekableByteChannel +java.nio.channels.GatheringByteChannel +java.nio.channels.ScatteringByteChannel +java.nio.channels.FileChannel +sun.nio.ch.FileChannelImpl +sun.nio.ch.NativeDispatcher +sun.nio.ch.FileDispatcher +sun.nio.ch.UnixFileDispatcherImpl +sun.nio.ch.FileDispatcherImpl +sun.nio.ch.IOUtil +sun.nio.ch.Interruptible +java.nio.channels.spi.AbstractInterruptibleChannel$1 +sun.nio.ch.NativeThreadSet +sun.nio.ch.FileChannelImpl$Closer +java.nio.channels.Channels +sun.nio.ch.Streams +java.nio.channels.SelectableChannel +java.nio.channels.spi.AbstractSelectableChannel +java.nio.channels.NetworkChannel +java.nio.channels.SocketChannel +sun.nio.ch.SelChImpl +sun.nio.ch.SocketChannelImpl +sun.nio.ch.ChannelInputStream +sun.nio.ch.NativeThread +sun.nio.ch.Util +sun.nio.ch.Util$1 +sun.nio.ch.Util$BufferCache +sun.nio.ch.IOStatus +jdk.internal.access.JavaSecurityPropertiesAccess +java.security.Security$2 +java.net.InetAddress$InetAddressHolder +java.net.InetAddressImpl +java.net.Inet6AddressImpl +java.net.Inet4AddressImpl +java.net.spi.InetAddressResolver$LookupPolicy +java.net.spi.InetAddressResolver +java.net.InetAddress$PlatformResolver +java.util.concurrent.ConcurrentSkipListMap$KeySet +java.util.concurrent.ConcurrentSkipListMap$Iter +java.util.concurrent.ConcurrentSkipListMap$KeyIterator +java.net.InetAddress$Addresses +java.net.InetAddress$NameServiceAddresses +java.net.spi.InetAddressResolverProvider +java.net.InetAddress$$Lambda/0x00003fc001127d70 +java.net.Inet4Address +java.net.Inet6Address +java.net.Inet6Address$Inet6AddressHolder +java.net.InetAddress$$Lambda/0x00003fc0011281b8 +sun.net.InetAddressCachePolicy +java.net.InetAddress$CachedLookup +java.util.concurrent.ThreadLocalRandom +jdk.internal.util.random.RandomSupport +java.util.concurrent.ThreadLocalRandom$Access +jdk.internal.access.JavaUtilConcurrentTLRAccess +java.util.concurrent.ThreadLocalRandom$Access$1 +java.lang.invoke.VarHandleLongs$FieldInstanceReadOnly +java.lang.invoke.VarHandleLongs$FieldInstanceReadWrite +java.net.InetAddress$CachedLocalHost +com.github.tomakehurst.wiremock.extension.responsetemplating.helpers.HandlebarsCurrentDateHelper +com.github.tomakehurst.wiremock.extension.responsetemplating.helpers.ParseDateHelper +com.github.tomakehurst.wiremock.extension.responsetemplating.helpers.TruncateDateTimeHelper +com.github.tomakehurst.wiremock.extension.responsetemplating.helpers.StringTrimHelper +com.github.tomakehurst.wiremock.extension.responsetemplating.helpers.Base64Helper +com.github.tomakehurst.wiremock.extension.responsetemplating.helpers.UrlEncodingHelper +com.github.tomakehurst.wiremock.extension.responsetemplating.helpers.FormDataHelper +com.github.tomakehurst.wiremock.extension.responsetemplating.helpers.RegexExtractHelper +java.util.regex.PatternSyntaxException +com.github.tomakehurst.wiremock.extension.responsetemplating.helpers.SizeHelper +com.github.tomakehurst.wiremock.extension.responsetemplating.helpers.PickRandomHelper +com.github.tomakehurst.wiremock.extension.responsetemplating.helpers.RandomIntHelper +com.github.tomakehurst.wiremock.extension.responsetemplating.helpers.RandomDecimalHelper +com.github.tomakehurst.wiremock.extension.responsetemplating.helpers.RangeHelper +com.github.tomakehurst.wiremock.extension.responsetemplating.helpers.ArrayHelper +com.github.tomakehurst.wiremock.extension.responsetemplating.helpers.AbstractArrayHelper +com.github.tomakehurst.wiremock.extension.responsetemplating.helpers.ArrayAddHelper +com.github.tomakehurst.wiremock.extension.responsetemplating.helpers.ArrayRemoveHelper +com.github.tomakehurst.wiremock.extension.responsetemplating.helpers.ParseJsonHelper +com.fasterxml.jackson.core.type.TypeReference +com.github.tomakehurst.wiremock.extension.responsetemplating.helpers.ParseJsonHelper$1 +com.github.tomakehurst.wiremock.extension.responsetemplating.helpers.ParseJsonHelper$2 +com.github.tomakehurst.wiremock.extension.responsetemplating.helpers.MatchesRegexHelper +com.github.tomakehurst.wiremock.extension.responsetemplating.helpers.ContainsHelper +com.github.tomakehurst.wiremock.extension.responsetemplating.helpers.MathsHelper +com.github.tomakehurst.wiremock.extension.responsetemplating.helpers.ValHelper +com.github.tomakehurst.wiremock.extension.responsetemplating.helpers.JoinHelper +com.github.tomakehurst.wiremock.extension.responsetemplating.helpers.AbstractFormattingHelper +com.github.tomakehurst.wiremock.extension.responsetemplating.helpers.FormatJsonHelper +com.github.tomakehurst.wiremock.extension.responsetemplating.helpers.FormatXmlHelper +com.github.tomakehurst.wiremock.extension.responsetemplating.helpers.ToJsonHelper +com.github.tomakehurst.wiremock.extension.responsetemplating.helpers.JsonMergeHelper +com.github.tomakehurst.wiremock.extension.responsetemplating.helpers.JsonRemoveHelper +com.jayway.jsonpath.InvalidModificationException +com.github.tomakehurst.wiremock.extension.responsetemplating.helpers.HelperUtils +com.jayway.jsonpath.spi.json.JacksonJsonProvider +com.fasterxml.jackson.databind.ObjectReader +com.fasterxml.jackson.core.util.JsonParserDelegate +com.fasterxml.jackson.core.filter.FilteringParserDelegate +com.fasterxml.jackson.databind.node.ArrayNode +com.fasterxml.jackson.core.filter.TokenFilter +com.fasterxml.jackson.core.filter.JsonPointerBasedFilter +com.fasterxml.jackson.databind.deser.std.UntypedObjectDeserializerNR +sun.reflect.generics.tree.TypeVariableSignature +sun.reflect.generics.reflectiveObjects.LazyReflectiveObjectGenerator +sun.reflect.generics.reflectiveObjects.TypeVariableImpl +com.fasterxml.jackson.databind.type.TypeBindings$AsKey +java.lang.reflect.ParameterizedType +sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl +com.fasterxml.jackson.databind.type.TypeBindings$TypeParamStash +com.fasterxml.jackson.databind.deser.BasicDeserializerFactory$ContainerDefaultMappings +com.fasterxml.jackson.databind.annotation.JacksonStdImpl +jdk.proxy2.$Proxy15 +com.fasterxml.jackson.databind.deser.std.NumberDeserializers +com.fasterxml.jackson.databind.deser.std.NumberDeserializers$PrimitiveOrWrapperDeserializer +com.fasterxml.jackson.databind.deser.std.NumberDeserializers$IntegerDeserializer +com.fasterxml.jackson.databind.deser.std.NumberDeserializers$BooleanDeserializer +com.fasterxml.jackson.databind.deser.std.NumberDeserializers$LongDeserializer +com.fasterxml.jackson.databind.deser.std.NumberDeserializers$DoubleDeserializer +com.fasterxml.jackson.databind.deser.std.NumberDeserializers$CharacterDeserializer +com.fasterxml.jackson.databind.deser.std.NumberDeserializers$ByteDeserializer +com.fasterxml.jackson.databind.deser.std.NumberDeserializers$ShortDeserializer +com.fasterxml.jackson.databind.deser.std.NumberDeserializers$FloatDeserializer +com.fasterxml.jackson.databind.deser.std.NumberDeserializers$NumberDeserializer +com.fasterxml.jackson.databind.deser.std.NumberDeserializers$BigDecimalDeserializer +com.fasterxml.jackson.databind.deser.std.NumberDeserializers$BigIntegerDeserializer +com.fasterxml.jackson.databind.deser.std.StdKeyDeserializer$StringKD +com.fasterxml.jackson.databind.deser.ContextualKeyDeserializer +com.github.tomakehurst.wiremock.common.Json +com.github.tomakehurst.wiremock.common.Json$2 +com.github.tomakehurst.wiremock.common.Json$1 +com.fasterxml.jackson.databind.Module +com.fasterxml.jackson.databind.module.SimpleModule +com.fasterxml.jackson.datatype.jsr310.JavaTimeModule +com.fasterxml.jackson.databind.module.SimpleAbstractTypeResolver +com.fasterxml.jackson.datatype.jsr310.deser.JSR310DeserializerBase +com.fasterxml.jackson.datatype.jsr310.deser.JSR310DateTimeDeserializerBase +com.fasterxml.jackson.datatype.jsr310.deser.InstantDeserializer +com.fasterxml.jackson.datatype.jsr310.deser.DurationDeserializer +com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer +com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer +com.fasterxml.jackson.datatype.jsr310.deser.LocalTimeDeserializer +com.fasterxml.jackson.datatype.jsr310.deser.MonthDayDeserializer +com.fasterxml.jackson.datatype.jsr310.deser.OffsetTimeDeserializer +com.fasterxml.jackson.datatype.jsr310.deser.YearDeserializer +com.fasterxml.jackson.datatype.jsr310.deser.YearMonthDeserializer +com.fasterxml.jackson.datatype.jsr310.deser.JavaTimeDeserializerModifier +com.fasterxml.jackson.datatype.jsr310.ser.JavaTimeSerializerModifier +com.fasterxml.jackson.datatype.jsr310.ser.JSR310SerializerBase +com.fasterxml.jackson.datatype.jsr310.ser.JSR310FormattedSerializerBase +com.fasterxml.jackson.datatype.jsr310.ser.DurationSerializer +com.fasterxml.jackson.datatype.jsr310.ser.InstantSerializerBase +com.fasterxml.jackson.datatype.jsr310.ser.InstantSerializer +com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer +com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer +com.fasterxml.jackson.datatype.jsr310.ser.LocalTimeSerializer +com.fasterxml.jackson.datatype.jsr310.ser.MonthDaySerializer +com.fasterxml.jackson.datatype.jsr310.ser.OffsetDateTimeSerializer +com.fasterxml.jackson.datatype.jsr310.ser.OffsetTimeSerializer +com.fasterxml.jackson.datatype.jsr310.ser.YearSerializer +com.fasterxml.jackson.datatype.jsr310.ser.YearMonthSerializer +com.fasterxml.jackson.datatype.jsr310.ser.ZonedDateTimeSerializer +com.fasterxml.jackson.datatype.jsr310.ser.ZoneIdSerializer +com.fasterxml.jackson.datatype.jsr310.ser.key.ZonedDateTimeKeySerializer +com.fasterxml.jackson.datatype.jsr310.deser.key.Jsr310KeyDeserializer +com.fasterxml.jackson.datatype.jsr310.deser.key.DurationKeyDeserializer +com.fasterxml.jackson.datatype.jsr310.deser.key.InstantKeyDeserializer +com.fasterxml.jackson.datatype.jsr310.deser.key.LocalDateTimeKeyDeserializer +com.fasterxml.jackson.datatype.jsr310.deser.key.LocalDateKeyDeserializer +com.fasterxml.jackson.datatype.jsr310.deser.key.LocalTimeKeyDeserializer +com.fasterxml.jackson.datatype.jsr310.deser.key.MonthDayKeyDeserializer +com.fasterxml.jackson.datatype.jsr310.deser.key.OffsetDateTimeKeyDeserializer +com.fasterxml.jackson.datatype.jsr310.deser.key.OffsetTimeKeyDeserializer +com.fasterxml.jackson.datatype.jsr310.deser.key.PeriodKeyDeserializer +com.fasterxml.jackson.datatype.jsr310.deser.key.YearKeyDeserializer +com.fasterxml.jackson.datatype.jsr310.deser.key.YearMonthKeyDeserializer +com.fasterxml.jackson.datatype.jsr310.deser.key.ZonedDateTimeKeyDeserializer +com.fasterxml.jackson.datatype.jsr310.deser.key.ZoneIdKeyDeserializer +com.fasterxml.jackson.datatype.jsr310.deser.key.ZoneOffsetKeyDeserializer +com.fasterxml.jackson.datatype.jsr310.PackageVersion +com.fasterxml.jackson.core.util.VersionUtil +com.fasterxml.jackson.core.Version +com.fasterxml.jackson.datatype.jsr310.JavaTimeFeature +com.fasterxml.jackson.databind.ObjectMapper$1 +com.fasterxml.jackson.databind.deser.Deserializers$Base +com.fasterxml.jackson.databind.module.SimpleDeserializers +java.time.Instant +java.time.ZoneOffset +java.util.regex.Pattern$$Lambda/0x800000028 +java.util.regex.Pattern$Pos +java.time.format.DateTimeFormatter +java.time.format.DateTimeFormatterBuilder +java.time.temporal.TemporalQuery +java.time.format.DateTimeFormatterBuilder$$Lambda/0x80000001c +java.time.temporal.TemporalField +java.time.temporal.ChronoField +java.time.temporal.ChronoUnit +java.time.temporal.TemporalAmount +java.time.Duration +java.time.temporal.ValueRange +java.time.temporal.IsoFields +java.time.temporal.IsoFields$Field +java.time.temporal.IsoFields$Field$1 +java.time.temporal.IsoFields$Field$2 +java.time.temporal.IsoFields$Field$3 +java.time.temporal.IsoFields$Field$4 +java.time.temporal.IsoFields$Unit +java.time.temporal.JulianFields +java.time.temporal.JulianFields$Field +java.time.format.SignStyle +java.time.format.DateTimeFormatterBuilder$DateTimePrinterParser +java.time.format.DateTimeFormatterBuilder$NumberPrinterParser +java.time.format.DateTimeFormatterBuilder$CharLiteralPrinterParser +java.time.format.ResolverStyle +java.time.chrono.Chronology +java.time.chrono.AbstractChronology +java.time.chrono.IsoChronology +java.time.format.DateTimeFormatterBuilder$CompositePrinterParser +java.time.format.DecimalStyle +java.time.format.DateTimeFormatterBuilder$SettingsParser +java.time.format.DateTimeFormatterBuilder$OffsetIdPrinterParser +java.time.format.DateTimeFormatterBuilder$NanosPrinterParser +java.time.format.DateTimeFormatterBuilder$ZoneIdPrinterParser +java.time.format.DateTimeFormatterBuilder$StringLiteralPrinterParser +java.time.format.DateTimeFormatterBuilder$InstantPrinterParser +java.time.format.TextStyle +java.time.format.DateTimeTextProvider$LocaleStore +java.util.AbstractMap$SimpleImmutableEntry +java.time.format.DateTimeTextProvider +java.time.format.DateTimeTextProvider$1 +java.time.format.DateTimeFormatterBuilder$1 +java.time.format.DateTimeFormatterBuilder$TextPrinterParser +java.time.chrono.ChronoPeriod +java.time.Period +java.time.format.DateTimeFormatter$$Lambda/0x80000001a +java.time.format.DateTimeFormatter$$Lambda/0x80000001b +com.fasterxml.jackson.datatype.jsr310.deser.InstantDeserializer$$Lambda/0x00003fc00124acc8 +com.fasterxml.jackson.datatype.jsr310.deser.InstantDeserializer$FromIntegerArguments +com.fasterxml.jackson.datatype.jsr310.deser.InstantDeserializer$$Lambda/0x00003fc00124b128 +com.fasterxml.jackson.datatype.jsr310.deser.InstantDeserializer$FromDecimalArguments +com.fasterxml.jackson.datatype.jsr310.deser.InstantDeserializer$$Lambda/0x00003fc00124b588 +com.fasterxml.jackson.datatype.jsr310.deser.InstantDeserializer$$Lambda/0x00003fc00124b7d0 +com.fasterxml.jackson.datatype.jsr310.deser.InstantDeserializer$$Lambda/0x00003fc00124ba08 +com.fasterxml.jackson.datatype.jsr310.deser.InstantDeserializer$$Lambda/0x00003fc00124bc50 +com.fasterxml.jackson.datatype.jsr310.deser.InstantDeserializer$$Lambda/0x00003fc00124be98 +com.fasterxml.jackson.datatype.jsr310.deser.InstantDeserializer$$Lambda/0x00003fc00124c0e0 +com.fasterxml.jackson.datatype.jsr310.deser.InstantDeserializer$$Lambda/0x00003fc00124c318 +com.fasterxml.jackson.datatype.jsr310.deser.InstantDeserializer$$Lambda/0x00003fc00124c560 +com.fasterxml.jackson.datatype.jsr310.deser.InstantDeserializer$$Lambda/0x00003fc00124c7a8 +com.fasterxml.jackson.datatype.jsr310.deser.InstantDeserializer$$Lambda/0x00003fc00124c9f0 +com.fasterxml.jackson.databind.type.ClassKey +java.time.chrono.ChronoLocalDate +java.time.LocalDate +java.time.LocalTime +java.time.MonthDay +java.time.OffsetTime +com.fasterxml.jackson.datatype.jsr310.deser.JSR310StringParsableDeserializer +java.time.Year +java.time.YearMonth +com.fasterxml.jackson.databind.util.ArrayBuilders +com.fasterxml.jackson.databind.deser.std.DelegatingDeserializer +com.fasterxml.jackson.datatype.jsr310.deser.OneBasedMonthDeserializer +com.fasterxml.jackson.datatype.jsr310.ser.OneBasedMonthSerializer +com.fasterxml.jackson.databind.ser.Serializers$Base +com.fasterxml.jackson.databind.module.SimpleSerializers +com.fasterxml.jackson.datatype.jsr310.JavaTimeModule$JavaTimeSerializers +java.util.function.ToLongFunction +com.fasterxml.jackson.datatype.jsr310.ser.InstantSerializer$$Lambda/0x00003fc00124eae0 +com.fasterxml.jackson.datatype.jsr310.ser.InstantSerializer$$Lambda/0x00003fc00124ed08 +com.fasterxml.jackson.datatype.jsr310.ser.InstantSerializer$$Lambda/0x00003fc00124ef30 +java.lang.invoke.LambdaForm$DMH/0x00003fc001250000 +java.lang.invoke.LambdaForm$DMH/0x00003fc001250400 +com.fasterxml.jackson.datatype.jsr310.ser.OffsetDateTimeSerializer$$Lambda/0x00003fc00124f158 +com.fasterxml.jackson.datatype.jsr310.ser.OffsetDateTimeSerializer$$Lambda/0x00003fc00124f380 +com.fasterxml.jackson.datatype.jsr310.ser.OffsetDateTimeSerializer$$Lambda/0x00003fc00124f5a8 +com.fasterxml.jackson.datatype.jsr310.ser.ZonedDateTimeSerializer$$Lambda/0x00003fc00124f7d0 +java.lang.invoke.LambdaForm$DMH/0x00003fc001250800 +com.fasterxml.jackson.datatype.jsr310.ser.ZonedDateTimeSerializer$$Lambda/0x00003fc00124f9f8 +com.fasterxml.jackson.datatype.jsr310.ser.ZonedDateTimeSerializer$$Lambda/0x00003fc00124fc20 +com.fasterxml.jackson.databind.module.SimpleKeyDeserializers +com.fasterxml.jackson.databind.deser.ValueInstantiators$Base +com.fasterxml.jackson.datatype.jsr310.JavaTimeModule$1 +com.github.tomakehurst.wiremock.extension.responsetemplating.helpers.JsonArrayAddHelper +com.github.tomakehurst.wiremock.extension.responsetemplating.helpers.SystemValueHelper +com.github.tomakehurst.wiremock.extension.responsetemplating.SystemKeyAuthoriser +java.util.regex.Pattern$SliceI +com.github.tomakehurst.wiremock.extension.responsetemplating.LazyTemplateEngine +com.github.tomakehurst.wiremock.extension.Extensions$$Lambda/0x00003fc0012551c8 +com.github.tomakehurst.wiremock.extension.Extensions$$Lambda/0x00003fc001255410 +com.github.tomakehurst.wiremock.extension.Extensions$$Lambda/0x00003fc001255658 +com.github.tomakehurst.wiremock.extension.ExtensionFactory +com.github.tomakehurst.wiremock.extension.Extensions$$Lambda/0x00003fc001255aa0 +com.github.tomakehurst.wiremock.extension.Extensions$$Lambda/0x00003fc001255ce8 +com.github.tomakehurst.wiremock.extension.Extensions$$Lambda/0x00003fc001255f38 +com.github.tomakehurst.wiremock.extension.Extensions$$Lambda/0x00003fc001256180 +java.util.function.Function$$Lambda/0x00003fc00112c740 +com.github.tomakehurst.wiremock.extension.TemplateHelperProviderExtension +com.github.tomakehurst.wiremock.extension.ExtensionLoader +com.github.tomakehurst.wiremock.extension.ExtensionLoader$$Lambda/0x00003fc0012567e0 +com.github.tomakehurst.wiremock.extension.Extensions$$Lambda/0x00003fc001256a40 +com.github.tomakehurst.wiremock.extension.Extensions$$Lambda/0x00003fc001256c88 +com.github.tomakehurst.wiremock.extension.Extensions$$Lambda/0x00003fc001256ed0 +com.github.tomakehurst.wiremock.extension.Extensions$$Lambda/0x00003fc001257120 +java.lang.invoke.LambdaForm$DMH/0x00003fc001250c00 +java.util.stream.Collectors$$Lambda/0x00003fc00112c988 +java.util.stream.Collectors$$Lambda/0x00003fc00112cbc8 +com.github.tomakehurst.wiremock.extension.Extensions$$Lambda/0x00003fc001257348 +com.github.tomakehurst.wiremock.extension.Extensions$$Lambda/0x00003fc001257590 +com.github.tomakehurst.wiremock.extension.Extensions$$Lambda/0x00003fc0012577d8 +com.github.tomakehurst.wiremock.extension.Extensions$$Lambda/0x00003fc001257a20 +com.github.tomakehurst.wiremock.extension.Extensions$$Lambda/0x00003fc001257c68 +com.github.tomakehurst.wiremock.extension.TemplateModelDataProviderExtension +com.google.common.cache.LocalCache$AccessQueue +com.google.common.cache.LocalCache$AbstractReferenceEntry +com.google.common.cache.LocalCache$AccessQueue$1 +com.github.tomakehurst.wiremock.extension.StubLifecycleListener +com.github.tomakehurst.wiremock.extension.ResponseDefinitionTransformerV2 +com.github.tomakehurst.wiremock.extension.responsetemplating.ResponseTemplateTransformer +com.github.jknack.handlebars.HandlebarsException +com.github.tomakehurst.wiremock.extension.Extensions$$Lambda/0x00003fc001253680 +com.github.tomakehurst.wiremock.common.Lazy +org.wiremock.webhooks.WebhookTransformer +java.util.stream.Collectors$$Lambda/0x00003fc00112ce20 +java.util.stream.Collectors$$Lambda/0x00003fc00112d048 +java.util.stream.Collectors$$Lambda/0x00003fc00112d280 +java.util.stream.Collectors$$Lambda/0x00003fc00112d4d0 +com.github.tomakehurst.wiremock.extension.ServeEventListener +com.github.tomakehurst.wiremock.extension.PostServeAction +org.wiremock.webhooks.Webhooks +com.github.tomakehurst.wiremock.common.ProhibitedNetworkAddressException +com.github.tomakehurst.wiremock.http.client.LazyHttpClient +com.github.tomakehurst.wiremock.extension.Extensions$$Lambda/0x00003fc0012519e0 +com.github.tomakehurst.wiremock.common.DataTruncationSettings +com.github.tomakehurst.wiremock.matching.ValueMatcher +com.github.tomakehurst.wiremock.matching.NamedValueMatcher +com.github.tomakehurst.wiremock.matching.RequestMatcher +com.github.tomakehurst.wiremock.matching.RequestMatcherExtension +com.github.tomakehurst.wiremock.verification.AbstractRequestJournal +com.github.tomakehurst.wiremock.verification.StoreBackedRequestJournal +com.github.tomakehurst.wiremock.stubbing.AbstractScenarios +com.github.tomakehurst.wiremock.stubbing.InMemoryScenarios +com.github.tomakehurst.wiremock.stubbing.AbstractStubMappings +com.github.tomakehurst.wiremock.stubbing.StoreBackedStubMappings +com.github.tomakehurst.wiremock.admin.NotFoundException +com.github.tomakehurst.wiremock.extension.AbstractTransformer +com.github.tomakehurst.wiremock.extension.ResponseDefinitionTransformer +com.github.tomakehurst.wiremock.store.files.PathBased +com.github.tomakehurst.wiremock.store.files.FileSourceBlobStore +com.github.tomakehurst.wiremock.store.files.BlobStoreFileSource +com.github.tomakehurst.wiremock.common.InputStreamSource +com.github.tomakehurst.wiremock.common.BinaryFile +com.github.tomakehurst.wiremock.store.files.BlobStoreBinaryFile +com.github.tomakehurst.wiremock.common.TextFile +com.github.tomakehurst.wiremock.store.files.BlobStoreTextFile +com.github.tomakehurst.wiremock.verification.NearMissCalculator +com.github.tomakehurst.wiremock.matching.MatchResult +com.github.tomakehurst.wiremock.matching.MemoizingMatchResult +com.github.tomakehurst.wiremock.verification.NearMiss +com.github.tomakehurst.wiremock.verification.NearMissCalculator$$Lambda/0x00003fc00125bda8 +com.github.tomakehurst.wiremock.recording.Recorder +com.github.tomakehurst.wiremock.recording.NotRecordingException +com.github.tomakehurst.wiremock.store.InMemoryRecorderStateStore +com.github.tomakehurst.wiremock.recording.RecorderState +com.github.tomakehurst.wiremock.recording.RecordingStatus +com.github.tomakehurst.wiremock.extension.GlobalSettingsListener +com.github.tomakehurst.wiremock.extension.MappingsLoaderExtension +com.github.tomakehurst.wiremock.extension.Extensions$$Lambda/0x00003fc00125d1f8 +com.github.tomakehurst.wiremock.core.WireMockApp$$Lambda/0x00003fc00125d430 +com.github.tomakehurst.wiremock.common.HttpsSettings$Builder +com.github.tomakehurst.wiremock.common.HttpsSettings +com.github.tomakehurst.wiremock.http.HttpClientFactory +javax.net.ssl.HostnameVerifier +javax.net.SocketFactory +javax.net.ssl.SSLSocketFactory +com.github.tomakehurst.wiremock.http.ssl.HostVerifyingSSLSocketFactory +org.apache.hc.client5.http.socket.ConnectionSocketFactory +org.apache.hc.client5.http.socket.LayeredConnectionSocketFactory +java.security.KeyException +java.security.KeyManagementException +com.github.tomakehurst.wiremock.http.ssl.TrustStrategy +java.security.UnrecoverableEntryException +org.apache.hc.core5.http.MessageHeaders +org.apache.hc.core5.http.HttpMessage +org.apache.hc.core5.http.HttpRequest +org.apache.hc.core5.http.HttpEntityContainer +org.apache.hc.core5.http.ClassicHttpRequest +org.apache.hc.client5.http.config.Configurable +org.apache.hc.client5.http.classic.methods.HttpUriRequest +org.apache.hc.client5.http.AuthenticationStrategy +org.apache.hc.client5.http.auth.Credentials +org.apache.hc.client5.http.auth.CredentialsProvider +org.apache.hc.client5.http.DnsResolver +org.apache.hc.core5.http.io.HttpConnectionFactory +org.apache.hc.core5.io.ModalCloseable +org.apache.hc.client5.http.io.HttpClientConnectionManager +com.github.tomakehurst.wiremock.http.NetworkAddressRulesAdheringDnsResolver +org.apache.hc.client5.http.SystemDefaultDnsResolver +org.apache.hc.client5.http.impl.classic.HttpClientBuilder +org.apache.hc.core5.http.ConnectionReuseStrategy +org.apache.hc.client5.http.ConnectionKeepAliveStrategy +org.apache.hc.client5.http.UserTokenHandler +org.apache.hc.core5.http.HttpRequestInterceptor +org.apache.hc.core5.http.HttpResponseInterceptor +org.apache.hc.client5.http.SchemePortResolver +org.apache.hc.core5.http.protocol.HttpProcessor +org.apache.hc.core5.http.config.Lookup +org.apache.hc.client5.http.HttpRequestRetryStrategy +org.apache.hc.client5.http.routing.HttpRoutePlanner +org.apache.hc.client5.http.protocol.RedirectStrategy +org.apache.hc.client5.http.cookie.CookieStore +org.apache.hc.client5.http.classic.HttpClient +org.apache.hc.client5.http.impl.classic.CloseableHttpClient +org.apache.hc.client5.http.impl.classic.InternalHttpClient +org.apache.hc.client5.http.config.RequestConfig +org.apache.hc.core5.util.TimeValue +org.apache.hc.core5.util.Timeout +org.apache.hc.core5.util.Args +org.apache.hc.client5.http.config.RequestConfig$Builder +org.apache.hc.core5.http.HttpResponse +org.apache.hc.core5.http.protocol.HttpContext +com.github.tomakehurst.wiremock.http.HttpClientFactory$$Lambda/0x00003fc001263d30 +com.github.tomakehurst.wiremock.http.HttpClientFactory$$Lambda/0x00003fc001263f58 +com.github.tomakehurst.wiremock.http.ssl.SSLContextBuilder +javax.net.ssl.TrustManager +com.github.tomakehurst.wiremock.http.ssl.TrustEverythingStrategy +javax.net.ssl.TrustManagerFactory +javax.net.ssl.TrustManagerFactorySpi +sun.security.jca.GetInstance +sun.security.jca.Providers +sun.security.jca.ProviderList +sun.security.jca.ProviderConfig +java.security.Provider +sun.security.jca.ProviderList$2 +sun.security.jca.ProviderList$1 +java.security.Provider$ServiceKey +java.security.Provider$$Lambda/0x00003fc001131138 +java.security.Provider$EngineDescription +java.security.SecureRandomParameters +java.security.cert.CertStoreParameters +javax.crypto.KDFParameters +java.security.Policy$Parameters +javax.security.auth.login.Configuration$Parameters +sun.security.provider.Sun +sun.security.util.SecurityConstants +java.security.Guard +java.security.Permission +java.security.AllPermission +sun.security.provider.SunEntries +java.security.SecureRandomSpi +sun.security.provider.NativePRNG +sun.security.provider.NativePRNG$Variant +sun.security.provider.NativePRNG$RandomIO +sun.security.provider.FileInputStreamPool +sun.security.provider.FileInputStreamPool$UnclosableInputStream +sun.security.provider.FileInputStreamPool$StreamRef +java.security.Provider$Service +java.security.Provider$UString +sun.security.provider.NativePRNG$Blocking +sun.security.provider.NativePRNG$NonBlocking +sun.security.util.SecurityProviderConstants +sun.security.util.KnownOIDs +sun.security.rsa.SunRsaSign +sun.security.rsa.SunRsaSignEntries +sun.security.ec.SunEC +sun.security.ec.SunEC$ProviderService +sun.security.ec.SunEC$ProviderServiceA +sun.security.util.CurveDB +java.security.spec.ECField +java.security.spec.ECFieldFp +java.security.spec.EllipticCurve +java.security.spec.ECPoint +java.security.spec.AlgorithmParameterSpec +java.security.spec.ECParameterSpec +sun.security.util.NamedCurve +sun.security.util.DerEncoder +sun.security.util.DerOutputStream +sun.security.util.ByteArrayLexOrder +sun.security.util.ByteArrayTagOrder +sun.security.util.ObjectIdentifier +java.security.spec.ECFieldF2m +sun.security.ssl.SunJSSE +jdk.internal.event.SecurityProviderServiceEvent +sun.security.ssl.TrustManagerFactoryImpl +sun.security.ssl.TrustManagerFactoryImpl$PKIXFactory +sun.security.jca.GetInstance$Instance +sun.security.ssl.TrustStoreManager +sun.security.ssl.TrustStoreManager$TrustAnchorManager +sun.security.ssl.TrustStoreManager$TrustStoreDescriptor +sun.security.util.FilePaths +java.security.KeyStore +sun.security.ssl.SSLLogger +java.security.KeyStoreSpi +sun.security.util.KeyStoreDelegator +sun.security.pkcs12.PKCS12KeyStore$DualFormatPKCS12 +sun.security.pkcs12.PKCS12KeyStore +sun.security.provider.JavaKeyStore +sun.security.provider.JavaKeyStore$JKS +sun.security.util.DerValue +sun.security.util.DerInputStream +sun.security.util.IOUtils +sun.security.pkcs.ContentInfo +java.security.cert.CertificateFactory +java.security.cert.CertificateFactorySpi +sun.security.provider.X509Factory +sun.security.util.Cache +sun.security.util.MemoryCache +sun.security.util.Cache$EqualByteArray +java.security.cert.X509Extension +java.security.DEREncodable +java.security.cert.X509Certificate +sun.security.x509.X509CertImpl +sun.security.x509.AlgorithmId +sun.security.x509.X509CertInfo +sun.security.x509.CertificateVersion +sun.security.x509.CertificateSerialNumber +sun.security.x509.SerialNumber +sun.security.x509.CertificateAlgorithmId +sun.security.x509.GeneralNameInterface +sun.security.x509.X500Name +sun.security.x509.RDN +sun.security.x509.AVA +sun.security.x509.CertificateValidity +sun.security.x509.CertificateX509Key +java.security.Key +java.security.AsymmetricKey +java.security.PublicKey +sun.security.x509.X509Key +sun.security.util.BitArray +java.security.spec.KeySpec +java.security.spec.EncodedKeySpec +java.security.spec.X509EncodedKeySpec +jdk.internal.access.JavaSecuritySpecAccess +java.security.spec.EncodedKeySpec$$Lambda/0x00003fc001270dd0 +java.security.KeyFactory +sun.security.jca.ProviderList$ServiceIterator +java.security.KeyFactorySpi +sun.security.rsa.RSAKeyFactory +sun.security.rsa.RSAKeyFactory$Legacy +java.security.spec.RSAPublicKeySpec +java.security.spec.RSAPrivateKeySpec +java.security.spec.RSAPrivateCrtKeySpec +java.security.spec.PKCS8EncodedKeySpec +sun.security.rsa.RSAUtil$KeyType +java.security.spec.PSSParameterSpec +java.lang.runtime.SwitchBootstraps +jdk.internal.misc.PreviewFeatures +java.lang.invoke.DirectMethodHandle$1 +java.lang.runtime.SwitchBootstraps$$Lambda/0x800000018 +java.lang.classfile.AccessFlags +jdk.internal.classfile.impl.AccessFlagsImpl +java.lang.runtime.SwitchBootstraps$$Lambda/0x800000019 +java.lang.classfile.instruction.SwitchCase +jdk.internal.classfile.impl.AbstractInstruction$SwitchCaseImpl +java.lang.invoke.MethodHandles$Lookup$ClassOption +java.lang.classfile.CompoundElement +java.lang.classfile.AttributedElement +java.lang.classfile.ClassModel +jdk.internal.classfile.impl.ClassImpl +jdk.internal.classfile.impl.ClassFileImpl$$Lambda/0x80000004b +java.lang.classfile.FieldModel +jdk.internal.classfile.impl.FieldImpl +java.lang.classfile.MethodModel +jdk.internal.classfile.impl.MethodImpl +sun.security.rsa.RSAKeyFactory$$TypeSwitch/0x00003fc001274288 +java.security.interfaces.RSAKey +java.security.interfaces.RSAPublicKey +sun.security.rsa.RSAPublicKeyImpl +sun.security.rsa.RSAUtil +sun.security.x509.CertificateExtensions +java.security.cert.Extension +sun.security.x509.Extension +sun.security.x509.OIDMap +sun.security.x509.PKIXExtensions +sun.security.x509.OIDMap$OIDInfo +sun.security.x509.SubjectKeyIdentifierExtension +java.lang.invoke.LambdaForm$MH/0x00003fc001268000 +sun.security.x509.KeyIdentifier +sun.security.x509.BasicConstraintsExtension +sun.security.x509.AuthorityKeyIdentifierExtension +sun.security.x509.GeneralNames +sun.security.x509.KeyUsageExtension +sun.security.util.MemoryCache$CacheEntry +sun.security.util.MemoryCache$SoftCacheEntry +sun.security.jca.JCAUtil +jdk.internal.event.X509CertificateEvent +jdk.internal.event.EventHelper +java.lang.invoke.VarHandleReferences$FieldStaticReadOnly +java.lang.invoke.VarHandleReferences$FieldStaticReadWrite +java.lang.invoke.LazyInitializingVarHandle +java.lang.System$Logger$Level +java.util.jar.JarFile$ThreadTrackHolder +jdk.internal.misc.ThreadTracker +jdk.internal.misc.ThreadTracker$ThreadRef +jdk.internal.event.EventHelper$ThreadTrackHolder +jdk.internal.logger.LazyLoggers +jdk.internal.logger.LazyLoggers$1 +jdk.internal.logger.LazyLoggers$LazyLoggerFactories +jdk.internal.logger.LoggerFinderLoader +jdk.internal.logger.LoggerFinderLoader$TemporaryLoggerFinder +sun.util.logging.PlatformLogger$ConfigurableBridge$LoggerConfiguration +sun.util.logging.internal.LoggingProviderImpl$JULWrapper +sun.nio.cs.UnicodeDecoder +sun.nio.cs.UTF_16BE$Decoder +sun.nio.cs.ArrayDecoder +sun.security.pkcs12.PKCS12KeyStore$Entry +sun.security.pkcs12.PKCS12KeyStore$KeyEntry +sun.security.pkcs12.PKCS12KeyStore$CertEntry +java.security.KeyStore$Entry$Attribute +java.security.PKCS12Attribute +java.util.regex.Pattern$GroupCurly +sun.security.x509.GeneralName +java.security.AlgorithmParameters +java.security.AlgorithmParametersSpi +sun.security.util.ECParameters +sun.security.ec.ECKeyFactory +java.security.spec.ECPublicKeySpec +sun.security.ec.ECKeyFactory$$TypeSwitch/0x00003fc00127bb80 +java.security.interfaces.ECKey +java.security.interfaces.ECPublicKey +sun.security.ec.ECPublicKeyImpl +sun.security.util.ECUtil +sun.security.x509.CertificatePoliciesExtension +sun.security.x509.PolicyInformation +sun.security.x509.CertificatePolicyId +java.security.cert.PolicyQualifierInfo +sun.security.x509.NetscapeCertTypeExtension +sun.security.x509.NetscapeCertTypeExtension$MapEntry +sun.security.x509.CRLDistributionPointsExtension +sun.security.x509.DistributionPoint +sun.security.x509.URIName +sun.security.x509.DNSName +sun.security.x509.PrivateKeyUsageExtension +sun.security.x509.AuthorityInfoAccessExtension +sun.security.x509.AccessDescription +sun.security.x509.ExtendedKeyUsageExtension +sun.security.util.MemoryCache$QueueCacheEntry +sun.security.x509.SubjectAlternativeNameExtension +sun.security.x509.RFC822Name +java.lang.invoke.MethodHandle$1 +java.lang.invoke.LambdaForm$DMH/0x00003fc001268400 +java.lang.invoke.LambdaForm$MH/0x00003fc001268800 +java.lang.invoke.LambdaForm$MH/0x00003fc001268c00 +java.lang.invoke.LambdaForm$MH/0x00003fc001269000 +sun.security.pkcs12.PKCS12KeyStore$PrivateKeyEntry +sun.security.validator.TrustStoreUtil +javax.net.ssl.X509TrustManager +javax.net.ssl.X509ExtendedTrustManager +sun.security.ssl.X509TrustManagerImpl +com.github.tomakehurst.wiremock.http.ssl.SSLContextBuilder$TrustManagerDelegate +javax.net.ssl.SSLContext +javax.net.ssl.SSLContextSpi +sun.security.ssl.SSLContextImpl +sun.security.ssl.SSLContextImpl$AbstractTLSContext +sun.security.ssl.SSLContextImpl$CustomizedTLSContext +sun.security.ssl.SSLContextImpl$TLSContext +sun.security.ssl.ProtocolVersion +java.security.AlgorithmConstraints +sun.security.ssl.SSLAlgorithmConstraints +sun.security.util.AbstractAlgorithmConstraints +sun.security.util.DisabledAlgorithmConstraints +sun.security.util.AlgorithmDecomposer +sun.security.ssl.SSLAlgorithmDecomposer +java.util.regex.Pattern$LookBehindEndNode +java.util.regex.Pattern$NotBehind +java.util.TreeMap$KeySet +java.util.TreeMap$KeyIterator +sun.security.util.DisabledAlgorithmConstraints$Constraints +sun.security.util.DisabledAlgorithmConstraints$Constraint +sun.security.util.DisabledAlgorithmConstraints$DisabledConstraint +sun.security.util.DisabledAlgorithmConstraints$KeySizeConstraint +sun.security.util.DisabledAlgorithmConstraints$Constraint$Operator +sun.security.util.DisabledAlgorithmConstraints$UsageConstraint +sun.security.ssl.SSLScope +sun.security.util.DisabledAlgorithmConstraints$jdkCAConstraint +sun.security.util.DisabledAlgorithmConstraints$Constraints$Holder +java.util.regex.Pattern$BnM +java.util.regex.Pattern$SliceS +sun.security.util.DisabledAlgorithmConstraints$DenyAfterConstraint +java.time.ZoneRegion +java.time.zone.ZoneRules +java.time.zone.ZoneOffsetTransitionRule +java.time.zone.ZoneOffsetTransition +java.security.CryptoPrimitive +sun.security.util.DisabledAlgorithmConstraints$$Lambda/0x00003fc001280888 +sun.security.ssl.CipherSuite +sun.security.ssl.SSLCipher +sun.security.ssl.CipherType +sun.security.ssl.SSLCipher$ReadCipherGenerator +sun.security.ssl.SSLCipher$NullReadCipherGenerator +sun.security.ssl.SSLCipher$WriteCipherGenerator +sun.security.ssl.SSLCipher$NullWriteCipherGenerator +sun.security.ssl.SSLCipher$StreamReadCipherGenerator +sun.security.ssl.SSLCipher$StreamWriteCipherGenerator +javax.crypto.Cipher +javax.crypto.Cipher$Transform +sun.security.jca.ServiceId +com.sun.crypto.provider.SunJCE +javax.crypto.JceSecurity +sun.nio.fs.Globs +java.text.Normalizer$Form +java.text.Normalizer +jdk.internal.icu.text.NormalizerBase +jdk.internal.icu.text.NormalizerBase$Mode +jdk.internal.icu.text.NormalizerBase$NONEMode +jdk.internal.icu.text.NormalizerBase$NFDMode +jdk.internal.icu.text.NormalizerBase$NFKDMode +jdk.internal.icu.text.NormalizerBase$NFCMode +jdk.internal.icu.text.NormalizerBase$NFKCMode +jdk.internal.icu.text.NormalizerBase$1 +jdk.internal.icu.text.NormalizerBase$NFCModeImpl +jdk.internal.icu.text.NormalizerBase$ModeImpl +jdk.internal.icu.text.Normalizer2 +jdk.internal.icu.impl.Norm2AllModes +jdk.internal.icu.impl.Norm2AllModes$NoopNormalizer2 +jdk.internal.icu.impl.Norm2AllModes$NFCSingleton +jdk.internal.icu.impl.Norm2AllModes$Norm2AllModesSingleton +jdk.internal.icu.impl.NormalizerImpl +jdk.internal.icu.impl.ICUBinary$Authenticate +jdk.internal.icu.impl.NormalizerImpl$IsAcceptable +jdk.internal.icu.impl.ICUBinary +jdk.internal.module.SystemModuleFinders +jdk.internal.module.SystemModuleFinders$SystemModuleReader$$Lambda/0x00003fc001285e70 +jdk.internal.icu.util.VersionInfo +jdk.internal.icu.util.CodePointMap +jdk.internal.icu.util.CodePointTrie +jdk.internal.icu.util.CodePointTrie$Fast +jdk.internal.icu.util.CodePointTrie$Fast16 +jdk.internal.icu.util.CodePointTrie$Type +jdk.internal.icu.util.CodePointTrie$ValueWidth +java.nio.ByteBufferAsCharBufferB +jdk.internal.icu.util.CodePointTrie$Data +jdk.internal.icu.util.CodePointTrie$Data16 +jdk.internal.icu.impl.Norm2AllModes$Normalizer2WithImpl +jdk.internal.icu.impl.Norm2AllModes$ComposeNormalizer2 +jdk.internal.icu.impl.Norm2AllModes$DecomposeNormalizer2 +java.util.regex.Pattern$NFCCharProperty +java.nio.file.PathMatcher +sun.nio.fs.UnixFileSystem$1 +java.nio.file.DirectoryStream$Filter +java.nio.file.Files$1 +java.nio.file.SecureDirectoryStream +sun.nio.fs.UnixSecureDirectoryStream +sun.nio.fs.UnixDirectoryStream +java.util.concurrent.locks.ReentrantReadWriteLock$FairSync +sun.nio.fs.UnixDirectoryStream$UnixDirectoryIterator +jdk.internal.util.regex.Grapheme +jdk.internal.util.regex.IndicConjunctBreak +javax.crypto.CryptoPermissions +javax.crypto.CryptoPolicyParser +java.io.StreamTokenizer +javax.crypto.CryptoPolicyParser$GrantEntry +javax.crypto.CryptoPolicyParser$CryptoPermissionEntry +java.util.Vector$Itr +javax.crypto.CryptoPermission +javax.crypto.CryptoAllPermission +javax.crypto.CryptoAllPermissionCollection +sun.nio.fs.UnixException +sun.nio.fs.UnixSecureDirectoryStream$$Lambda/0x00003fc00128bca8 +java.net.URL$ThreadTrackHolder +java.net.spi.URLStreamHandlerProvider +sun.net.www.protocol.http.Handler +javax.crypto.JceSecurity$WeakIdentityWrapper +javax.crypto.JceSecurity$1 +java.lang.Class$Holder +java.security.AllPermissionCollection +java.security.UnresolvedPermission +javax.crypto.ProviderVerifier +javax.crypto.CipherSpi +com.sun.crypto.provider.ARCFOURCipher +sun.security.ssl.SSLCipher$T10BlockReadCipherGenerator +sun.security.ssl.SSLCipher$T10BlockWriteCipherGenerator +com.sun.crypto.provider.DESCipher +com.sun.crypto.provider.CipherCore +com.sun.crypto.provider.DESConstants +com.sun.crypto.provider.SymmetricCipher +com.sun.crypto.provider.DESCrypt +com.sun.crypto.provider.FeedbackCipher +com.sun.crypto.provider.ElectronicCodeBook +com.sun.crypto.provider.Padding +com.sun.crypto.provider.PKCS5Padding +com.sun.crypto.provider.CipherBlockChaining +sun.security.ssl.SSLCipher$T11BlockReadCipherGenerator +sun.security.ssl.SSLCipher$T11BlockWriteCipherGenerator +javax.crypto.JceSecurityManager +java.lang.StackWalker$Option +java.util.Vector$1 +com.sun.crypto.provider.DESedeCipher +com.sun.crypto.provider.DESedeCrypt +com.sun.crypto.provider.AESCipher +com.sun.crypto.provider.AESCipher$General +com.sun.crypto.provider.AESConstants +com.sun.crypto.provider.AESCrypt +sun.security.ssl.SSLCipher$T12GcmReadCipherGenerator +sun.security.ssl.SSLCipher$T12GcmWriteCipherGenerator +com.sun.crypto.provider.GaloisCounterMode +com.sun.crypto.provider.GaloisCounterMode$AESGCM +sun.security.ssl.SSLCipher$T13GcmReadCipherGenerator +sun.security.ssl.SSLCipher$T13GcmWriteCipherGenerator +sun.security.ssl.SSLCipher$T12CC20P1305ReadCipherGenerator +sun.security.ssl.SSLCipher$T13CC20P1305ReadCipherGenerator +sun.security.ssl.SSLCipher$T12CC20P1305WriteCipherGenerator +sun.security.ssl.SSLCipher$T13CC20P1305WriteCipherGenerator +com.sun.crypto.provider.ChaCha20Cipher +com.sun.crypto.provider.ChaCha20Cipher$ChaCha20Poly1305 +sun.security.ssl.CipherSuite$HashAlg +sun.security.ssl.CipherSuite$MacAlg +sun.security.ssl.CipherSuite$KeyExchange +sun.security.ssl.NamedGroup$NamedGroupScheme +sun.security.ssl.NamedGroup$NamedGroupSpec +sun.security.ssl.NamedGroup$ECDHEScheme +sun.security.ssl.NamedGroup +sun.security.ssl.NamedGroup$FFDHEScheme +sun.security.ssl.NamedGroup$XDHScheme +sun.security.ssl.JsseJce +sun.security.ssl.Utilities +sun.security.ssl.SSLAlgorithmDecomposer$1 +sun.security.ssl.JsseJce$EcAvailability +java.security.SignatureSpi +java.security.Signature +jdk.internal.access.JavaSecuritySignatureAccess +java.security.Signature$1 +sun.security.ec.ECDSASignature +sun.security.ec.ECDSASignature$SHA1 +java.security.MessageDigestSpi +java.security.MessageDigest +sun.security.provider.DigestBase +sun.security.provider.SHA +sun.security.util.MessageDigestSpi2 +java.security.MessageDigest$Delegate +java.security.MessageDigest$Delegate$CloneableDelegate +java.security.Signature$Delegate +sun.security.ec.ECDSASignature$RawECDSA +sun.security.ec.ECDSASignature$Raw +javax.crypto.KeyAgreement +java.security.KeyPairGeneratorSpi +java.security.KeyPairGenerator +sun.security.ec.ECKeyPairGenerator +sun.security.util.ECKeySizeParameterSpec +java.security.spec.NamedParameterSpec +java.security.spec.ECGenParameterSpec +java.security.KeyPairGenerator$Delegate +sun.security.ssl.SSLContextImpl$CustomizedSSLProtocols +sun.security.ssl.EphemeralKeyManager +sun.security.ssl.EphemeralKeyManager$EphemeralKeyPair +javax.net.ssl.SSLSessionContext +sun.security.ssl.SSLSessionContextImpl +javax.net.ssl.KeyManager +javax.net.ssl.X509KeyManager +javax.net.ssl.X509ExtendedKeyManager +sun.security.ssl.DummyX509KeyManager +java.security.SecureRandom +sun.security.ssl.SSLContextImpl$$Lambda/0x00003fc00129aae8 +sun.security.provider.SecureRandom +sun.security.provider.ByteArrayAccess +sun.security.provider.ByteArrayAccess$BE +org.apache.hc.core5.util.TextUtils +org.apache.hc.client5.http.ssl.SSLConnectionSocketFactory +java.net.Socket +javax.net.ssl.SSLSocket +java.security.PrivilegedActionException +javax.net.ssl.SSLException +javax.net.ssl.SSLHandshakeException +javax.net.ssl.SSLPeerUnverifiedException +sun.security.ssl.SSLSocketFactoryImpl +org.apache.hc.client5.http.ssl.NoopHostnameVerifier +org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManagerBuilder +org.apache.hc.client5.http.io.HttpClientConnectionOperator +org.apache.hc.client5.http.ssl.TlsSocketStrategy +java.lang.invoke.LambdaForm$DMH/0x00003fc0012c0000 +org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManagerBuilder$$Lambda/0x00003fc0012655d8 +org.apache.hc.client5.http.config.ConnectionConfig +org.apache.hc.client5.http.config.ConnectionConfig$Builder +org.apache.hc.core5.function.Resolver +org.apache.hc.client5.http.RouteInfo +org.apache.hc.client5.http.HttpRoute +org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManagerBuilder$$Lambda/0x00003fc001266338 +org.apache.hc.client5.http.impl.io.ManagedHttpClientConnectionFactory +org.apache.hc.core5.http.SocketModalCloseable +org.apache.hc.core5.http.HttpConnection +org.apache.hc.core5.http.io.BHttpConnection +org.apache.hc.core5.http.io.HttpClientConnection +org.apache.hc.client5.http.io.ManagedHttpClientConnection +org.apache.hc.core5.http.io.HttpMessageWriterFactory +org.apache.hc.core5.http.io.HttpMessageParserFactory +org.apache.hc.core5.http.ContentLengthStrategy +org.apache.hc.core5.http.io.ResponseOutOfOrderStrategy +org.apache.hc.core5.http.config.Http1Config +org.apache.hc.core5.http.config.Http1Config$Builder +org.apache.hc.core5.http.ProtocolVersion +org.apache.hc.core5.http.HttpVersion +org.apache.hc.core5.http.HttpException +org.apache.hc.core5.http.ProtocolException +org.apache.hc.core5.http.ParseException +org.apache.hc.core5.http.config.CharCodingConfig +org.apache.hc.core5.http.config.CharCodingConfig$Builder +org.apache.hc.core5.http.impl.io.DefaultHttpRequestWriterFactory +org.apache.hc.core5.http.message.LineFormatter +org.apache.hc.core5.http.io.HttpMessageWriter +org.apache.hc.core5.http.message.BasicLineFormatter +org.apache.hc.client5.http.impl.io.DefaultHttpResponseParserFactory +org.apache.hc.core5.http.message.LineParser +org.apache.hc.core5.http.HttpResponseFactory +org.apache.hc.core5.http.io.HttpMessageParser +org.apache.hc.core5.http.message.BasicLineParser +org.apache.hc.core5.util.Tokenizer$Cursor +org.apache.hc.core5.http.message.ParserCursor +org.apache.hc.core5.http.NameValuePair +org.apache.hc.core5.http.Header +org.apache.hc.core5.util.Tokenizer +org.apache.hc.core5.util.Tokenizer$Delimiter +org.apache.hc.core5.util.Tokenizer$$Lambda/0x00003fc0012c7460 +org.apache.hc.core5.util.Tokenizer$$Lambda/0x00003fc0012c7688 +org.apache.hc.core5.http.impl.io.DefaultClassicHttpResponseFactory +org.apache.hc.core5.http.ClassicHttpResponse +org.apache.hc.core5.http.ReasonPhraseCatalog +org.apache.hc.core5.http.impl.EnglishReasonPhraseCatalog +org.apache.hc.core5.http.impl.DefaultContentLengthStrategy +org.apache.hc.core5.http.NotImplementedException +org.apache.hc.core5.http.impl.io.NoResponseOutOfOrderStrategy +org.apache.hc.core5.pool.ConnPoolStats +org.apache.hc.core5.pool.ConnPoolControl +org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManager +org.apache.hc.core5.concurrent.Cancellable +org.apache.hc.client5.http.io.LeaseRequest +org.apache.hc.core5.pool.DisposalCallback +org.apache.hc.core5.pool.ConnPool +org.apache.hc.core5.pool.ManagedConnPool +org.apache.hc.client5.http.impl.PrefixedIncrementingId +org.apache.hc.client5.http.impl.io.DefaultHttpClientConnectionOperator +org.apache.hc.core5.http.ConnectionClosedException +org.apache.hc.core5.net.NamedEndpoint +org.apache.hc.client5.http.UnsupportedSchemeException +org.apache.hc.client5.http.io.DetachedSocketFactory +java.net.Proxy +org.apache.hc.client5.http.impl.io.DefaultHttpClientConnectionOperator$$Lambda/0x00003fc0012c18e0 +org.apache.hc.core5.http.config.RegistryBuilder +org.apache.hc.core5.http.URIScheme +org.apache.hc.core5.http.config.Registry +org.apache.hc.client5.http.impl.DefaultSchemePortResolver +org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManager$4 +org.apache.hc.core5.pool.PoolConcurrencyPolicy +org.apache.hc.core5.pool.StrictConnPool +org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManager$1 +org.apache.hc.core5.concurrent.BasicFuture +org.apache.hc.core5.pool.StrictConnPool$1 +java.util.concurrent.TimeoutException +org.apache.hc.core5.util.DeadlineTimeoutException +org.apache.hc.core5.pool.DefaultDisposalCallback +org.apache.hc.core5.pool.PoolReusePolicy +org.apache.hc.core5.http.impl.io.HttpRequestExecutor +org.apache.hc.core5.http.UnsupportedHttpVersionException +org.apache.hc.core5.http.EntityDetails +org.apache.hc.core5.http.impl.DefaultConnectionReuseStrategy +org.apache.hc.client5.http.impl.DefaultAuthenticationStrategy +org.apache.hc.client5.http.impl.DefaultUserTokenHandler +org.apache.hc.core5.util.VersionInfo +org.apache.hc.core5.http.protocol.HttpProcessorBuilder +org.apache.hc.core5.http.protocol.RequestTargetHost +org.apache.hc.client5.http.protocol.RequestValidateTrace +org.apache.hc.client5.http.protocol.RequestDefaultHeaders +org.apache.hc.core5.http.protocol.RequestContent +org.apache.hc.client5.http.protocol.RequestClientConnControl +org.apache.hc.core5.http.protocol.RequestUserAgent +org.apache.hc.client5.http.protocol.RequestExpectContinue +org.apache.hc.client5.http.protocol.RequestUpgrade +org.apache.hc.core5.http.protocol.ChainBuilder +org.apache.hc.core5.http.protocol.DefaultHttpProcessor +org.apache.hc.core5.http.config.NamedElementChain +org.apache.hc.core5.http.config.NamedElementChain$Node +org.apache.hc.client5.http.classic.ExecChainHandler +org.apache.hc.client5.http.impl.classic.MainClientExec +org.apache.hc.client5.http.impl.ConnectionShutdownException +java.io.InterruptedIOException +org.apache.hc.client5.http.impl.ProtocolSwitchStrategy +org.apache.hc.core5.http.ProtocolVersionParser +java.lang.invoke.LambdaForm$DMH/0x00003fc0012d0000 +org.apache.hc.core5.util.Tokenizer$$Lambda/0x00003fc0012cd7b8 +java.lang.invoke.LambdaForm$DMH/0x00003fc0012d0400 +java.lang.invoke.LambdaForm$DMH/0x00003fc0012d0800 +java.lang.invoke.LambdaForm$MH/0x00003fc0012d0c00 +org.apache.hc.client5.http.impl.ChainElement +org.apache.hc.client5.http.impl.classic.ConnectExec +org.apache.hc.core5.http.HttpEntity +org.apache.hc.client5.http.routing.HttpRouteDirector +org.apache.hc.client5.http.impl.auth.AuthenticationHandler +org.apache.hc.client5.http.auth.AuthenticationException +org.apache.hc.client5.http.auth.MalformedChallengeException +org.apache.hc.client5.http.impl.auth.AuthChallengeParser +org.apache.hc.client5.http.impl.routing.BasicRouteDirector +org.apache.hc.client5.http.impl.classic.ProtocolExec +java.net.ProxySelector +org.apache.hc.client5.http.impl.classic.HttpClientBuilder$$Lambda/0x00003fc0012cf228 +sun.net.spi.DefaultProxySelector +java.net.Proxy$Type +sun.net.NetProperties +org.apache.hc.client5.http.impl.routing.DefaultRoutePlanner +org.apache.hc.client5.http.impl.routing.SystemDefaultRoutePlanner +org.apache.hc.client5.http.impl.classic.ExecChainElement +org.apache.hc.client5.http.auth.AuthSchemeFactory +org.apache.hc.client5.http.impl.auth.BasicSchemeFactory +org.apache.hc.client5.http.auth.AuthScheme +org.apache.hc.client5.http.impl.auth.DigestSchemeFactory +org.apache.hc.client5.http.impl.auth.BearerSchemeFactory +org.apache.hc.client5.http.impl.CookieSpecSupport +org.apache.hc.client5.http.psl.PublicSuffixMatcherLoader +org.apache.hc.client5.http.psl.PublicSuffixListParser +org.apache.hc.client5.http.psl.DomainType +org.apache.hc.client5.http.psl.PublicSuffixList +org.apache.hc.client5.http.psl.PublicSuffixMatcher +org.apache.hc.client5.http.cookie.CookieSpecFactory +org.apache.hc.client5.http.impl.cookie.RFC6265CookieSpecFactory +org.apache.hc.client5.http.cookie.CookieAttributeHandler +org.apache.hc.client5.http.cookie.CommonCookieAttributeHandler +org.apache.hc.client5.http.cookie.CookieSpec +org.apache.hc.client5.http.impl.cookie.RFC6265CookieSpecFactory$CompatibilityLevel +org.apache.hc.client5.http.impl.cookie.IgnoreCookieSpecFactory +org.apache.hc.client5.http.cookie.BasicCookieStore +org.apache.hc.client5.http.cookie.CookieIdentityComparator +org.apache.hc.client5.http.auth.CredentialsStore +org.apache.hc.client5.http.impl.auth.SystemDefaultCredentialsProvider +org.apache.hc.client5.http.impl.auth.BasicCredentialsProvider +org.apache.hc.client5.http.ClientProtocolException +org.apache.hc.client5.http.classic.ExecRuntime +org.apache.hc.core5.http.protocol.HttpCoreContext +org.apache.hc.client5.http.protocol.HttpClientContext +org.apache.hc.core5.http.protocol.HttpCoreContext$Delegate +org.apache.hc.client5.http.protocol.HttpClientContext$Delegate +org.apache.hc.client5.http.impl.classic.HttpClientBuilder$$Lambda/0x00003fc0012d23c0 +com.github.tomakehurst.wiremock.http.client.ApacheBackedHttpClient +com.github.tomakehurst.wiremock.http.ssl.TrustSpecificHostsStrategy +com.github.tomakehurst.wiremock.http.RequestHandler +com.github.tomakehurst.wiremock.http.RequestEventSource +com.github.tomakehurst.wiremock.http.AbstractRequestHandler +com.github.tomakehurst.wiremock.http.StubRequestHandler +com.github.tomakehurst.wiremock.http.StubResponseRenderer +com.github.tomakehurst.wiremock.http.ProxyResponseRenderer +com.github.tomakehurst.wiremock.extension.ResponseTransformer +com.github.tomakehurst.wiremock.extension.ResponseTransformerV2 +com.github.tomakehurst.wiremock.extension.requestfilter.RequestFilter +com.github.tomakehurst.wiremock.core.WireMockApp$$Lambda/0x00003fc0012d1000 +com.github.tomakehurst.wiremock.extension.requestfilter.RequestFilterV2 +com.github.tomakehurst.wiremock.core.WireMockApp$$Lambda/0x00003fc0012d1460 +com.github.tomakehurst.wiremock.extension.requestfilter.FilterProcessor +com.github.tomakehurst.wiremock.http.HttpServerFactoryLoader +com.github.tomakehurst.wiremock.http.HttpServerFactoryLoader$$Lambda/0x00003fc0012d1b00 +org.eclipse.jetty.util.Jetty +java.time.format.DateTimePrintContext +java.time.Instant$1 +jdk.internal.util.DateTimeHelper +java.lang.StringConcatHelper$Concat1 +com.github.tomakehurst.wiremock.extension.AdminApiExtension +com.github.tomakehurst.wiremock.admin.AdminRoutes +com.github.tomakehurst.wiremock.admin.Router +com.github.tomakehurst.wiremock.admin.AdminRoutes$RouteBuilder +com.google.common.collect.BiMap +com.google.common.collect.ImmutableMap +com.google.common.collect.ImmutableBiMap +com.google.common.collect.ImmutableMap$IteratorBasedImmutableMap +com.google.common.collect.ImmutableMap$MapViewOfValuesAsSingletonSets +com.google.common.collect.UnmodifiableIterator +com.google.common.collect.ImmutableMap$1 +com.google.common.collect.ImmutableCollection +com.google.common.collect.ImmutableSet +com.google.common.collect.SingletonImmutableBiMap +com.google.common.collect.RegularImmutableBiMap +com.google.common.collect.ImmutableMap$Builder +com.google.common.collect.ImmutableBiMap$Builder +com.github.tomakehurst.wiremock.http.RequestMethod +com.github.tomakehurst.wiremock.admin.tasks.GetAllStubMappingsTask +com.github.tomakehurst.wiremock.admin.tasks.RootTask +com.github.tomakehurst.wiremock.admin.RequestSpec +com.github.tomakehurst.wiremock.common.url.PathTemplate +com.github.tomakehurst.wiremock.common.url.ParserBuilder +com.github.tomakehurst.wiremock.common.url.RendererBuilder +com.github.tomakehurst.wiremock.common.url.RendererBuilder$1Static +com.github.tomakehurst.wiremock.common.url.Parser +com.github.tomakehurst.wiremock.common.url.Renderer +com.google.common.collect.ImmutableMapEntry +com.google.common.collect.CollectPreconditions +com.github.tomakehurst.wiremock.admin.tasks.RootRedirectTask +com.github.tomakehurst.wiremock.admin.tasks.ResetTask +com.github.tomakehurst.wiremock.admin.tasks.CreateStubMappingTask +com.google.common.collect.ImmutableCollection$Builder +com.github.tomakehurst.wiremock.admin.tasks.ResetStubMappingsTask +com.github.tomakehurst.wiremock.admin.tasks.OldEditStubMappingTask +com.github.tomakehurst.wiremock.admin.tasks.SaveMappingsTask +com.github.tomakehurst.wiremock.admin.tasks.ResetToDefaultMappingsTask +com.github.tomakehurst.wiremock.admin.tasks.GetUnmatchedStubMappingsTask +com.github.tomakehurst.wiremock.admin.tasks.RemoveUnmatchedStubMappingsTask +com.github.tomakehurst.wiremock.admin.tasks.AbstractSingleStubTask +com.github.tomakehurst.wiremock.admin.tasks.GetStubMappingTask +com.github.tomakehurst.wiremock.common.url.RendererBuilder$1Variable +com.github.tomakehurst.wiremock.admin.tasks.EditStubMappingTask +com.github.tomakehurst.wiremock.admin.tasks.RemoveMatchingStubMappingTask +com.github.tomakehurst.wiremock.admin.tasks.RemoveStubMappingByIdTask +com.github.tomakehurst.wiremock.admin.FindStubMappingsByMetadataTask +com.github.tomakehurst.wiremock.admin.RemoveStubMappingsByMetadataTask +com.github.tomakehurst.wiremock.admin.ImportStubMappingsTask +com.github.tomakehurst.wiremock.admin.tasks.GetAllStubFilesTask +com.github.tomakehurst.wiremock.admin.tasks.EditStubFileTask +com.github.tomakehurst.wiremock.common.url.RendererBuilder$1Wildcard +com.github.tomakehurst.wiremock.admin.tasks.DeleteStubFileTask +com.github.tomakehurst.wiremock.admin.tasks.GetStubFileTask +com.github.tomakehurst.wiremock.admin.GetAllScenariosTask +com.github.tomakehurst.wiremock.admin.tasks.ResetScenariosTask +com.github.tomakehurst.wiremock.admin.SetScenarioStateTask +com.github.tomakehurst.wiremock.admin.tasks.GetAllRequestsTask +com.github.tomakehurst.wiremock.admin.tasks.ResetRequestsTask +com.github.tomakehurst.wiremock.admin.tasks.GetRequestCountTask +com.github.tomakehurst.wiremock.admin.tasks.FindRequestsTask +com.github.tomakehurst.wiremock.admin.tasks.FindUnmatchedRequestsTask +com.github.tomakehurst.wiremock.admin.tasks.FindNearMissesForUnmatchedTask +com.github.tomakehurst.wiremock.admin.tasks.AbstractSingleServeEventTask +com.github.tomakehurst.wiremock.admin.tasks.GetServedStubTask +com.github.tomakehurst.wiremock.admin.RemoveServeEventTask +com.github.tomakehurst.wiremock.admin.RemoveServeEventsByRequestPatternTask +com.github.tomakehurst.wiremock.admin.RemoveServeEventsByStubMetadataTask +com.github.tomakehurst.wiremock.admin.tasks.SnapshotTask +com.github.tomakehurst.wiremock.admin.StartRecordingTask +com.github.tomakehurst.wiremock.admin.StopRecordingTask +com.github.tomakehurst.wiremock.admin.GetRecordingStatusTask +com.github.tomakehurst.wiremock.admin.tasks.AbstractGetDocTask +com.github.tomakehurst.wiremock.admin.tasks.GetRecordingsIndexTask +com.github.tomakehurst.wiremock.admin.tasks.FindNearMissesForRequestTask +com.github.tomakehurst.wiremock.admin.tasks.FindNearMissesForRequestPatternTask +com.github.tomakehurst.wiremock.admin.GetGlobalSettingsTask +com.github.tomakehurst.wiremock.admin.tasks.GlobalSettingsUpdateTask +com.github.tomakehurst.wiremock.admin.PatchExtendedSettingsTask +com.github.tomakehurst.wiremock.admin.tasks.ShutdownServerTask +com.github.tomakehurst.wiremock.admin.tasks.GetSwaggerSpecTask +com.github.tomakehurst.wiremock.admin.tasks.GetDocIndexTask +com.github.tomakehurst.wiremock.admin.tasks.GetCaCertTask +java.util.Base64 +java.util.Base64$Decoder +java.util.Base64$Encoder +com.github.tomakehurst.wiremock.admin.tasks.HealthCheckTask +com.github.tomakehurst.wiremock.admin.tasks.GetVersionTask +com.google.common.collect.ImmutableSet$CachingAsList +com.google.common.collect.ImmutableMapEntrySet +com.google.common.collect.ImmutableMapEntrySet$RegularEntrySet +com.google.common.collect.IndexedImmutableSet +com.google.common.collect.ImmutableMapKeySet +com.google.common.collect.RegularImmutableMap$BucketOverflowException +com.google.common.collect.ImmutableMapEntry$NonTerminalImmutableMapEntry +com.google.common.collect.ImmutableMapEntry$NonTerminalImmutableBiMapEntry +com.google.common.collect.RegularImmutableBiMap$Inverse +com.google.common.collect.Hashing +com.google.common.collect.RegularImmutableMap +com.google.common.collect.ImmutableList +com.google.common.collect.RegularImmutableMap$Values +com.google.common.collect.RegularImmutableMap$KeySet +com.github.tomakehurst.wiremock.http.AdminRequestHandler +com.github.tomakehurst.wiremock.common.InvalidParameterException +com.github.tomakehurst.wiremock.common.NotPermittedException +com.github.tomakehurst.wiremock.http.BasicResponseRenderer +com.github.tomakehurst.wiremock.core.WireMockApp$$Lambda/0x00003fc0012e9478 +com.github.tomakehurst.wiremock.core.WireMockApp$$Lambda/0x00003fc0012e96d0 +com.github.tomakehurst.wiremock.jetty.JettyHttpServer +com.github.tomakehurst.wiremock.jetty11.Jetty11HttpServer +com.github.tomakehurst.wiremock.servlet.MultipartRequestConfigurer +com.github.tomakehurst.wiremock.http.ThreadPoolFactory +org.eclipse.jetty.io.NetworkTrafficListener +org.eclipse.jetty.util.component.LifeCycle +org.eclipse.jetty.util.component.Container +org.eclipse.jetty.util.component.Graceful +org.eclipse.jetty.server.Connector +org.eclipse.jetty.server.ConnectionFactory +org.eclipse.jetty.util.component.Destroyable +org.eclipse.jetty.util.component.Dumpable +org.eclipse.jetty.util.component.Dumpable$DumpableContainer +org.eclipse.jetty.util.component.AbstractLifeCycle +org.eclipse.jetty.util.component.ContainerLifeCycle +org.eclipse.jetty.server.AbstractConnectionFactory +org.eclipse.jetty.server.ConnectionFactory$Upgrading +org.eclipse.jetty.server.NegotiatingServerConnection$CipherDiscriminator +org.eclipse.jetty.http2.server.AbstractHTTP2ServerConnectionFactory +org.eclipse.jetty.http2.server.HTTP2ServerConnectionFactory +org.eclipse.jetty.http2.server.HTTP2CServerConnectionFactory +org.eclipse.jetty.server.NetworkConnector +org.eclipse.jetty.server.AbstractConnector +org.eclipse.jetty.server.AbstractNetworkConnector +org.eclipse.jetty.server.ServerConnector +org.eclipse.jetty.server.NetworkTrafficServerConnector +org.eclipse.jetty.server.Handler +org.eclipse.jetty.server.handler.AbstractHandler +com.github.tomakehurst.wiremock.jetty11.Jetty11HttpServer$1 +org.eclipse.jetty.server.HandlerContainer +com.github.tomakehurst.wiremock.jetty.JettyHttpUtils +org.eclipse.jetty.util.Attributes +org.eclipse.jetty.server.handler.AbstractHandlerContainer +org.eclipse.jetty.server.handler.HandlerWrapper +org.eclipse.jetty.server.handler.ScopedHandler +org.eclipse.jetty.server.handler.ContextHandler +org.eclipse.jetty.servlet.ServletContextHandler +org.eclipse.jetty.server.handler.ErrorHandler +com.github.tomakehurst.wiremock.jetty11.NotFoundHandler +jakarta.servlet.DispatcherType +com.github.tomakehurst.wiremock.jetty.QueuedThreadPoolFactory +org.eclipse.jetty.util.thread.ThreadPool +org.eclipse.jetty.server.Server +org.eclipse.jetty.util.component.AbstractLifeCycle$StopException +org.eclipse.jetty.http.BadMessageException +org.eclipse.jetty.http.HttpURI +org.eclipse.jetty.http.HttpField +org.eclipse.jetty.http.PreEncodedHttpField +jakarta.servlet.ServletResponse +jakarta.servlet.http.HttpServletResponse +jakarta.servlet.ServletRequest +jakarta.servlet.http.HttpServletRequest +org.eclipse.jetty.util.component.AbstractLifeCycle$State +org.eclipse.jetty.util.thread.ThreadPool$SizedThreadPool +org.eclipse.jetty.util.thread.TryExecutor +org.eclipse.jetty.util.VirtualThreads$Configurable +org.eclipse.jetty.util.thread.QueuedThreadPool +java.util.concurrent.RejectedExecutionException +org.eclipse.jetty.util.thread.TryExecutor$1 +org.eclipse.jetty.util.thread.QueuedThreadPool$$Lambda/0x00003fc0012f76c8 +org.eclipse.jetty.util.thread.AutoLock +org.eclipse.jetty.util.AtomicBiInteger +org.eclipse.jetty.util.thread.AutoLock$WithCondition +java.lang.invoke.LambdaForm$MH/0x00003fc0012fc000 +org.eclipse.jetty.util.thread.QueuedThreadPool$Runner +org.eclipse.jetty.util.thread.ReservedThreadExecutor +org.eclipse.jetty.util.component.AbstractLifeCycle$1 +org.eclipse.jetty.util.BlockingArrayQueue +org.eclipse.jetty.util.MemoryUtils +org.eclipse.jetty.util.thread.ThreadPoolBudget +org.eclipse.jetty.util.thread.ThreadPoolBudget$Lease +org.eclipse.jetty.util.thread.ThreadPoolBudget$1 +java.util.concurrent.CopyOnWriteArraySet +org.eclipse.jetty.util.component.ContainerLifeCycle$Managed +org.eclipse.jetty.util.component.ContainerLifeCycle$Bean +java.util.EventListener +org.eclipse.jetty.util.component.ContainerLifeCycle$1 +org.eclipse.jetty.util.component.AttributeContainerMap +com.github.tomakehurst.wiremock.common.JettySettings$Builder +com.github.tomakehurst.wiremock.common.JettySettings +java.lang.invoke.LambdaForm$DMH/0x00003fc0012fc400 +com.github.tomakehurst.wiremock.jetty.JettyHttpServer$$Lambda/0x00003fc0012fb388 +com.github.tomakehurst.wiremock.jetty.JettyHttpServer$NetworkTrafficListenerAdapter +com.github.tomakehurst.wiremock.jetty11.Jetty11Utils +org.eclipse.jetty.server.HttpConfiguration$Customizer +org.eclipse.jetty.server.HttpConfiguration +org.eclipse.jetty.util.Index$Builder +org.eclipse.jetty.util.Index +org.eclipse.jetty.util.Index$Mutable +org.eclipse.jetty.util.AbstractTrie +org.eclipse.jetty.util.ArrayTrie +org.eclipse.jetty.util.Index$Mutable$Builder +org.eclipse.jetty.util.TreeTrie +org.eclipse.jetty.util.TreeTrie$Node +org.eclipse.jetty.http.HttpScheme +org.eclipse.jetty.util.BufferUtil +org.eclipse.jetty.http.HttpScheme$$Lambda/0x00003fc0012fd410 +org.eclipse.jetty.util.AbstractTrie$$Lambda/0x00003fc0012fd658 +org.eclipse.jetty.util.ArrayTrie$Node +org.eclipse.jetty.http.ComplianceViolation$Mode +org.eclipse.jetty.http.HttpCompliance +org.eclipse.jetty.http.ComplianceViolation +org.eclipse.jetty.http.HttpCompliance$Violation +org.eclipse.jetty.http.UriCompliance +org.eclipse.jetty.http.UriCompliance$Violation +org.eclipse.jetty.http.CookieCompliance +org.eclipse.jetty.http.CookieCompliance$Violation +org.eclipse.jetty.server.MultiPartFormDataCompliance +org.eclipse.jetty.http.HttpMethod +org.eclipse.jetty.http.HttpMethod$Type +org.eclipse.jetty.util.StringUtil +org.eclipse.jetty.http.HttpMethod$$Lambda/0x00003fc0013026c8 +org.eclipse.jetty.http.HttpMethod$$Lambda/0x00003fc001302910 +org.eclipse.jetty.http.HttpMethod$$Lambda/0x00003fc001302b58 +org.eclipse.jetty.server.SecureRequestCustomizer +org.eclipse.jetty.util.ssl.SslContextFactory +org.eclipse.jetty.util.ssl.SniX509ExtendedKeyManager$SniSelector +org.eclipse.jetty.util.ssl.SslContextFactory$Server +org.eclipse.jetty.server.HttpConfiguration$ConnectionFactory +org.eclipse.jetty.server.HttpConnectionFactory +org.eclipse.jetty.io.Connection +org.eclipse.jetty.io.AbstractConnection +org.eclipse.jetty.server.HttpTransport +org.eclipse.jetty.io.WriteFlusher$Listener +org.eclipse.jetty.io.Connection$UpgradeFrom +org.eclipse.jetty.io.Connection$UpgradeTo +org.eclipse.jetty.server.HttpConnection +org.eclipse.jetty.http.HttpVersion +org.eclipse.jetty.http.HttpVersion$$Lambda/0x00003fc001306d38 +org.eclipse.jetty.http2.parser.Parser$Listener +org.eclipse.jetty.http2.HTTP2Connection +org.eclipse.jetty.http2.parser.ServerParser$Listener +org.eclipse.jetty.http2.server.HTTP2ServerConnection +org.eclipse.jetty.http2.parser.RateControl$Factory +org.eclipse.jetty.http2.FlowControlStrategy +org.eclipse.jetty.http2.api.Session$Listener +org.eclipse.jetty.http2.api.server.ServerSessionListener +org.eclipse.jetty.io.Connection$Listener +org.eclipse.jetty.http2.server.AbstractHTTP2ServerConnectionFactory$HTTP2SessionContainer +java.util.concurrent.CompletionStage +java.util.concurrent.CompletableFuture +org.eclipse.jetty.util.component.Graceful$1 +org.eclipse.jetty.http2.parser.WindowRateControl$Factory +org.eclipse.jetty.http2.parser.RateControl +org.eclipse.jetty.http2.FlowControlStrategy$Factory +org.eclipse.jetty.http2.server.AbstractHTTP2ServerConnectionFactory$$Lambda/0x00003fc001309868 +org.eclipse.jetty.util.thread.Invocable +org.eclipse.jetty.util.Callback +org.eclipse.jetty.http2.api.Session +org.eclipse.jetty.http2.ISession +org.eclipse.jetty.util.thread.ExecutionStrategy$Producer +org.eclipse.jetty.util.thread.ExecutionStrategy +org.eclipse.jetty.http.MetaData +org.eclipse.jetty.http.MetaData$Request +org.eclipse.jetty.http2.HTTP2Channel$Server +org.eclipse.jetty.server.HttpOutput$Interceptor +org.eclipse.jetty.server.HttpChannel +org.eclipse.jetty.http2.server.HttpChannelOverHTTP2 +org.eclipse.jetty.http2.server.HTTP2ServerConnection$ServerHttpChannelOverHTTP2 +org.eclipse.jetty.http2.HTTP2Session +org.eclipse.jetty.http2.server.HTTP2ServerSession +org.eclipse.jetty.util.component.Container$Listener +com.github.tomakehurst.wiremock.jetty11.Jetty11HttpServer$$Lambda/0x00003fc00130d4c0 +com.github.tomakehurst.wiremock.jetty11.Jetty11HttpServer$$Lambda/0x00003fc00130d718 +org.eclipse.jetty.util.component.Graceful$Shutdown +org.eclipse.jetty.server.AbstractConnector$2 +org.eclipse.jetty.util.thread.Scheduler +org.eclipse.jetty.io.ByteBufferPool +org.eclipse.jetty.io.SelectorManager +org.eclipse.jetty.server.ServerConnector$ServerConnectorManager +java.nio.channels.ServerSocketChannel +org.eclipse.jetty.io.ManagedSelector$Selectable +org.eclipse.jetty.io.EndPoint +org.eclipse.jetty.io.IdleTimeout +org.eclipse.jetty.io.AbstractEndPoint +org.eclipse.jetty.io.SelectableChannelEndPoint +org.eclipse.jetty.io.SocketChannelEndPoint +org.eclipse.jetty.io.NetworkTrafficSocketChannelEndPoint +org.eclipse.jetty.http.HttpFields +org.eclipse.jetty.server.RequestLog +org.eclipse.jetty.server.HttpChannel$Dispatchable +org.eclipse.jetty.server.HttpChannel$Listener +org.eclipse.jetty.server.HttpChannel$1 +org.eclipse.jetty.util.thread.ScheduledExecutorScheduler +org.eclipse.jetty.util.thread.Scheduler$Task +org.eclipse.jetty.io.AbstractByteBufferPool +org.eclipse.jetty.io.ArrayByteBufferPool +org.eclipse.jetty.io.LogarithmicArrayByteBufferPool +org.eclipse.jetty.io.RetainableByteBufferPool +org.eclipse.jetty.io.ArrayRetainableByteBufferPool +org.eclipse.jetty.io.LogarithmicArrayByteBufferPool$LogarithmicRetainablePool +org.eclipse.jetty.util.Pool +org.eclipse.jetty.io.ArrayRetainableByteBufferPool$RetainedBucket +java.util.function.IntUnaryOperator +org.eclipse.jetty.io.LogarithmicArrayByteBufferPool$LogarithmicRetainablePool$$Lambda/0x00003fc0013131d0 +org.eclipse.jetty.io.LogarithmicArrayByteBufferPool$LogarithmicRetainablePool$$Lambda/0x00003fc001313418 +org.eclipse.jetty.util.Pool$Entry +org.eclipse.jetty.util.Pool$MultiEntry +org.eclipse.jetty.util.Pool$MonoEntry +org.eclipse.jetty.util.Pool$StrategyType +org.eclipse.jetty.io.AbstractByteBufferPool$Bucket +java.util.function.IntConsumer +java.lang.invoke.LambdaForm$DMH/0x00003fc001318000 +java.lang.classfile.CodeBuilder$1 +org.eclipse.jetty.io.AbstractByteBufferPool$$Lambda/0x00003fc001314b10 +org.eclipse.jetty.util.NanoTime +org.eclipse.jetty.io.AbstractByteBufferPool$$Lambda/0x00003fc001314f60 +org.eclipse.jetty.server.AbstractConnector$1 +org.eclipse.jetty.util.component.Container$InheritedListener +org.eclipse.jetty.util.ProcessorUtils +java.lang.ProcessEnvironment +java.lang.ProcessEnvironment$ExternalData +java.lang.ProcessEnvironment$Variable +java.lang.Process +java.lang.ProcessImpl +java.lang.ProcessImpl$LaunchMechanism +java.lang.ProcessEnvironment$Value +java.lang.ProcessEnvironment$StringEnvironment +org.eclipse.jetty.io.ManagedSelector$SelectorUpdate +org.eclipse.jetty.io.ManagedSelector +org.eclipse.jetty.io.SelectorManager$$Lambda/0x00003fc001316150 +java.lang.invoke.LambdaForm$DMH/0x00003fc001318400 +com.github.tomakehurst.wiremock.jetty11.Jetty11Utils$$Lambda/0x00003fc0013163a0 +com.github.tomakehurst.wiremock.jetty11.Jetty11Utils$$Lambda/0x00003fc0013165e0 +jakarta.servlet.ServletContext +org.eclipse.jetty.server.handler.ContextHandler$AliasCheck +org.eclipse.jetty.server.session.SessionHandler +org.eclipse.jetty.security.Authenticator$AuthConfiguration +org.eclipse.jetty.security.SecurityHandler +org.eclipse.jetty.servlet.ServletHandler +org.eclipse.jetty.server.handler.gzip.GzipFactory +org.eclipse.jetty.server.handler.gzip.GzipHandler +org.eclipse.jetty.util.Decorator +org.eclipse.jetty.util.AttributesMap +org.eclipse.jetty.server.handler.ContextHandler$StaticContext +org.eclipse.jetty.server.handler.ContextHandler$Context +org.eclipse.jetty.servlet.ServletContextHandler$Context +jakarta.servlet.ServletContextListener +jakarta.servlet.ServletContextAttributeListener +jakarta.servlet.ServletRequestListener +jakarta.servlet.ServletRequestAttributeListener +jakarta.servlet.http.HttpSessionIdListener +jakarta.servlet.http.HttpSessionListener +jakarta.servlet.http.HttpSessionAttributeListener +org.eclipse.jetty.server.handler.ContextHandler$ContextStatus +org.eclipse.jetty.util.security.SecurityUtils +java.io.Console +java.lang.SecurityManager +java.lang.Deprecated +jdk.proxy1.$Proxy16 +org.eclipse.jetty.util.EmptyTrie +org.eclipse.jetty.server.handler.ContextHandler$Availability +jakarta.servlet.ServletException +jakarta.servlet.RequestDispatcher +java.security.BasicPermission +java.lang.RuntimePermission +org.eclipse.jetty.server.AllowedResourceAliasChecker +org.eclipse.jetty.server.SymlinkAllowedResourceAliasChecker +org.eclipse.jetty.util.resource.ResourceFactory +org.eclipse.jetty.util.resource.Resource +org.eclipse.jetty.server.AllowedResourceAliasChecker$$Lambda/0x00003fc00131b810 +org.eclipse.jetty.util.component.LifeCycle$Listener +org.eclipse.jetty.server.AllowedResourceAliasChecker$AllowedResourceAliasCheckListener +org.eclipse.jetty.util.URIUtil +org.eclipse.jetty.util.Utf8Appendable$NotUtf8Exception +org.eclipse.jetty.security.ConstraintAware +org.eclipse.jetty.security.ConstraintSecurityHandler +jakarta.servlet.Registration +jakarta.servlet.ServletRegistration +jakarta.servlet.FilterRegistration +org.eclipse.jetty.util.DecoratedObjectFactory +org.eclipse.jetty.server.UserIdentity$Scope +jakarta.servlet.FilterChain +org.eclipse.jetty.http.pathmap.PathSpec +org.eclipse.jetty.server.ResourceService$WelcomeFactory +jakarta.servlet.Servlet +jakarta.servlet.ServletConfig +jakarta.servlet.GenericServlet +jakarta.servlet.http.HttpServlet +org.eclipse.jetty.servlet.DefaultServlet +org.eclipse.jetty.servlet.Source +org.eclipse.jetty.servlet.Source$Origin +org.eclipse.jetty.servlet.BaseHolder +org.eclipse.jetty.servlet.Holder +org.eclipse.jetty.servlet.ServletHolder +jakarta.servlet.UnavailableException +jakarta.servlet.Registration$Dynamic +jakarta.servlet.ServletRegistration$Dynamic +org.eclipse.jetty.servlet.ServletHolder$1 +org.eclipse.jetty.servlet.Holder$1 +org.eclipse.jetty.util.ArrayUtil +org.eclipse.jetty.servlet.ServletHandler$MappedServlet +org.eclipse.jetty.servlet.ServletMapping +com.github.tomakehurst.wiremock.servlet.WireMockHandlerDispatchingServlet +com.github.tomakehurst.wiremock.jetty.DefaultMultipartRequestConfigurer +com.github.tomakehurst.wiremock.servlet.NotMatchedServlet +org.eclipse.jetty.servlet.FilterHolder +jakarta.servlet.FilterRegistration$Dynamic +jakarta.servlet.FilterConfig +jakarta.servlet.Filter +org.eclipse.jetty.servlets.CrossOriginFilter +org.eclipse.jetty.servlet.FilterMapping +com.github.tomakehurst.wiremock.common.AsynchronousResponseSettings +com.github.tomakehurst.wiremock.jetty11.Jetty11HttpUtils +com.github.tomakehurst.wiremock.servlet.FaultInjectorFactory +com.github.tomakehurst.wiremock.jetty.JettyFaultInjectorFactory +com.github.tomakehurst.wiremock.core.FaultInjector +com.github.tomakehurst.wiremock.core.Options$ChunkedEncodingPolicy +org.eclipse.jetty.http.MimeTypes +org.eclipse.jetty.http.MimeTypes$$Lambda/0x00003fc001327358 +org.eclipse.jetty.http.MimeTypes$Type +org.eclipse.jetty.util.QuotedStringTokenizer +org.eclipse.jetty.http.HttpFieldPreEncoder +org.eclipse.jetty.util.TypeUtil +org.eclipse.jetty.util.ServiceLoaderSpliterator +org.eclipse.jetty.http.PreEncodedHttpField$$Lambda/0x00003fc0013282a8 +org.eclipse.jetty.http.Http1FieldPreEncoder +org.eclipse.jetty.util.ServiceLoaderSpliterator$ServiceProvider +org.eclipse.jetty.http.PreEncodedHttpField$1 +org.eclipse.jetty.http2.hpack.HpackFieldPreEncoder +org.eclipse.jetty.http.HttpHeader +org.eclipse.jetty.http.HttpHeader$$Lambda/0x00003fc001329428 +org.eclipse.jetty.http2.hpack.HpackEncoder +org.eclipse.jetty.http2.hpack.HpackException +org.eclipse.jetty.http2.hpack.HpackException$StreamException +org.eclipse.jetty.http.HttpField$IntValueHttpField +org.eclipse.jetty.http2.hpack.HpackException$SessionException +java.util.JumboEnumSet +org.eclipse.jetty.http2.hpack.HpackContext +org.eclipse.jetty.http2.hpack.StaticTableHttpField +org.eclipse.jetty.http2.hpack.HpackContext$Entry +org.eclipse.jetty.http2.hpack.HpackContext$StaticEntry +org.eclipse.jetty.http2.hpack.HpackContext$1 +org.eclipse.jetty.http.compression.HuffmanEncoder +org.eclipse.jetty.http.compression.Huffman +org.eclipse.jetty.http.HttpTokens +org.eclipse.jetty.http.HttpTokens$Token +org.eclipse.jetty.http.HttpTokens$Type +org.eclipse.jetty.http.compression.NBitIntegerEncoder +org.eclipse.jetty.http.compression.NBitStringEncoder +org.eclipse.jetty.http.HttpStatus$Code +sun.util.PreHashedMap +sun.nio.cs.StandardCharsets$Aliases +sun.nio.cs.StandardCharsets$Cache +org.eclipse.jetty.http.MimeTypes$$Lambda/0x00003fc00132cd38 +org.eclipse.jetty.http.MimeTypes$$Lambda/0x00003fc00132cf90 +org.eclipse.jetty.http.MimeTypes$$Lambda/0x00003fc00132d1d0 +org.eclipse.jetty.http.MimeTypes$$Lambda/0x00003fc00132d428 +java.nio.BufferOverflowException +org.eclipse.jetty.io.ByteBufferOutputStream +java.io.PrintWriter +com.github.tomakehurst.wiremock.servlet.ContentTypeSettingFilter +com.github.tomakehurst.wiremock.servlet.TrailingSlashFilter +org.eclipse.jetty.server.handler.HandlerCollection +org.eclipse.jetty.util.MultiException +com.github.tomakehurst.wiremock.jetty11.Jetty11HttpServer$$Lambda/0x00003fc00132e7e8 +org.eclipse.jetty.server.handler.HandlerCollection$Handlers +org.eclipse.jetty.server.HttpInput$Interceptor +org.eclipse.jetty.util.IncludeExcludeSet +org.eclipse.jetty.util.IncludeExclude +org.eclipse.jetty.util.IncludeExcludeSet$SetContainsPredicate +org.eclipse.jetty.http.pathmap.PathSpecSet +org.eclipse.jetty.http.pathmap.PathMappings +org.eclipse.jetty.http.pathmap.MappedResource +org.eclipse.jetty.http.pathmap.PathMappings$$Lambda/0x00003fc001330000 +org.eclipse.jetty.util.AsciiLowerCaseSet +org.eclipse.jetty.server.handler.gzip.GzipHttpOutputInterceptor +java.nio.channels.WritePendingException +org.eclipse.jetty.http.pathmap.AbstractPathSpec +org.eclipse.jetty.http.pathmap.ServletPathSpec +org.eclipse.jetty.http.pathmap.PathSpecGroup +org.eclipse.jetty.http.pathmap.MappedResource$1 +org.eclipse.jetty.http.pathmap.PathMappings$1 +com.github.tomakehurst.wiremock.client.WireMock +com.github.tomakehurst.wiremock.client.ResponseDefinitionBuilder +com.github.tomakehurst.wiremock.client.ResponseDefinitionBuilder$ProxyResponseDefinitionBuilder +com.github.tomakehurst.wiremock.matching.ContentPattern +com.github.tomakehurst.wiremock.matching.StringValuePattern +com.github.tomakehurst.wiremock.matching.EqualToPattern +com.github.tomakehurst.wiremock.matching.EqualToJsonPattern +com.github.tomakehurst.wiremock.matching.PathPattern +com.github.tomakehurst.wiremock.matching.MatchesJsonPathPattern +com.github.tomakehurst.wiremock.matching.MatchesJsonSchemaPattern +com.github.tomakehurst.wiremock.matching.MatchesXPathPattern +com.github.tomakehurst.wiremock.matching.ContainsPattern +com.github.tomakehurst.wiremock.matching.NegativeContainsPattern +com.github.tomakehurst.wiremock.matching.AbstractRegexPattern +com.github.tomakehurst.wiremock.matching.NegativeRegexPattern +com.github.tomakehurst.wiremock.matching.AbsentPattern +com.github.tomakehurst.wiremock.matching.UrlPattern +com.github.tomakehurst.wiremock.matching.UrlPathPattern +com.github.tomakehurst.wiremock.matching.UrlPathTemplatePattern +com.github.tomakehurst.wiremock.matching.MultiValuePattern +com.github.tomakehurst.wiremock.matching.MultipleMatchMultiValuePattern +com.github.tomakehurst.wiremock.matching.ExactMatchMultiValuePattern +com.github.tomakehurst.wiremock.matching.IncludesMatchMultiValuePattern +com.github.tomakehurst.wiremock.client.MappingBuilder +com.github.tomakehurst.wiremock.matching.RegexPattern +com.github.tomakehurst.wiremock.client.WireMock$1 +com.github.tomakehurst.wiremock.matching.AbstractLogicalMatcher +com.github.tomakehurst.wiremock.matching.LogicalOr +com.github.tomakehurst.wiremock.matching.LogicalAnd +com.github.tomakehurst.wiremock.matching.NotPattern +org.eclipse.jetty.server.handler.ErrorHandler$ErrorPageMapper +org.eclipse.jetty.server.ShutdownMonitor +org.eclipse.jetty.server.ShutdownMonitor$Holder +org.slf4j.event.Level +org.slf4j.helpers.MessageFormatter +org.slf4j.helpers.NormalizedParameters +org.slf4j.helpers.FormattingTuple +org.apache.maven.surefire.api.report.TestOutputReportEntry +org.eclipse.jetty.http.HttpGenerator +org.eclipse.jetty.http.MetaData$Response +org.eclipse.jetty.http.HttpFields$Immutable +org.eclipse.jetty.http.EmptyHttpFields +org.eclipse.jetty.http.HttpFields$Mutable +org.eclipse.jetty.http.HttpHeaderValue +org.eclipse.jetty.http.HttpHeaderValue$$Lambda/0x00003fc0013394d8 +org.eclipse.jetty.http.HttpGenerator$PreparedResponse +org.eclipse.jetty.http.HttpStatus +java.nio.HeapByteBufferR +org.eclipse.jetty.server.Server$$Lambda/0x00003fc001339d48 +org.eclipse.jetty.server.Server$$Lambda/0x00003fc001339fa8 +org.eclipse.jetty.server.Server$$Lambda/0x00003fc00133a1f8 +java.net.InetSocketAddress$InetSocketAddressHolder +java.nio.channels.spi.SelectorProvider +java.nio.channels.spi.SelectorProvider$Holder +sun.nio.ch.DefaultSelectorProvider +sun.nio.ch.SelectorProviderImpl +sun.nio.ch.KQueueSelectorProvider +sun.nio.ch.ServerSocketChannelImpl +sun.nio.ch.UnixDispatcher +sun.nio.ch.SocketDispatcher +sun.nio.ch.Net +java.net.ProtocolFamily +sun.nio.ch.Net$1 +java.lang.StableValue +jdk.internal.lang.stable.StableValueImpl +sun.net.ext.ExtendedSocketOptions +jdk.net.ExtendedSocketOptions +java.net.SocketOption +jdk.net.ExtendedSocketOptions$ExtSocketOption +jdk.net.UnixDomainPrincipal +jdk.net.ExtendedSocketOptions$PlatformSocketOptions +jdk.net.ExtendedSocketOptions$2 +jdk.net.MacOSXSocketOptions +jdk.net.ExtendedSocketOptions$1 +java.net.StandardProtocolFamily +java.net.StandardSocketOptions +java.net.StandardSocketOptions$StdSocketOption +java.net.NetworkInterface +sun.nio.ch.ServerSocketChannelImpl$DefaultOptionsHolder +sun.nio.ch.SocketOptionRegistry +sun.nio.ch.SocketOptionRegistry$RegistryKey +sun.nio.ch.SocketOptionRegistry$LazyInitialization +sun.nio.ch.OptionKey +sun.nio.ch.ExtendedSocketOption +sun.nio.ch.ExtendedSocketOption$1 +sun.net.NetHooks +sun.net.NetHooks$Provider +sun.net.sdp.SdpProvider +java.net.ServerSocket +sun.nio.ch.ServerSocketAdaptor +java.net.SocketOptions +java.net.SocketImpl +sun.nio.ch.DummySocketImpl +org.eclipse.jetty.util.thread.ReservedThreadExecutor$1 +java.util.concurrent.SynchronousQueue +java.util.concurrent.TransferQueue +java.util.concurrent.LinkedTransferQueue +java.util.concurrent.SynchronousQueue$Transferer +java.util.concurrent.LinkedTransferQueue$DualNode +org.eclipse.jetty.util.VirtualThreads +java.security.PrivilegedExceptionAction +java.lang.Thread$Builder +java.lang.Thread$Builder$OfVirtual +java.lang.ThreadBuilders$BaseThreadBuilder +java.lang.ThreadBuilders$VirtualThreadBuilder +java.lang.ThreadBuilders +java.lang.ThreadBuilders$BaseThreadFactory +java.lang.ThreadBuilders$VirtualThreadFactory +java.util.concurrent.ThreadPerTaskExecutor +java.lang.Thread$Builder$OfPlatform +org.eclipse.jetty.util.thread.ThreadPoolBudget$Leased +org.eclipse.jetty.util.thread.ThreadPoolBudget$$Lambda/0x00003fc00133aae8 +java.util.stream.IntStream +java.util.stream.IntPipeline +java.util.stream.IntPipeline$StatelessOp +java.util.stream.ReferencePipeline$4 +java.util.function.IntBinaryOperator +java.util.stream.IntPipeline$$Lambda/0x00003fc0012ae248 +java.util.stream.ReduceOps$6 +java.util.stream.Sink$OfInt +java.util.stream.ReduceOps$5ReducingSink +java.util.stream.ReferencePipeline$4$1 +org.eclipse.jetty.util.thread.QueuedThreadPool$$Lambda/0x00003fc00133ad10 +org.eclipse.jetty.util.thread.PrivilegedThreadFactory +java.lang.String$$StringConcat/0x00003fc00133c000 +java.lang.invoke.LambdaForm$DMH/0x00003fc00133c400 +java.lang.invoke.LambdaForm$MH/0x00003fc00133c800 +java.lang.invoke.LambdaForm$MH/0x00003fc00133cc00 +org.eclipse.jetty.util.DeprecationWarning +org.eclipse.jetty.servlet.ServletContextHandler$ServletContainerInitializerCaller +org.eclipse.jetty.servlet.ListenerHolder +org.eclipse.jetty.server.handler.ContextHandler$ContextScopeListener +jakarta.servlet.http.HttpSessionActivationListener +jakarta.servlet.http.HttpSessionBindingListener +org.eclipse.jetty.util.MultiMap +org.eclipse.jetty.servlet.ServletHandler$$Lambda/0x00003fc00133e7d8 +org.eclipse.jetty.http.pathmap.MatchedPath +org.eclipse.jetty.http.pathmap.MatchedPath$1 +org.eclipse.jetty.http.pathmap.MatchedPath$2 +org.eclipse.jetty.servlet.ServletHandler$1 +jakarta.servlet.http.HttpServletMapping +org.eclipse.jetty.server.ServletPathMapping +org.eclipse.jetty.server.ServletPathMapping$1 +jakarta.servlet.http.MappingMatch +org.eclipse.jetty.http.pathmap.MatchedResource +org.eclipse.jetty.http.pathmap.ServletPathSpec$1 +org.eclipse.jetty.servlet.ServletHandler$$Lambda/0x00003fc00133d210 +org.eclipse.jetty.servlet.FilterHolder$WrapFunction +org.eclipse.jetty.servlet.FilterHolder$$Lambda/0x00003fc00133d658 +org.eclipse.jetty.servlet.Holder$HolderConfig +org.eclipse.jetty.servlet.FilterHolder$Config +org.eclipse.jetty.util.StringUtil$CsvSplitState +org.eclipse.jetty.util.StringUtil$1 +jakarta.servlet.annotation.ServletSecurity +org.eclipse.jetty.servlet.ServletHolder$Config +org.eclipse.jetty.util.compression.CompressionPool +org.eclipse.jetty.util.compression.InflaterPool +org.eclipse.jetty.util.compression.DeflaterPool +jakarta.servlet.ServletOutputStream +com.github.tomakehurst.wiremock.http.HttpResponder +java.util.ResourceBundle$ResourceBundleControlProviderHolder +java.util.spi.ResourceBundleControlProvider +java.util.ResourceBundle$ResourceBundleControlProviderHolder$$Lambda/0x00003fc0012af360 +java.util.stream.ReferencePipeline$$Lambda/0x00003fc0012af5a8 +java.util.ResourceBundle$CacheKey +java.util.ResourceBundle$CacheKeyReference +java.util.ResourceBundle$KeyElementReference +java.util.PropertyResourceBundle +sun.util.PropertyResourceBundleCharset +sun.util.PropertyResourceBundleCharset$PropertiesFileDecoder +java.util.ResourceBundle$BundleReference +jakarta.servlet.SingleThreadModel +org.eclipse.jetty.servlet.ServletHolder$WrapFunction +org.eclipse.jetty.servlet.ServletHolder$$Lambda/0x00003fc0013420e8 +org.eclipse.jetty.io.SelectorManager$SelectorManagerListener +org.eclipse.jetty.server.ConnectionFactory$Configuring +org.eclipse.jetty.server.AbstractConnector$$Lambda/0x00003fc001342930 +org.eclipse.jetty.server.AbstractConnector$$Lambda/0x00003fc001342b90 +org.eclipse.jetty.server.AbstractConnector$$Lambda/0x00003fc001342de0 +org.eclipse.jetty.server.ConnectionFactory$Detecting +org.eclipse.jetty.server.SslConnectionFactory +org.eclipse.jetty.util.thread.ScheduledExecutorScheduler$$Lambda/0x00003fc0013437d8 +java.nio.channels.ClosedSelectorException +java.net.SocketTimeoutException +java.net.SocketException +java.net.ConnectException +org.eclipse.jetty.util.statistic.SampleStatistic +java.util.concurrent.atomic.LongAccumulator +java.util.function.LongBinaryOperator +java.lang.invoke.LambdaForm$DMH/0x00003fc001344000 +org.eclipse.jetty.util.statistic.SampleStatistic$$Lambda/0x00003fc001343c60 +org.eclipse.jetty.io.ManagedSelector$SelectorProducer +java.nio.channels.CancelledKeyException +org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy +org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy$State +java.nio.channels.Selector +java.nio.channels.spi.AbstractSelector +sun.nio.ch.SelectorImpl +sun.nio.ch.KQueueSelectorImpl +java.nio.channels.spi.AbstractSelector$1 +sun.nio.ch.Util$2 +sun.nio.ch.KQueue +org.eclipse.jetty.io.ManagedSelector$$Lambda/0x00003fc001346be0 +org.eclipse.jetty.io.ManagedSelector$Start +org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy$1 +java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode +org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy$SubStrategy +org.eclipse.jetty.util.thread.Invocable$InvocationType +org.eclipse.jetty.util.thread.Invocable$Task +org.eclipse.jetty.server.AbstractConnector$Acceptor +org.eclipse.jetty.util.Uptime +org.eclipse.jetty.util.Uptime$Impl +org.eclipse.jetty.util.Uptime$DefaultImpl +javax.management.MBeanServerConnection +java.lang.management.ClassLoadingMXBean +java.lang.management.MemoryMXBean +java.lang.management.CompilationMXBean +java.lang.management.OperatingSystemMXBean +javax.management.MBeanServer +java.lang.management.ThreadMXBean +java.lang.invoke.LambdaForm$DMH/0x00003fc001344400 +java.lang.invoke.LambdaForm$BMH/0x00003fc001344800 +java.lang.invoke.LambdaForm$MH/0x00003fc001344c00 +java.lang.invoke.LambdaForm$MH/0x00003fc001348000 +com.github.tomakehurst.wiremock.junit5.WireMockExtension$$Lambda/0x00003fc001345668 +com.github.tomakehurst.wiremock.junit5.WireMockExtension$$Lambda/0x00003fc0013458b0 +com.github.tomakehurst.wiremock.common.Lazy$$Lambda/0x00003fc001345af8 +org.junit.jupiter.engine.execution.DefaultParameterContext +org.junit.jupiter.engine.execution.ParameterResolutionUtils$$Lambda/0x00003fc00134c2d8 +org.junit.jupiter.engine.execution.ParameterResolutionUtils$$Lambda/0x00003fc00134c538 +java.lang.invoke.LambdaForm$MH/0x00003fc001348400 +java.lang.invoke.LambdaForm$MH/0x00003fc001348800 +java.lang.invoke.LambdaForm$MH/0x00003fc001348c00 +com.github.tomakehurst.wiremock.matching.AnythingPattern +com.github.tomakehurst.wiremock.matching.StringValuePattern$$Lambda/0x00003fc00134ca18 +com.github.tomakehurst.wiremock.matching.StringValuePattern$$Lambda/0x00003fc00134cc70 +com.github.tomakehurst.wiremock.matching.EqualToPattern$1 +com.github.tomakehurst.wiremock.client.ScenarioMappingBuilder +com.github.tomakehurst.wiremock.client.BasicMappingBuilder +java.util.UUID$Holder +com.github.tomakehurst.wiremock.matching.RequestPatternBuilder +com.github.tomakehurst.wiremock.matching.SingleMatchMultiValuePattern +com.github.tomakehurst.wiremock.http.DelayDistribution +com.github.tomakehurst.wiremock.http.Body +com.github.tomakehurst.wiremock.http.MultiValue +com.github.tomakehurst.wiremock.http.HttpHeader +com.github.tomakehurst.wiremock.common.Strings +com.github.tomakehurst.wiremock.matching.RequestPattern +com.github.tomakehurst.wiremock.matching.RequestPattern$1 +com.github.tomakehurst.wiremock.http.HttpHeaders +com.google.common.collect.Multimap +com.google.common.collect.AbstractMultimap +com.google.common.collect.BaseImmutableMultimap +com.google.common.collect.ImmutableMultimap +com.google.common.collect.ImmutableMultimap$Values +com.google.common.collect.ImmutableMultimap$1 +com.google.common.collect.ImmutableMultimap$2 +com.google.common.collect.Multiset +com.google.common.collect.ImmutableMultiset +com.google.common.collect.ImmutableMultimap$Keys +com.google.common.collect.ImmutableMultimap$EntryCollection +com.google.common.collect.ListMultimap +com.google.common.collect.ImmutableListMultimap +com.google.common.collect.ImmutableMultimap$Builder +com.google.common.collect.ImmutableList$Builder +com.github.tomakehurst.wiremock.http.CaseInsensitiveKey +com.github.tomakehurst.wiremock.http.CaseInsensitiveKey$$Lambda/0x00003fc001349c40 +com.google.common.collect.Platform +com.google.common.collect.ImmutableAsList +com.google.common.collect.RegularImmutableAsList +com.google.common.collect.RegularImmutableList +com.google.common.collect.ImmutableList$SubList +com.google.common.collect.ImmutableList$ReverseImmutableList +com.google.common.collect.SingletonImmutableList +com.google.common.collect.UnmodifiableListIterator +com.google.common.collect.AbstractIndexedListIterator +com.google.common.collect.ImmutableList$1 +com.google.common.collect.EmptyImmutableListMultimap +com.github.tomakehurst.wiremock.http.ResponseDefinition +com.github.tomakehurst.wiremock.common.Metadata +com.github.tomakehurst.wiremock.extension.Parameters +java.util.concurrent.ConcurrentSkipListMap$CSLMSpliterator +java.util.concurrent.ConcurrentSkipListMap$KeySpliterator +com.github.tomakehurst.wiremock.store.InMemoryStubMappingStore$$Lambda/0x00003fc0013544c8 +software.amazon.lambda.powertools.metadata.exception.LambdaMetadataException +java.net.HttpURLConnection +sun.net.www.protocol.http.HttpURLConnection +sun.util.logging.PlatformLogger +sun.util.logging.PlatformLogger$Level +sun.net.www.protocol.http.AuthCache +sun.net.www.protocol.http.AuthCacheImpl +java.net.Authenticator +sun.net.www.protocol.http.AuthCacheImpl$$Lambda/0x00003fc0012b5d78 +sun.net.www.protocol.http.HttpURLConnection$TunnelState +sun.net.util.ProxyUtil +java.net.CookieHandler +java.net.ResponseCache +sun.net.spi.DefaultProxySelector$NonProxyInfo +sun.net.NetworkClient +sun.net.www.http.HttpClient +sun.net.www.http.KeepAliveCache +sun.net.www.http.KeepAliveKey +sun.net.www.http.HttpCapture +sun.net.PlatformSocketImpl +sun.nio.ch.NioSocketImpl +java.lang.invoke.LambdaForm$DMH/0x00003fc001358000 +sun.nio.ch.NioSocketImpl$$Lambda/0x00003fc0012b7fc8 +sun.nio.ch.SocketChannelImpl$DefaultOptionsHolder +java.net.Socket$SocketOutputStream +sun.nio.ch.NioSocketImpl$2 +org.eclipse.jetty.io.ManagedSelector$Accept +sun.net.www.protocol.http.AuthCacheValue +sun.net.www.protocol.http.AuthenticationInfo +jdk.internal.event.SocketWriteEvent +java.net.Socket$SocketInputStream +sun.nio.ch.NioSocketImpl$1 +jdk.internal.event.SocketReadEvent +java.nio.channels.SelectionKey +java.nio.channels.spi.AbstractSelectionKey +sun.nio.ch.SelectionKeyImpl +java.lang.invoke.ConstantBootstraps +org.eclipse.jetty.io.FillInterest +org.eclipse.jetty.io.AbstractEndPoint$1 +org.eclipse.jetty.io.WriteFlusher +org.eclipse.jetty.io.AbstractEndPoint$2 +org.eclipse.jetty.io.QuietException +org.eclipse.jetty.io.EofException +org.eclipse.jetty.io.AbstractEndPoint$State +java.nio.channels.ReadPendingException +org.eclipse.jetty.io.WriteFlusher$State +org.eclipse.jetty.io.WriteFlusher$FailedState +org.eclipse.jetty.io.WriteFlusher$PendingState +org.eclipse.jetty.io.WriteFlusher$IdleState +org.eclipse.jetty.io.WriteFlusher$WritingState +org.eclipse.jetty.io.WriteFlusher$CompletingState +org.eclipse.jetty.io.WriteFlusher$StateType +org.eclipse.jetty.io.SelectableChannelEndPoint$$Lambda/0x00003fc001356fc0 +org.eclipse.jetty.io.SelectableChannelEndPoint$RunnableCloseable +org.eclipse.jetty.io.SelectableChannelEndPoint$1 +org.eclipse.jetty.io.SelectableChannelEndPoint$2 +org.eclipse.jetty.io.SelectableChannelEndPoint$3 +org.eclipse.jetty.io.IdleTimeout$$Lambda/0x00003fc001357c90 +java.lang.String$$StringConcat/0x00003fc001358400 +java.lang.invoke.LambdaForm$MH/0x00003fc001358800 +org.eclipse.jetty.util.thread.ScheduledExecutorScheduler$ScheduledFutureTask +org.eclipse.jetty.http.HttpParser$HttpHandler +org.eclipse.jetty.http.HttpParser$RequestHandler +org.eclipse.jetty.http.ComplianceViolation$Listener +org.eclipse.jetty.server.HttpChannelOverHttp +org.eclipse.jetty.server.HttpInput$Content +org.eclipse.jetty.server.HttpConnection$Content +org.eclipse.jetty.io.AbstractConnection$ReadCallback +org.eclipse.jetty.util.Callback$1 +org.eclipse.jetty.server.HttpConnection$AsyncReadCallback +org.eclipse.jetty.util.IteratingCallback +org.eclipse.jetty.server.HttpConnection$SendCallback +org.eclipse.jetty.util.IteratingCallback$State +org.eclipse.jetty.http.HttpGenerator$State +org.eclipse.jetty.http.HttpTokens$EndOfContent +org.eclipse.jetty.server.HttpInput$SpecialContent +org.eclipse.jetty.server.HttpInput$ErrorContent +org.eclipse.jetty.http.HostPortHttpField +org.eclipse.jetty.server.HttpInput$EofContent +org.eclipse.jetty.server.HttpInput$WrappingContent +org.eclipse.jetty.server.HttpChannelState +jakarta.servlet.AsyncEvent +org.eclipse.jetty.server.AsyncContextEvent +org.eclipse.jetty.server.HttpChannelState$State +org.eclipse.jetty.server.HttpChannelState$RequestState +org.eclipse.jetty.server.HttpChannelState$OutputState +org.eclipse.jetty.server.HttpChannelState$InputState +org.eclipse.jetty.server.Request +jakarta.servlet.AsyncContext +jakarta.servlet.http.WebConnection +org.eclipse.jetty.io.RuntimeIOException +jakarta.servlet.ServletInputStream +jakarta.servlet.http.HttpSession +org.eclipse.jetty.server.MultiParts +org.eclipse.jetty.server.Request$1 +java.nio.charset.UnsupportedCharsetException +jakarta.servlet.http.PushBuilder +org.eclipse.jetty.server.QuietServletException +org.eclipse.jetty.server.Authentication$Failed +org.eclipse.jetty.server.HttpInput +org.eclipse.jetty.server.ContentProducer +org.eclipse.jetty.server.AsyncContentProducer +org.eclipse.jetty.util.StaticException +org.eclipse.jetty.server.BlockingContentProducer +org.eclipse.jetty.server.AsyncContentProducer$LockedSemaphore +org.eclipse.jetty.server.Response +org.eclipse.jetty.server.HttpWriter +org.eclipse.jetty.server.Iso88591HttpWriter +org.eclipse.jetty.server.Utf8HttpWriter +org.eclipse.jetty.server.EncodingHttpWriter +org.eclipse.jetty.server.ResponseWriter +org.eclipse.jetty.server.HttpOutput +java.nio.channels.IllegalSelectorException +org.eclipse.jetty.http.HttpCookie$SetCookieHttpField +org.eclipse.jetty.server.Response$EncodingFrom +org.eclipse.jetty.http.DateGenerator +org.eclipse.jetty.http.DateGenerator$1 +java.io.CharConversionException +org.eclipse.jetty.util.SharedBlockingCallback +org.eclipse.jetty.server.HttpOutput$WriteBlocker +org.eclipse.jetty.server.HttpOutput$ApiState +org.eclipse.jetty.server.HttpOutput$State +org.eclipse.jetty.util.ConstantThrowable +org.eclipse.jetty.util.SharedBlockingCallback$BlockerFailedException +org.eclipse.jetty.util.SharedBlockingCallback$Blocker +org.eclipse.jetty.server.Response$OutputType +org.eclipse.jetty.server.HttpChannel$RequestDispatchable +org.eclipse.jetty.server.HttpChannel$AsyncDispatchable +org.eclipse.jetty.server.HttpChannelOverHttp$RequestBuilder +org.eclipse.jetty.http.HttpURI$Mutable +org.eclipse.jetty.http.HttpParser +org.eclipse.jetty.http.HttpParser$IllegalCharacterException +org.eclipse.jetty.http.HttpParser$State +org.eclipse.jetty.http.HttpParser$$Lambda/0x00003fc001367288 +org.eclipse.jetty.http.HttpParser$$Lambda/0x00003fc0013674b0 +org.eclipse.jetty.util.Utf8Appendable +org.eclipse.jetty.util.Utf8StringBuilder +org.eclipse.jetty.http.HttpParser$FieldCache +org.eclipse.jetty.http.HttpParser$FieldState +org.eclipse.jetty.server.AbstractConnectionFactory$$Lambda/0x00003fc0013686b0 +org.eclipse.jetty.server.AbstractConnectionFactory$$Lambda/0x00003fc0013688f0 +org.eclipse.jetty.io.ManagedSelector$$Lambda/0x00003fc001368b30 +sun.nio.ch.SocketAdaptor +org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread +org.eclipse.jetty.util.thread.ReservedThreadExecutor$State +java.util.concurrent.ForkJoinWorkerThread +org.eclipse.jetty.util.Retainable +org.eclipse.jetty.io.RetainableByteBuffer +org.eclipse.jetty.io.ArrayRetainableByteBufferPool$$Lambda/0x00003fc001369880 +java.nio.DirectByteBuffer$Deallocator +org.eclipse.jetty.io.RetainableByteBuffer$$Lambda/0x00003fc001369ac0 +org.eclipse.jetty.io.AbstractEndPoint$3 +org.eclipse.jetty.http.HttpParser$1 +org.eclipse.jetty.http.HttpURI$Mutable$State +org.eclipse.jetty.http.HttpURI$1 +org.eclipse.jetty.server.HttpChannelOverHttp$1 +org.eclipse.jetty.util.HostPort +org.eclipse.jetty.http.HttpURI$Immutable +org.eclipse.jetty.http.HttpFields$Mutable$1 +org.eclipse.jetty.io.RetainableByteBuffer$$Lambda/0x00003fc00136b220 +org.eclipse.jetty.server.HttpChannelState$3 +org.eclipse.jetty.server.HttpChannelState$Action +org.eclipse.jetty.server.HttpChannel$2 +org.eclipse.jetty.io.EndPoint$Wrapper +org.eclipse.jetty.io.ssl.SslConnection$DecryptedEndPoint +org.eclipse.jetty.server.ProxyConnectionFactory$ProxyEndPoint +org.eclipse.jetty.http.HttpFields$Immutable$1 +org.eclipse.jetty.server.handler.gzip.GzipHttpOutputInterceptor$GZState +org.eclipse.jetty.server.handler.ContextHandler$1 +org.eclipse.jetty.servlet.FilterMapping$1 +org.eclipse.jetty.servlet.ServletHandler$ChainEnd +jakarta.servlet.ServletRequestWrapper +org.eclipse.jetty.server.ServletRequestHttpWrapper +jakarta.servlet.ServletResponseWrapper +org.eclipse.jetty.server.ServletResponseHttpWrapper +com.github.tomakehurst.wiremock.common.LocalNotifier +com.github.tomakehurst.wiremock.servlet.WireMockHttpServletRequestAdapter +com.github.tomakehurst.wiremock.servlet.WireMockHttpServletRequestAdapter$$Lambda/0x00003fc00136f0a8 +com.google.common.base.Suppliers$NonSerializableMemoizingSupplier +com.google.common.base.Suppliers$MemoizingSupplier +com.google.common.base.Suppliers$NonSerializableMemoizingSupplier$$Lambda/0x00003fc00136f798 +jakarta.servlet.MultipartConfigElement +org.eclipse.jetty.server.ServletAttributes +com.github.tomakehurst.wiremock.servlet.WireMockHandlerDispatchingServlet$ServletHttpResponder +com.github.tomakehurst.wiremock.stubbing.ServeEvent +com.github.tomakehurst.wiremock.verification.LoggedRequest +com.github.tomakehurst.wiremock.servlet.WireMockHttpServletRequestAdapter$$Lambda/0x00003fc001370910 +com.github.tomakehurst.wiremock.common.url.PathParams +jakarta.servlet.http.Cookie +com.github.tomakehurst.wiremock.http.Cookie +com.github.tomakehurst.wiremock.servlet.WireMockHttpServletRequestAdapter$$Lambda/0x00003fc0013717e0 +com.google.common.collect.Maps +com.google.common.collect.ImmutableEnumMap +com.google.common.collect.Maps$8 +com.google.common.base.Converter +com.google.common.collect.Maps$BiMapConverter +com.google.common.collect.MapDifference +com.google.common.collect.SortedMapDifference +com.google.common.collect.Maps$EntryTransformer +com.google.common.collect.Maps$$Lambda/0x00003fc001372df0 +com.google.common.collect.Maps$IteratorBasedAbstractMap +com.google.common.collect.Maps$TransformedEntriesMap +com.github.tomakehurst.wiremock.common.Gzip +com.github.tomakehurst.wiremock.common.Urls +com.github.tomakehurst.wiremock.verification.LoggedRequest$$Lambda/0x00003fc001373bd0 +com.github.tomakehurst.wiremock.verification.LoggedRequest$$Lambda/0x00003fc001373e00 +com.github.tomakehurst.wiremock.common.Timing +com.google.common.base.Stopwatch +com.github.tomakehurst.wiremock.extension.ServeEventListener$RequestPhase +com.github.tomakehurst.wiremock.extension.ServeEventListenerUtils +com.github.tomakehurst.wiremock.extension.ServeEventListenerUtils$$Lambda/0x00003fc001374b00 +com.github.tomakehurst.wiremock.extension.ServeEventListenerUtils$$Lambda/0x00003fc001374d58 +com.github.tomakehurst.wiremock.http.RequestIdDecorator +com.github.tomakehurst.wiremock.stubbing.SubEvent +com.github.tomakehurst.wiremock.stubbing.AbstractStubMappings$$Lambda/0x00003fc0013755c8 +com.github.tomakehurst.wiremock.common.Pair +com.github.tomakehurst.wiremock.store.StubMappingStore$$Lambda/0x00003fc001375a20 +com.github.tomakehurst.wiremock.store.StubMappingStore$$Lambda/0x00003fc001375c70 +com.github.tomakehurst.wiremock.store.StubMappingStore$$Lambda/0x00003fc001375eb0 +com.github.tomakehurst.wiremock.store.StubMappingStore$$Lambda/0x00003fc001376108 +com.github.tomakehurst.wiremock.stubbing.AbstractStubMappings$$Lambda/0x00003fc001376350 +com.github.tomakehurst.wiremock.http.RequestPathParamsDecorator +com.github.tomakehurst.wiremock.matching.EagerMatchResult +com.github.tomakehurst.wiremock.matching.WeightedAggregateMatchResult +com.github.tomakehurst.wiremock.matching.WeightedMatchResult +com.github.tomakehurst.wiremock.matching.MatchResult$$Lambda/0x00003fc0013772a0 +com.github.tomakehurst.wiremock.matching.WeightedAggregateMatchResult$$Lambda/0x00003fc0013774f8 +com.github.tomakehurst.wiremock.matching.MemoizingMatchResult$1 +com.github.tomakehurst.wiremock.matching.MemoizingMatchResult$2 +com.github.tomakehurst.wiremock.matching.WeightedAggregateMatchResult$$Lambda/0x00003fc001377be8 +com.github.tomakehurst.wiremock.matching.RequestPattern$$Lambda/0x00003fc001378000 +com.google.common.collect.ObjectArrays +com.github.tomakehurst.wiremock.matching.MultiValuePattern$$Lambda/0x00003fc001378460 +java.util.function.ToDoubleFunction +java.lang.invoke.LambdaForm$DMH/0x00003fc00137c000 +com.github.tomakehurst.wiremock.matching.MultiValuePattern$$Lambda/0x00003fc0013786b0 +java.util.Comparator$$Lambda/0x00003fc0012bb780 +com.github.tomakehurst.wiremock.matching.MatchResult$$Lambda/0x00003fc0013788d8 +com.google.common.base.NullnessCasts +com.github.tomakehurst.wiremock.stubbing.AbstractStubMappings$$Lambda/0x00003fc001378d30 +java.util.ImmutableCollections$SubList +jdk.internal.util.ByteArrayLittleEndian +com.google.common.collect.ImmutableSet$SetBuilderImpl +com.google.common.collect.ImmutableSet$RegularSetBuilderImpl +com.google.common.collect.RegularImmutableSet +com.google.common.collect.SingletonImmutableSet +com.google.common.collect.Iterators +com.google.common.collect.Iterators$ArrayItr +com.google.common.collect.Iterators$1 +com.google.common.collect.Iterators$4 +com.google.common.collect.Iterators$9 +com.google.common.collect.PeekingIterator +com.google.common.collect.Iterators$MergingIterator +com.google.common.collect.AbstractIterator +com.google.common.collect.Iterators$5 +com.google.common.collect.Iterators$SingletonIterator +com.github.tomakehurst.wiremock.http.Response +com.github.tomakehurst.wiremock.http.Response$Builder +java.lang.invoke.LambdaForm$DMH/0x00003fc00137c400 +com.github.tomakehurst.wiremock.http.Response$Builder$$Lambda/0x00003fc00137bd88 +com.github.tomakehurst.wiremock.common.StreamSources +com.github.tomakehurst.wiremock.common.StreamSources$ByteArrayInputStreamSource +com.github.tomakehurst.wiremock.http.LoggedResponse +com.google.common.collect.IndexedImmutableSet$1 +com.github.tomakehurst.wiremock.http.Response$$Lambda/0x00003fc00137ed20 +com.github.tomakehurst.wiremock.common.Exceptions +com.github.tomakehurst.wiremock.http.ContentTypeHeader +com.github.tomakehurst.wiremock.common.Json$PublicView +com.fasterxml.jackson.databind.ObjectWriter +com.fasterxml.jackson.core.util.MinimalPrettyPrinter +com.fasterxml.jackson.databind.ObjectWriter$GeneratorSettings +com.fasterxml.jackson.databind.ObjectWriter$Prefetch +com.fasterxml.jackson.databind.RuntimeJsonMappingException +com.fasterxml.jackson.core.exc.StreamWriteException +com.fasterxml.jackson.core.JsonGenerationException +com.fasterxml.jackson.core.json.JsonWriteContext +com.fasterxml.jackson.core.StreamWriteCapability +com.fasterxml.jackson.core.FormatFeature +com.fasterxml.jackson.core.json.JsonWriteFeature +com.fasterxml.jackson.databind.ser.impl.ReadOnlyClassToSerializerMap +com.fasterxml.jackson.databind.ser.impl.ReadOnlyClassToSerializerMap$Bucket +com.fasterxml.jackson.databind.util.TypeKey +com.fasterxml.jackson.databind.ser.impl.ReadOnlyClassToSerializerMap$$Lambda/0x00003fc001380c60 +com.fasterxml.jackson.databind.util.internal.PrivateMaxEntriesMap$EntrySet +com.fasterxml.jackson.databind.util.internal.PrivateMaxEntriesMap$EntryIterator +com.github.tomakehurst.wiremock.http.ChunkedDribbleDelay +com.github.tomakehurst.wiremock.http.Fault +com.github.tomakehurst.wiremock.common.Errors +com.fasterxml.jackson.annotation.JsonInclude +jdk.proxy2.$Proxy17 +jdk.proxy2.$Proxy18 +jdk.proxy2.$Proxy19 +com.fasterxml.jackson.databind.introspect.MethodGenericTypeResolver +sun.reflect.generics.scope.MethodScope +sun.reflect.generics.repository.ConstructorRepository +sun.reflect.generics.repository.MethodRepository +sun.reflect.generics.tree.MethodTypeSignature +com.fasterxml.jackson.databind.introspect.POJOPropertiesCollector$1 +sun.reflect.generics.scope.ConstructorScope +sun.reflect.generics.tree.IntSignature +sun.reflect.generics.tree.VoidDescriptor +com.fasterxml.jackson.databind.ser.BeanSerializerBuilder +com.fasterxml.jackson.annotation.JsonIgnoreType +com.fasterxml.jackson.databind.annotation.JsonSerialize$Typing +com.fasterxml.jackson.databind.annotation.JsonSerialize$Inclusion +com.fasterxml.jackson.databind.util.Converter +com.fasterxml.jackson.databind.util.Converter$None +com.fasterxml.jackson.databind.JsonSerializer$None +com.github.tomakehurst.wiremock.http.HttpHeadersJsonSerializer +jdk.proxy2.$Proxy20 +com.fasterxml.jackson.databind.JsonDeserializer$None +com.fasterxml.jackson.databind.KeyDeserializer$None +com.github.tomakehurst.wiremock.http.HttpHeadersJsonDeserializer +jdk.proxy2.$Proxy21 +com.fasterxml.jackson.databind.introspect.AnnotationCollector$TwoAnnotations +com.fasterxml.jackson.annotation.JsonTypeInfo$Id +com.fasterxml.jackson.annotation.JsonTypeInfo$As +jdk.proxy2.$Proxy22 +com.fasterxml.jackson.annotation.JsonSubTypes +com.fasterxml.jackson.annotation.JsonSubTypes$Type +sun.reflect.annotation.AnnotationParser$$Lambda/0x00003fc0012bd290 +com.github.tomakehurst.wiremock.http.LogNormal +jdk.proxy2.$Proxy23 +com.github.tomakehurst.wiremock.http.UniformDistribution +com.github.tomakehurst.wiremock.http.FixedDelayDistribution +jdk.proxy2.$Proxy24 +com.fasterxml.jackson.databind.ser.PropertyBuilder +com.fasterxml.jackson.databind.introspect.POJOPropertyBuilder$3 +com.fasterxml.jackson.annotation.JsonTypeId +com.fasterxml.jackson.databind.BeanProperty$Std +com.fasterxml.jackson.databind.ser.PropertyBuilder$1 +com.fasterxml.jackson.databind.ser.impl.UnwrappingBeanPropertyWriter +com.fasterxml.jackson.databind.ser.impl.PropertySerializerMap +com.fasterxml.jackson.databind.ser.impl.PropertySerializerMap$Empty +com.fasterxml.jackson.databind.ser.impl.PropertySerializerMap$Single +com.fasterxml.jackson.annotation.JsonTypeInfo$Value +com.fasterxml.jackson.databind.jsontype.impl.StdTypeResolverBuilder +com.fasterxml.jackson.databind.jsontype.TypeSerializer +com.fasterxml.jackson.databind.jsontype.impl.TypeSerializerBase +com.fasterxml.jackson.databind.jsontype.impl.AsDeductionTypeSerializer +com.fasterxml.jackson.databind.jsontype.impl.AsArrayTypeSerializer +com.fasterxml.jackson.databind.jsontype.impl.AsPropertyTypeSerializer +com.fasterxml.jackson.databind.jsontype.impl.AsWrapperTypeSerializer +com.fasterxml.jackson.databind.jsontype.impl.AsExternalTypeSerializer +com.fasterxml.jackson.databind.jsontype.impl.AsExistingPropertyTypeSerializer +com.fasterxml.jackson.databind.jsontype.TypeDeserializer +com.fasterxml.jackson.databind.jsontype.impl.TypeDeserializerBase +com.fasterxml.jackson.databind.jsontype.impl.AsArrayTypeDeserializer +com.fasterxml.jackson.databind.jsontype.impl.AsPropertyTypeDeserializer +com.fasterxml.jackson.databind.jsontype.impl.AsDeductionTypeDeserializer +com.fasterxml.jackson.databind.jsontype.impl.AsWrapperTypeDeserializer +com.fasterxml.jackson.databind.jsontype.impl.AsExternalTypeDeserializer +com.fasterxml.jackson.databind.jsontype.TypeIdResolver +com.fasterxml.jackson.databind.annotation.JsonTypeIdResolver +com.fasterxml.jackson.databind.jsontype.NamedType +com.fasterxml.jackson.annotation.JsonTypeName +com.fasterxml.jackson.databind.jsontype.impl.StdTypeResolverBuilder$1 +com.fasterxml.jackson.databind.jsontype.impl.TypeIdResolverBase +com.fasterxml.jackson.databind.jsontype.impl.TypeNameIdResolver +com.fasterxml.jackson.databind.annotation.JsonAppend +com.fasterxml.jackson.annotation.JsonFilter +com.fasterxml.jackson.databind.ser.impl.BeanAsArraySerializer +com.fasterxml.jackson.databind.ser.impl.UnwrappingBeanSerializer +com.fasterxml.jackson.databind.ser.std.NumberSerializers$1 +com.fasterxml.jackson.databind.ser.AnyGetterWriter +com.fasterxml.jackson.core.io.NumberOutput +com.fasterxml.jackson.databind.annotation.NoClass +com.fasterxml.jackson.databind.ser.impl.PropertySerializerMap$SerializerAndMapResult +com.fasterxml.jackson.databind.ser.impl.PropertySerializerMap$Double +java.lang.String$$StringConcat/0x00003fc001390000 +java.lang.invoke.LambdaForm$DMH/0x00003fc001390400 +java.lang.invoke.LambdaForm$MH/0x00003fc001390800 +java.lang.invoke.LambdaForm$MH/0x00003fc001390c00 +java.lang.String$$StringConcat/0x00003fc001391000 +java.lang.invoke.LambdaForm$MH/0x00003fc001391400 +com.github.tomakehurst.wiremock.servlet.WireMockHandlerDispatchingServlet$ServletHttpResponder$$Lambda/0x00003fc00138e7c8 +java.io.PipedOutputStream +org.eclipse.jetty.server.HttpOutput$2 +org.eclipse.jetty.server.handler.gzip.GzipHttpOutputInterceptor$1 +org.eclipse.jetty.util.Callback$Completing +org.eclipse.jetty.util.Callback$Nested +org.eclipse.jetty.server.HttpChannel$SendCallback +org.eclipse.jetty.util.IteratingCallback$1 +org.eclipse.jetty.util.IteratingCallback$Action +org.eclipse.jetty.http.HttpGenerator$1 +org.eclipse.jetty.http.HttpGenerator$Result +org.eclipse.jetty.server.HttpConnection$1 +sun.nio.ch.IOVecWrapper +sun.nio.ch.IOVecWrapper$1 +sun.nio.ch.NativeObject +sun.nio.ch.AllocatedNativeObject +sun.net.www.http.Hurryable +sun.net.www.http.ChunkedInputStream +org.eclipse.jetty.io.ArrayByteBufferPool$$Lambda/0x00003fc001394660 +sun.net.www.protocol.http.HttpURLConnection$HttpInputStream +java.io.BufferedReader$1 +com.github.tomakehurst.wiremock.common.RequestCache +com.github.tomakehurst.wiremock.common.RequestCache$1 +org.eclipse.jetty.server.HttpChannel$$Lambda/0x00003fc001394d00 +org.eclipse.jetty.server.HttpChannel$$Lambda/0x00003fc001394f30 +org.eclipse.jetty.util.Callback$3 +sun.net.www.http.KeepAliveCache$ClientVector +org.eclipse.jetty.util.Attributes$Wrapper +jdk.internal.event.ThreadSleepEvent +sun.net.www.http.KeepAliveEntry +org.eclipse.jetty.server.Authentication +org.eclipse.jetty.server.Authentication$1 +org.eclipse.jetty.server.Authentication$2 +org.eclipse.jetty.server.Authentication$ResponseSent +org.eclipse.jetty.server.Authentication$Challenge +org.eclipse.jetty.server.Authentication$3 +org.eclipse.jetty.server.Authentication$Failure +org.eclipse.jetty.server.Authentication$4 +org.eclipse.jetty.server.Authentication$SendSuccess +org.eclipse.jetty.server.Authentication$5 +org.assertj.core.api.ObjectAssert +org.assertj.core.api.ThrowableAssert$ThrowingCallable +software.amazon.lambda.powertools.metadata.internal.LambdaMetadataHttpClientTest$$Lambda/0x00003fc001397600 +org.assertj.core.internal.Throwables +org.assertj.core.internal.CommonValidations +org.eclipse.jetty.util.Pool$1 +java.util.AbstractMap$SimpleEntry +com.fasterxml.jackson.databind.util.internal.PrivateMaxEntriesMap$WriteThroughEntry +software.amazon.lambda.powertools.metadata.internal.LambdaMetadataHttpClientTest$$Lambda/0x00003fc001392268 +software.amazon.lambda.powertools.metadata.internal.LambdaMetadataHttpClientTest$$Lambda/0x00003fc001392498 +java.lang.String$$StringConcat/0x00003fc001391800 +java.lang.invoke.LambdaForm$MH/0x00003fc001391c00 +org.assertj.core.api.ThrowingConsumer +software.amazon.lambda.powertools.metadata.internal.LambdaMetadataHttpClientTest$$Lambda/0x00003fc001392ad0 +org.assertj.core.api.AbstractAssert$$Lambda/0x00003fc001392d30 +org.assertj.core.util.Preconditions +org.assertj.core.api.AbstractAssert$$Lambda/0x00003fc001393198 +org.assertj.core.api.AbstractAssert$$Lambda/0x00003fc0013933e8 +org.assertj.core.api.AbstractAssert$$Lambda/0x00003fc001393640 +org.assertj.core.internal.WholeNumbers +org.assertj.core.internal.Numbers +org.assertj.core.internal.Integers +software.amazon.lambda.powertools.metadata.internal.LambdaMetadataHttpClientTest$$Lambda/0x00003fc0013983b0 +software.amazon.lambda.powertools.metadata.internal.LambdaMetadataHttpClientTest$$Lambda/0x00003fc0013985e0 +com.github.tomakehurst.wiremock.jetty.JettyHttpServer$$Lambda/0x00003fc001398840 +org.eclipse.jetty.util.IO +org.eclipse.jetty.util.IO$NullOS +org.eclipse.jetty.util.IO$ClosedIS +org.eclipse.jetty.util.IO$NullWrite +org.eclipse.jetty.io.WriteFlusher$1 +org.eclipse.jetty.io.ManagedSelector$DestroyEndPoint +org.eclipse.jetty.util.component.Graceful$$Lambda/0x00003fc001399928 +org.eclipse.jetty.util.component.Graceful$$Lambda/0x00003fc001399b70 +java.util.concurrent.CompletableFuture$AltResult +java.util.concurrent.CompletableFuture$AsynchronousCompletionTask +java.util.concurrent.CompletableFuture$Completion +java.util.concurrent.ConcurrentHashMap$KeySpliterator +org.eclipse.jetty.http2.server.AbstractHTTP2ServerConnectionFactory$HTTP2SessionContainer$$Lambda/0x00003fc001399d98 +org.eclipse.jetty.http2.server.AbstractHTTP2ServerConnectionFactory$HTTP2SessionContainer$$Lambda/0x00003fc001399fe8 +org.eclipse.jetty.http2.server.AbstractHTTP2ServerConnectionFactory$HTTP2SessionContainer$$Lambda/0x00003fc00139a210 +java.nio.channels.AsynchronousCloseException +org.eclipse.jetty.util.component.Graceful$Shutdown$1 +java.util.concurrent.CompletableFuture$UniCompletion +java.util.concurrent.CompletableFuture$BiCompletion +java.util.concurrent.CompletableFuture$BiRelay +org.eclipse.jetty.io.ManagedSelector$CloseConnections +org.eclipse.jetty.io.ManagedSelector$StopSelector +org.eclipse.jetty.servlet.BaseHolder$Wrapped +org.eclipse.jetty.servlet.ServletHandler$$Lambda/0x00003fc00139b208 +org.eclipse.jetty.servlet.ServletHandler$$Lambda/0x00003fc00139b468 +java.util.EventObject +jakarta.servlet.ServletContextEvent +org.eclipse.jetty.util.thread.ReservedThreadExecutor$$Lambda/0x00003fc00139b8f0 +org.eclipse.jetty.util.thread.ReservedThreadExecutor$$Lambda/0x00003fc00139bb48 +org.eclipse.jetty.util.thread.ReservedThreadExecutor$$Lambda/0x00003fc00139bd90 +org.eclipse.jetty.util.thread.ReservedThreadExecutor$$Lambda/0x00003fc00139bfe8 +java.util.IdentityHashMap$IdentityHashMapIterator +java.util.IdentityHashMap$KeyIterator +org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor$$Lambda/0x00003fc00139c220 +org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor$$Lambda/0x00003fc00139c450 +org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor$$Lambda/0x00003fc00139c680 +org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor$$Lambda/0x00003fc00139c8a8 +org.junit.jupiter.engine.extension.TimeoutExtension$$Lambda/0x00003fc00139cad8 +org.junit.jupiter.engine.extension.TimeoutConfiguration$$Lambda/0x00003fc00139cd38 +org.junit.jupiter.engine.extension.TimeoutConfiguration$$Lambda/0x00003fc00139cf68 +org.mockito.ArgumentMatchers +org.mockito.Mockito +org.mockito.ArgumentMatcher +org.mockito.MockitoFramework +org.mockito.session.MockitoSessionBuilder +org.mockito.verification.VerificationMode +org.mockito.stubbing.Answer +org.mockito.verification.VerificationWithTimeout +org.mockito.verification.VerificationAfterDelay +org.mockito.internal.MockitoCore +org.mockito.MockingDetails +org.mockito.ScopedMock +org.mockito.MockedStatic +org.mockito.MockedConstruction +org.mockito.exceptions.base.MockitoException +org.mockito.exceptions.misusing.NotAMockException +org.mockito.internal.verification.api.VerificationData +org.mockito.stubbing.BaseStubber +org.mockito.stubbing.Stubber +org.mockito.InOrder +org.mockito.exceptions.misusing.DoNotMockException +org.mockito.internal.verification.api.VerificationDataInOrder +org.mockito.stubbing.LenientStubber +org.mockito.internal.configuration.plugins.Plugins +org.mockito.plugins.MockitoPlugins +org.mockito.internal.configuration.plugins.PluginRegistry +org.mockito.plugins.PluginSwitch +org.mockito.internal.configuration.plugins.PluginLoader +org.mockito.internal.configuration.plugins.DefaultPluginSwitch +org.mockito.internal.configuration.plugins.DefaultMockitoPlugins +org.mockito.plugins.MockMaker +org.mockito.plugins.StackTraceCleanerProvider +org.mockito.plugins.InstantiatorProvider2 +org.mockito.plugins.AnnotationEngine +org.mockito.plugins.MockitoLogger +org.mockito.plugins.MemberAccessor +org.mockito.plugins.DoNotMockEnforcerWithType +org.mockito.internal.configuration.plugins.PluginInitializer +org.mockito.internal.configuration.plugins.PluginFinder +org.mockito.internal.util.collections.Iterables +org.mockito.internal.creation.bytebuddy.ClassCreatingMockMaker +org.mockito.plugins.InlineMockMaker +org.mockito.creation.instance.Instantiator +org.mockito.internal.creation.bytebuddy.InlineByteBuddyMockMaker +org.mockito.internal.creation.bytebuddy.InlineDelegateByteBuddyMockMaker +org.mockito.creation.instance.InstantiationException +org.mockito.plugins.MockMaker$ConstructionMockControl +org.mockito.plugins.MockMaker$StaticMockControl +org.mockito.exceptions.misusing.MockitoConfigurationException +org.mockito.plugins.MockMaker$TypeMockability +org.mockito.exceptions.base.MockitoInitializationException +org.mockito.internal.creation.bytebuddy.BytecodeGenerator +org.mockito.internal.PremainAttachAccess +org.mockito.internal.PremainAttach +java.lang.instrument.Instrumentation +net.bytebuddy.agent.Installer +java.lang.invoke.WrongMethodTypeException +net.bytebuddy.ClassFileVersion +net.bytebuddy.ClassFileVersion$VersionLocator$Resolver +net.bytebuddy.ClassFileVersion$VersionLocator +net.bytebuddy.ClassFileVersion$VersionLocator$Resolved +org.mockito.internal.PremainAttachAccess$$Lambda/0x00003fc0013a5760 +net.bytebuddy.agent.ByteBuddyAgent +net.bytebuddy.agent.ByteBuddyAgent$ProcessProvider +net.bytebuddy.agent.ByteBuddyAgent$AgentProvider +net.bytebuddy.agent.ByteBuddyAgent$AttachmentTypeEvaluator$InstallationAction +net.bytebuddy.agent.ByteBuddyAgent$AttachmentTypeEvaluator +java.lang.invoke.LambdaForm$MH/0x00003fc0013a8000 +java.lang.invoke.LambdaForm$MH/0x00003fc0013a8400 +net.bytebuddy.agent.ByteBuddyAgent$AttachmentTypeEvaluator$ForJava9CapableVm +java.lang.ProcessHandle +java.lang.ProcessHandle$Info +net.bytebuddy.agent.ByteBuddyAgent$AttachmentProvider +net.bytebuddy.agent.ByteBuddyAgent$AttachmentProvider$Compound +net.bytebuddy.agent.ByteBuddyAgent$AttachmentProvider$Accessor +net.bytebuddy.agent.ByteBuddyAgent$AttachmentProvider$ForModularizedVm +net.bytebuddy.agent.ByteBuddyAgent$AttachmentProvider$ForJ9Vm +net.bytebuddy.agent.ByteBuddyAgent$AttachmentProvider$ForStandardToolsJarVm +net.bytebuddy.agent.ByteBuddyAgent$AttachmentProvider$ForUserDefinedToolsJar +net.bytebuddy.agent.ByteBuddyAgent$AttachmentProvider$ForEmulatedAttachment +net.bytebuddy.agent.ByteBuddyAgent$ProcessProvider$ForCurrentVm +net.bytebuddy.agent.ByteBuddyAgent$ProcessProvider$ForCurrentVm$ForJava9CapableVm +java.lang.invoke.LambdaForm$MH/0x00003fc0013a8800 +java.lang.invoke.LambdaForm$MH/0x00003fc0013a8c00 +java.lang.ProcessHandleImpl +java.lang.invoke.LambdaForm$DMH/0x00003fc0013a9000 +java.lang.invoke.LambdaForm$DMH/0x00003fc0013a9400 +java.lang.ProcessHandleImpl$$Lambda/0x00003fc0013c2810 +java.lang.invoke.LambdaForm$DMH/0x00003fc0013a9800 +net.bytebuddy.agent.ByteBuddyAgent$AgentProvider$ForByteBuddyAgent +net.bytebuddy.agent.ByteBuddyAgent$AttachmentProvider$Accessor$Simple +net.bytebuddy.agent.ByteBuddyAgent$AttachmentProvider$Accessor$Simple$WithExternalAttachment +com.sun.tools.attach.VirtualMachine +net.bytebuddy.agent.ByteBuddyAgent$AttachmentProvider$Accessor$ExternalAttachment +java.util.zip.ZipInputStream +java.util.jar.JarInputStream +java.io.PushbackInputStream +sun.security.util.ManifestEntryVerifier +net.bytebuddy.agent.Attacher +java.lang.ProcessBuilder +java.lang.ProcessImpl$1 +java.lang.ProcessImpl$ProcessPipeOutputStream +java.lang.Process$PipeOutputStream +java.lang.ProcessImpl$ProcessPipeInputStream +java.lang.Process$PipeInputStream +java.lang.ProcessHandleImpl$ExitCompletion +java.lang.ProcessHandleImpl$1 +java.lang.ProcessImpl$$Lambda/0x00003fc0013c4f60 +java.util.concurrent.CompletableFuture$UniHandle +jdk.internal.event.ProcessStartEvent +sun.instrument.InstrumentationImpl +sun.instrument.TransformerManager +sun.instrument.TransformerManager$TransformerInfo +java.lang.invoke.LambdaForm$MH/0x00003fc0013a9c00 +java.lang.invoke.LambdaForm$MH/0x00003fc0013aa000 +java.lang.invoke.LambdaForm$MH/0x00003fc0013aa400 +java.lang.invoke.LambdaForm$MH/0x00003fc0013aa800 +java.lang.ProcessBuilder$NullInputStream +java.io.FileOutputStream$1 +java.lang.ProcessBuilder$NullOutputStream +java.io.File$TempDirectory +java.io.DeleteOnExitHook +java.io.DeleteOnExitHook$1 +java.util.zip.DeflaterOutputStream +java.util.zip.ZipOutputStream +java.util.jar.JarOutputStream +java.util.zip.Deflater +java.util.zip.Deflater$DeflaterZStreamRef +java.time.zone.ZoneRulesProvider +java.time.zone.TzdbZoneRulesProvider +java.time.zone.Ser +java.time.Month +java.time.DayOfWeek +java.time.zone.ZoneOffsetTransitionRule$TimeDefinition +java.time.temporal.TemporalAdjusters +java.lang.invoke.LambdaForm$DMH/0x00003fc0013aac00 +java.time.temporal.TemporalAdjusters$$Lambda/0x00003fc0013c9658 +java.time.LocalDate$1 +java.util.zip.ZipOutputStream$XEntry +[1.149s][info][class,load] opened: /private/var/folders/zz/xy240ptn7ws8sdz8lpnjx0qm0000gq/T/mockitoboot2998279650633806747.jar +java.io.RandomAccessFile$1 +org.mockito.internal.creation.bytebuddy.inject.MockMethodDispatcher +org.mockito.internal.util.concurrent.WeakConcurrentMap +org.mockito.internal.util.concurrent.DetachedThreadLocal +org.mockito.internal.util.concurrent.DetachedThreadLocal$1 +org.mockito.internal.util.concurrent.WeakConcurrentMap$WithInlinedExpunction +org.mockito.internal.util.concurrent.DetachedThreadLocal$2 +org.mockito.internal.util.concurrent.DetachedThreadLocal$Cleaner +org.mockito.internal.creation.bytebuddy.InlineDelegateByteBuddyMockMaker$$Lambda/0x00003fc0013af5e0 +org.mockito.internal.creation.bytebuddy.InlineDelegateByteBuddyMockMaker$$Lambda/0x00003fc0013af808 +org.mockito.internal.creation.bytebuddy.StackWalkerChecker +java.lang.invoke.LambdaForm$DMH/0x00003fc0013ab000 +org.mockito.internal.creation.bytebuddy.InlineDelegateByteBuddyMockMaker$$Lambda/0x00003fc0013afca0 +org.mockito.internal.creation.bytebuddy.ConstructionCallback +org.mockito.internal.creation.bytebuddy.InlineDelegateByteBuddyMockMaker$$Lambda/0x00003fc0013aba08 +org.mockito.internal.creation.bytebuddy.TypeCachingBytecodeGenerator +net.bytebuddy.matcher.ElementMatcher +net.bytebuddy.TypeCache +net.bytebuddy.TypeCache$WithInlineExpunction +java.lang.instrument.ClassFileTransformer +org.mockito.internal.creation.bytebuddy.InlineBytecodeGenerator +java.lang.instrument.UnmodifiableClassException +net.bytebuddy.implementation.Implementation$Context$Factory +net.bytebuddy.dynamic.scaffold.MethodGraph$Compiler +net.bytebuddy.dynamic.scaffold.InstrumentedType$Prepareable +net.bytebuddy.implementation.Implementation +net.bytebuddy.asm.AsmVisitorWrapper +org.mockito.internal.creation.bytebuddy.MockMethodAdvice +net.bytebuddy.ByteBuddy +net.bytebuddy.dynamic.DynamicType$Builder +net.bytebuddy.dynamic.scaffold.subclass.ConstructorStrategy +net.bytebuddy.matcher.FilterableList +net.bytebuddy.description.type.TypeList$Generic +net.bytebuddy.description.NamedElement +net.bytebuddy.description.ModifierReviewable +net.bytebuddy.description.ModifierReviewable$OfByteCodeElement +net.bytebuddy.description.ModifierReviewable$OfAbstraction +net.bytebuddy.description.ModifierReviewable$OfEnumeration +net.bytebuddy.description.ModifierReviewable$ForTypeDefinition +net.bytebuddy.description.type.TypeDefinition +net.bytebuddy.description.NamedElement$WithRuntimeName +net.bytebuddy.description.NamedElement$WithDescriptor +net.bytebuddy.description.DeclaredByType +net.bytebuddy.description.annotation.AnnotationSource +net.bytebuddy.description.ByteCodeElement +net.bytebuddy.description.TypeVariableSource +net.bytebuddy.description.type.TypeDescription +net.bytebuddy.description.type.PackageDescription +net.bytebuddy.utility.AsmClassWriter$Factory +net.bytebuddy.NamingStrategy +net.bytebuddy.implementation.auxiliary.AuxiliaryType$NamingStrategy +net.bytebuddy.matcher.LatentMatcher +net.bytebuddy.utility.AsmClassReader$Factory +net.bytebuddy.dynamic.VisibilityBridgeStrategy +net.bytebuddy.dynamic.scaffold.InstrumentedType$Factory +net.bytebuddy.implementation.attribute.AnnotationValueFilter$Factory +net.bytebuddy.NamingStrategy$Suffixing$BaseNameResolver +net.bytebuddy.utility.privilege.GetSystemPropertyAction +net.bytebuddy.dynamic.scaffold.TypeValidation +net.bytebuddy.utility.GraalImageCode +net.bytebuddy.NamingStrategy$AbstractBase +net.bytebuddy.NamingStrategy$Suffixing +net.bytebuddy.NamingStrategy$SuffixingRandom +net.bytebuddy.NamingStrategy$Suffixing$BaseNameResolver$ForUnnamedType +net.bytebuddy.utility.RandomString +net.bytebuddy.implementation.auxiliary.AuxiliaryType$NamingStrategy$SuffixingRandom +net.bytebuddy.implementation.attribute.AnnotationValueFilter +net.bytebuddy.implementation.attribute.AnnotationValueFilter$Default +net.bytebuddy.implementation.attribute.AnnotationValueFilter$Default$1 +net.bytebuddy.implementation.attribute.AnnotationValueFilter$Default$2 +net.bytebuddy.implementation.attribute.AnnotationRetention +net.bytebuddy.implementation.Implementation$Context$Default$Factory +net.bytebuddy.implementation.MethodAccessorFactory +net.bytebuddy.implementation.Implementation$Context +net.bytebuddy.implementation.Implementation$Context$ExtractableView +net.bytebuddy.dynamic.scaffold.MethodGraph$Compiler$AbstractBase +net.bytebuddy.dynamic.scaffold.MethodGraph$Compiler$Default +net.bytebuddy.dynamic.scaffold.MethodGraph$Compiler$Default$Merger +net.bytebuddy.dynamic.scaffold.MethodGraph$Compiler$Default$Harmonizer +net.bytebuddy.description.type.TypeDescription$Generic$Visitor +net.bytebuddy.dynamic.scaffold.MethodGraph +net.bytebuddy.dynamic.scaffold.MethodGraph$Linked +net.bytebuddy.dynamic.scaffold.MethodGraph$Compiler$Default$Harmonizer$ForJavaMethod +net.bytebuddy.dynamic.scaffold.MethodGraph$Compiler$Default$Merger$Directional +net.bytebuddy.description.type.TypeDescription$Generic$Visitor$Reifying +net.bytebuddy.description.type.TypeDescription$Generic +net.bytebuddy.description.type.TypeDescription$Generic$Visitor$Reifying$1 +net.bytebuddy.description.type.TypeDescription$Generic$Visitor$Reifying$2 +net.bytebuddy.matcher.ElementMatchers +net.bytebuddy.matcher.ElementMatcher$Junction +net.bytebuddy.description.ModifierReviewable$ForMethodDescription +net.bytebuddy.description.DeclaredByType$WithMandatoryDeclaration +net.bytebuddy.description.NamedElement$WithGenericName +net.bytebuddy.description.ByteCodeElement$Member +net.bytebuddy.description.ByteCodeElement$TypeDependant +net.bytebuddy.description.method.MethodDescription +net.bytebuddy.description.method.MethodDescription$InDefinedShape +net.bytebuddy.description.ModifierReviewable$ForFieldDescription +net.bytebuddy.description.field.FieldDescription +net.bytebuddy.description.field.FieldDescription$InDefinedShape +net.bytebuddy.matcher.ElementMatcher$Junction$AbstractBase +net.bytebuddy.matcher.BooleanMatcher +net.bytebuddy.dynamic.scaffold.InstrumentedType$Factory$Default +net.bytebuddy.implementation.LoadedTypeInitializer +net.bytebuddy.implementation.bytecode.ByteCodeAppender +net.bytebuddy.dynamic.scaffold.TypeInitializer +net.bytebuddy.dynamic.scaffold.InstrumentedType +net.bytebuddy.dynamic.scaffold.InstrumentedType$WithFlexibleName +net.bytebuddy.dynamic.scaffold.InstrumentedType$Factory$Default$1 +net.bytebuddy.dynamic.scaffold.InstrumentedType$Factory$Default$2 +net.bytebuddy.dynamic.VisibilityBridgeStrategy$Default +net.bytebuddy.dynamic.VisibilityBridgeStrategy$Default$1 +net.bytebuddy.dynamic.VisibilityBridgeStrategy$Default$2 +net.bytebuddy.dynamic.VisibilityBridgeStrategy$Default$3 +net.bytebuddy.utility.AsmClassReader$Factory$Default +net.bytebuddy.utility.AsmClassReader$Factory$Default$1 +net.bytebuddy.utility.AsmClassReader$Factory$Default$2 +net.bytebuddy.utility.AsmClassReader$Factory$Default$3 +net.bytebuddy.utility.AsmClassReader$Factory$Default$4 +net.bytebuddy.utility.AsmClassReader$Factory$Default$5 +net.bytebuddy.utility.AsmClassReader +net.bytebuddy.utility.AsmClassWriter$Factory$Default +net.bytebuddy.utility.AsmClassWriter$Factory$Default$1 +net.bytebuddy.utility.AsmClassWriter$Factory$Default$2 +net.bytebuddy.utility.AsmClassWriter$Factory$Default$3 +net.bytebuddy.utility.AsmClassWriter$Factory$Default$4 +net.bytebuddy.utility.AsmClassWriter$Factory$Default$5 +net.bytebuddy.pool.TypePool +net.bytebuddy.jar.asm.ClassVisitor +net.bytebuddy.jar.asm.ClassWriter +net.bytebuddy.utility.AsmClassWriter$FrameComputingClassWriter +net.bytebuddy.utility.AsmClassWriter +net.bytebuddy.jar.asmjdkbridge.JdkClassReader +net.bytebuddy.jar.asm.Attribute +net.bytebuddy.jar.asmjdkbridge.AsmWrappedAttribute +net.bytebuddy.jar.asmjdkbridge.AsmWrappedAttribute$AsmSourceIdAttribute +net.bytebuddy.jar.asmjdkbridge.AsmWrappedAttribute$AsmCompilationIdAttribute +net.bytebuddy.jar.asmjdkbridge.AsmWrappedAttribute$AsmModuleResolutionAttribute +net.bytebuddy.jar.asmjdkbridge.AsmWrappedAttribute$AsmModuleHashesAttribute +java.lang.MatchException +net.bytebuddy.matcher.LatentMatcher$Resolved +net.bytebuddy.matcher.ModifierMatcher$Mode +net.bytebuddy.matcher.ElementMatcher$Junction$ForNonNullValues +net.bytebuddy.matcher.ModifierMatcher +net.bytebuddy.matcher.NameMatcher +net.bytebuddy.matcher.StringMatcher +net.bytebuddy.matcher.StringMatcher$Mode +net.bytebuddy.matcher.StringMatcher$Mode$1 +net.bytebuddy.matcher.StringMatcher$Mode$2 +net.bytebuddy.matcher.StringMatcher$Mode$3 +net.bytebuddy.matcher.StringMatcher$Mode$4 +net.bytebuddy.matcher.StringMatcher$Mode$5 +net.bytebuddy.matcher.StringMatcher$Mode$6 +net.bytebuddy.matcher.StringMatcher$Mode$7 +net.bytebuddy.matcher.StringMatcher$Mode$8 +net.bytebuddy.matcher.StringMatcher$Mode$9 +net.bytebuddy.matcher.MethodParametersMatcher +net.bytebuddy.matcher.CollectionSizeMatcher +net.bytebuddy.matcher.ElementMatcher$Junction$Conjunction +net.bytebuddy.description.ModifierReviewable$ForParameterDescription +net.bytebuddy.description.ModifierReviewable$AbstractBase +net.bytebuddy.description.TypeVariableSource$AbstractBase +net.bytebuddy.description.type.TypeDescription$AbstractBase +net.bytebuddy.description.type.TypeDescription$ForLoadedType +net.bytebuddy.description.annotation.AnnotationList +java.lang.ClassFormatError +java.lang.reflect.GenericSignatureFormatError +net.bytebuddy.description.type.TypeList +net.bytebuddy.matcher.FilterableList$Empty +net.bytebuddy.description.type.TypeList$Empty +net.bytebuddy.matcher.FilterableList$AbstractBase +net.bytebuddy.description.type.TypeList$AbstractBase +net.bytebuddy.description.type.TypeList$ForLoadedTypes +net.bytebuddy.description.field.FieldList +net.bytebuddy.description.type.RecordComponentList +net.bytebuddy.description.type.RecordComponentList$Empty +net.bytebuddy.description.type.RecordComponentList$AbstractBase +net.bytebuddy.description.type.RecordComponentList$ForLoadedRecordComponents +net.bytebuddy.description.method.MethodList +net.bytebuddy.description.type.TypeDescription$ForLoadedType$Dispatcher +net.bytebuddy.utility.dispatcher.JavaDispatcher +net.bytebuddy.utility.dispatcher.JavaDispatcher$Dispatcher +net.bytebuddy.utility.dispatcher.JavaDispatcher$DynamicClassLoader$Resolver$CreationAction +net.bytebuddy.utility.dispatcher.JavaDispatcher$DynamicClassLoader$Resolver +net.bytebuddy.utility.dispatcher.JavaDispatcher$DynamicClassLoader$Resolver$ForModuleSystem +net.bytebuddy.utility.dispatcher.JavaDispatcher$InvokerCreationAction +net.bytebuddy.utility.dispatcher.JavaDispatcher$DynamicClassLoader +net.bytebuddy.utility.Invoker +net.bytebuddy.jar.asm.AnnotationVisitor +net.bytebuddy.jar.asm.AnnotationWriter +net.bytebuddy.jar.asm.ModuleVisitor +net.bytebuddy.jar.asm.ModuleWriter +net.bytebuddy.jar.asm.RecordComponentVisitor +net.bytebuddy.jar.asm.RecordComponentWriter +net.bytebuddy.jar.asm.FieldVisitor +net.bytebuddy.jar.asm.FieldWriter +net.bytebuddy.jar.asm.MethodVisitor +net.bytebuddy.jar.asm.MethodWriter +java.lang.TypeNotPresentException +net.bytebuddy.jar.asm.ClassTooLargeException +net.bytebuddy.jar.asm.SymbolTable +net.bytebuddy.jar.asm.Symbol +net.bytebuddy.jar.asm.SymbolTable$Entry +net.bytebuddy.jar.asm.ByteVector +net.bytebuddy.jar.asm.Type +net.bytebuddy.utility.MethodComparator +net.bytebuddy.jar.asm.MethodTooLargeException +net.bytebuddy.jar.asm.Frame +net.bytebuddy.jar.asm.CurrentFrame +net.bytebuddy.jar.asm.Handler +java.lang.invoke.LambdaForm$MH/0x00003fc001414000 +java.lang.invoke.LambdaForm$MH/0x00003fc001414400 +java.lang.invoke.BoundMethodHandle$Species_LLLL +java.lang.invoke.LambdaForm$MH/0x00003fc001414800 +net.bytebuddy.utility.Invoker$Dispatcher +net.bytebuddy.utility.dispatcher.JavaDispatcher$Proxied +net.bytebuddy.utility.dispatcher.JavaDispatcher$Defaults +jdk.proxy2.$Proxy25 +jdk.proxy2.$Proxy26 +net.bytebuddy.utility.dispatcher.JavaDispatcher$Instance +net.bytebuddy.utility.dispatcher.JavaDispatcher$Container +net.bytebuddy.utility.dispatcher.JavaDispatcher$IsStatic +net.bytebuddy.utility.dispatcher.JavaDispatcher$IsConstructor +net.bytebuddy.utility.dispatcher.JavaDispatcher$Dispatcher$ForNonStaticMethod +net.bytebuddy.utility.nullability.MaybeNull +jdk.proxy2.$Proxy27 +net.bytebuddy.utility.dispatcher.JavaDispatcher$ProxiedInvocationHandler +net.bytebuddy.description.type.$Proxy28 +net.bytebuddy.dynamic.TargetType +net.bytebuddy.matcher.EqualityMatcher +net.bytebuddy.matcher.ErasureMatcher +net.bytebuddy.matcher.MethodReturnTypeMatcher +net.bytebuddy.matcher.DeclaringTypeMatcher +net.bytebuddy.matcher.ElementMatcher$Junction$Disjunction +net.bytebuddy.implementation.Implementation$Context$Disabled$Factory +net.bytebuddy.dynamic.scaffold.MethodGraph$Compiler$ForDeclaredMethods +net.bytebuddy.matcher.MethodSortMatcher$Sort +net.bytebuddy.matcher.MethodSortMatcher$Sort$1 +net.bytebuddy.matcher.MethodSortMatcher$Sort$2 +net.bytebuddy.matcher.MethodSortMatcher$Sort$3 +net.bytebuddy.matcher.MethodSortMatcher$Sort$4 +net.bytebuddy.matcher.MethodSortMatcher$Sort$5 +net.bytebuddy.matcher.MethodSortMatcher +net.bytebuddy.matcher.NegatingMatcher +org.mockito.internal.util.concurrent.WeakConcurrentSet +org.mockito.internal.util.concurrent.WeakConcurrentSet$Cleaner +org.mockito.internal.creation.bytebuddy.SubclassBytecodeGenerator +net.bytebuddy.implementation.attribute.MethodAttributeAppender$Factory +net.bytebuddy.dynamic.loading.ClassLoadingStrategy +org.mockito.internal.creation.bytebuddy.ModuleHandler +org.mockito.internal.creation.bytebuddy.ModuleHandler$ModuleSystemFound +org.mockito.internal.creation.bytebuddy.ModuleHandler$1 +org.mockito.internal.creation.bytebuddy.ModuleHandler$NoModuleSystemFound +org.mockito.internal.creation.bytebuddy.ModuleHandler$2 +org.mockito.internal.creation.bytebuddy.ModuleHandler$3 +java.lang.instrument.ClassDefinition +org.mockito.internal.creation.bytebuddy.ModuleHandler$MockitoMockClassLoader +com.sun.proxy.jdk.proxy1.$Proxy29 +jdk.internal.vm.annotation.ForceInline +com.sun.proxy.jdk.proxy1.$Proxy30 +net.bytebuddy.implementation.Implementation$Composable +net.bytebuddy.implementation.MethodDelegation +net.bytebuddy.implementation.bind.MethodDelegationBinder$Record +net.bytebuddy.implementation.bind.MethodDelegationBinder$AmbiguityResolver +net.bytebuddy.implementation.bind.MethodDelegationBinder$TerminationHandler +net.bytebuddy.implementation.MethodDelegation$WithCustomProperties +net.bytebuddy.dynamic.scaffold.FieldLocator$Factory +net.bytebuddy.implementation.MethodDelegation$ImplementationDelegate +net.bytebuddy.implementation.bind.MethodDelegationBinder$BindingResolver +net.bytebuddy.implementation.bind.MethodDelegationBinder$AmbiguityResolver$Compound +net.bytebuddy.implementation.bind.annotation.BindingPriority$Resolver +net.bytebuddy.implementation.bind.annotation.BindingPriority +net.bytebuddy.description.method.MethodList$AbstractBase +net.bytebuddy.description.method.MethodList$ForLoadedMethods +net.bytebuddy.description.method.MethodDescription$AbstractBase +net.bytebuddy.description.method.MethodDescription$InDefinedShape$AbstractBase +net.bytebuddy.description.method.MethodDescription$InDefinedShape$AbstractBase$ForLoadedExecutable +net.bytebuddy.description.method.ParameterDescription$ForLoadedParameter$ParameterAnnotationSource +net.bytebuddy.description.method.MethodDescription$ForLoadedConstructor +net.bytebuddy.description.method.MethodDescription$ForLoadedMethod +net.bytebuddy.utility.ConstructorComparator +net.bytebuddy.description.ByteCodeElement$Token +net.bytebuddy.description.method.MethodDescription$InDefinedShape$AbstractBase$Executable +net.bytebuddy.description.method.$Proxy31 +net.bytebuddy.implementation.bind.DeclaringTypeResolver +net.bytebuddy.implementation.bind.ArgumentTypeResolver +net.bytebuddy.implementation.bind.MethodNameEqualityResolver +net.bytebuddy.implementation.bind.ParameterLengthResolver +net.bytebuddy.implementation.bind.MethodDelegationBinder$AmbiguityResolver$NoOp +net.bytebuddy.implementation.bind.annotation.TargetMethodAnnotationDrivenBinder$ParameterBinder +net.bytebuddy.implementation.bind.annotation.Argument$Binder +net.bytebuddy.implementation.bytecode.StackManipulation +net.bytebuddy.implementation.bind.MethodDelegationBinder$ParameterBinding +net.bytebuddy.implementation.bind.annotation.Argument +net.bytebuddy.implementation.bind.annotation.Argument$BindingMechanic +net.bytebuddy.description.method.MethodList$Explicit +net.bytebuddy.implementation.bind.annotation.AllArguments$Binder +net.bytebuddy.implementation.bind.annotation.AllArguments +net.bytebuddy.implementation.bind.annotation.AllArguments$Assignment +net.bytebuddy.implementation.bind.annotation.Origin$Binder +net.bytebuddy.implementation.bind.annotation.Origin +net.bytebuddy.implementation.bind.annotation.This$Binder +net.bytebuddy.implementation.bind.annotation.This +net.bytebuddy.implementation.bind.annotation.Super$Binder +net.bytebuddy.implementation.bind.annotation.Super +net.bytebuddy.implementation.bind.annotation.Super$Instantiation +net.bytebuddy.implementation.bind.annotation.Default$Binder +net.bytebuddy.implementation.bind.annotation.Default +net.bytebuddy.implementation.bind.annotation.SuperCall$Binder +net.bytebuddy.implementation.bind.annotation.SuperCall +net.bytebuddy.implementation.bind.annotation.SuperCallHandle$Binder +net.bytebuddy.implementation.bind.annotation.SuperCallHandle +net.bytebuddy.implementation.bind.annotation.DefaultCall$Binder +net.bytebuddy.implementation.bind.annotation.DefaultCall$Binder$DefaultMethodLocator +net.bytebuddy.implementation.bind.annotation.DefaultCall +net.bytebuddy.implementation.bind.annotation.DefaultCallHandle$Binder +net.bytebuddy.implementation.bind.annotation.DefaultCallHandle$Binder$DefaultMethodLocator +net.bytebuddy.implementation.bind.annotation.DefaultCallHandle +net.bytebuddy.implementation.bind.annotation.SuperMethod$Binder +net.bytebuddy.implementation.bind.annotation.SuperMethod +net.bytebuddy.implementation.bind.annotation.SuperMethodHandle$Binder +net.bytebuddy.implementation.bind.annotation.SuperMethodHandle +net.bytebuddy.implementation.bind.annotation.Handle$Binder +net.bytebuddy.utility.ConstantValue +net.bytebuddy.utility.JavaConstant +net.bytebuddy.implementation.bind.annotation.Handle +net.bytebuddy.utility.JavaConstant$MethodHandle$HandleType +net.bytebuddy.implementation.bind.annotation.DynamicConstant$Binder +net.bytebuddy.implementation.bind.annotation.DynamicConstant +net.bytebuddy.implementation.bind.annotation.DefaultMethod$Binder +net.bytebuddy.implementation.bind.annotation.DefaultMethod$Binder$MethodLocator +net.bytebuddy.implementation.bind.annotation.DefaultMethod +net.bytebuddy.implementation.bind.annotation.DefaultMethodHandle$Binder +net.bytebuddy.implementation.bind.annotation.DefaultMethodHandle$Binder$MethodLocator +net.bytebuddy.implementation.bind.annotation.DefaultMethodHandle +net.bytebuddy.implementation.bind.annotation.FieldValue$Binder +net.bytebuddy.implementation.bind.annotation.TargetMethodAnnotationDrivenBinder$ParameterBinder$ForFieldBinding +net.bytebuddy.implementation.bind.annotation.FieldValue$Binder$Delegate +net.bytebuddy.dynamic.scaffold.FieldLocator +net.bytebuddy.dynamic.scaffold.FieldLocator$AbstractBase +net.bytebuddy.dynamic.scaffold.FieldLocator$ForClassHierarchy +net.bytebuddy.dynamic.scaffold.FieldLocator$ForExactType +net.bytebuddy.implementation.bind.annotation.FieldValue +net.bytebuddy.implementation.bind.annotation.FieldGetterHandle$Binder +net.bytebuddy.implementation.bind.annotation.FieldGetterHandle$Binder$Delegate +net.bytebuddy.implementation.bind.annotation.FieldGetterHandle +net.bytebuddy.implementation.bind.annotation.FieldSetterHandle$Binder +net.bytebuddy.implementation.bind.annotation.FieldSetterHandle$Binder$Delegate +net.bytebuddy.implementation.bind.annotation.FieldSetterHandle +net.bytebuddy.implementation.bind.annotation.StubValue$Binder +net.bytebuddy.implementation.bind.annotation.Empty$Binder +net.bytebuddy.implementation.bind.MethodDelegationBinder$BindingResolver$Default +org.mockito.internal.creation.bytebuddy.MockMethodAdvice$Identifier +net.bytebuddy.implementation.bind.annotation.TargetMethodAnnotationDrivenBinder$ParameterBinder$ForFixedValue +net.bytebuddy.implementation.bind.annotation.TargetMethodAnnotationDrivenBinder$ParameterBinder$ForFixedValue$OfConstant +net.bytebuddy.utility.CompoundList +org.mockito.internal.creation.bytebuddy.MockMethodAdvice$ForReadObject +org.mockito.internal.creation.bytebuddy.access.MockAccess +net.bytebuddy.implementation.bind.MethodDelegationBinder +net.bytebuddy.implementation.bind.annotation.TargetMethodAnnotationDrivenBinder +net.bytebuddy.implementation.bind.annotation.TargetMethodAnnotationDrivenBinder$DelegationProcessor +net.bytebuddy.implementation.bind.annotation.TargetMethodAnnotationDrivenBinder$DelegationProcessor$Handler +net.bytebuddy.implementation.bind.annotation.StubValue +net.bytebuddy.implementation.bind.annotation.Empty +net.bytebuddy.implementation.MethodDelegation$ImplementationDelegate$ForStaticMethod +net.bytebuddy.implementation.MethodDelegation$ImplementationDelegate$Compiled +net.bytebuddy.implementation.bind.annotation.IgnoreForBinding$Verifier +net.bytebuddy.description.annotation.AnnotationList$AbstractBase +net.bytebuddy.description.annotation.AnnotationList$ForLoadedAnnotations +net.bytebuddy.description.annotation.AnnotationDescription +net.bytebuddy.implementation.bind.annotation.IgnoreForBinding +net.bytebuddy.description.method.ParameterList +net.bytebuddy.description.method.ParameterList$AbstractBase +net.bytebuddy.description.method.ParameterList$ForLoadedExecutable +net.bytebuddy.description.method.ParameterList$ForLoadedExecutable$OfMethod +net.bytebuddy.description.method.ParameterList$ForLoadedExecutable$OfLegacyVmMethod +net.bytebuddy.description.method.ParameterList$ForLoadedExecutable$OfConstructor +net.bytebuddy.description.method.ParameterList$ForLoadedExecutable$OfLegacyVmConstructor +net.bytebuddy.description.method.ParameterList$ForLoadedExecutable$Executable +jdk.proxy2.$Proxy32 +net.bytebuddy.utility.dispatcher.JavaDispatcher$Dispatcher$ForInstanceCheck +net.bytebuddy.description.method.$Proxy33 +net.bytebuddy.description.NamedElement$WithOptionalName +net.bytebuddy.description.method.ParameterDescription +net.bytebuddy.description.method.ParameterDescription$InDefinedShape +net.bytebuddy.description.method.ParameterDescription$AbstractBase +net.bytebuddy.description.method.ParameterDescription$InDefinedShape$AbstractBase +net.bytebuddy.description.method.ParameterDescription$ForLoadedParameter +net.bytebuddy.description.method.ParameterDescription$ForLoadedParameter$OfMethod +net.bytebuddy.description.method.ParameterDescription$ForLoadedParameter$Parameter +net.bytebuddy.description.method.$Proxy34 +net.bytebuddy.implementation.bind.annotation.RuntimeType$Verifier +org.mockito.internal.creation.bytebuddy.$Proxy35 +jdk.proxy2.$Proxy36 +net.bytebuddy.implementation.bind.annotation.Argument$BindingMechanic$1 +net.bytebuddy.implementation.bind.annotation.Argument$BindingMechanic$2 +jdk.proxy2.$Proxy37 +net.bytebuddy.implementation.bind.annotation.RuntimeType +net.bytebuddy.description.annotation.AnnotationDescription$Loadable +net.bytebuddy.description.annotation.AnnotationDescription$AbstractBase +net.bytebuddy.description.annotation.AnnotationDescription$ForLoadedAnnotation +net.bytebuddy.description.enumeration.EnumerationDescription +net.bytebuddy.description.annotation.AnnotationValue +net.bytebuddy.description.type.TypeDefinition$Sort +net.bytebuddy.description.type.TypeDescription$Generic$AnnotationReader +net.bytebuddy.description.type.TypeDefinition$Sort$AnnotatedType +net.bytebuddy.description.type.$Proxy38 +net.bytebuddy.description.type.TypeDescription$Generic$AnnotationReader$NoOp +net.bytebuddy.description.type.TypeDescription$Generic$AbstractBase +net.bytebuddy.description.type.TypeDescription$Generic$OfNonGenericType +net.bytebuddy.description.type.TypeDescription$Generic$OfNonGenericType$ForLoadedType +net.bytebuddy.implementation.bytecode.assign.Assigner$Typing +net.bytebuddy.implementation.bind.annotation.TargetMethodAnnotationDrivenBinder$DelegationProcessor$Handler$Unbound +net.bytebuddy.implementation.bind.annotation.TargetMethodAnnotationDrivenBinder$DelegationProcessor$Handler$Bound +net.bytebuddy.implementation.bind.annotation.TargetMethodAnnotationDrivenBinder$Record +net.bytebuddy.implementation.bind.MethodDelegationBinder$MethodBinding +net.bytebuddy.implementation.bind.MethodDelegationBinder$TerminationHandler$Default +net.bytebuddy.implementation.bind.MethodDelegationBinder$TerminationHandler$Default$1 +net.bytebuddy.implementation.bind.MethodDelegationBinder$TerminationHandler$Default$2 +net.bytebuddy.implementation.bytecode.assign.Assigner +net.bytebuddy.implementation.bytecode.assign.primitive.VoidAwareAssigner +net.bytebuddy.implementation.bytecode.assign.primitive.PrimitiveTypeAwareAssigner +net.bytebuddy.implementation.bytecode.assign.reference.ReferenceTypeAwareAssigner +net.bytebuddy.implementation.bytecode.StackManipulation$Trivial +net.bytebuddy.implementation.bytecode.StackManipulation$Illegal +net.bytebuddy.implementation.bytecode.assign.reference.GenericTypeAwareAssigner +org.mockito.internal.creation.bytebuddy.access.MockMethodInterceptor$DispatcherDefaultingToRealMethod +org.mockito.internal.invocation.RealMethod +org.mockito.internal.creation.bytebuddy.access.MockMethodInterceptor +jdk.proxy2.$Proxy39 +jdk.proxy2.$Proxy40 +jdk.proxy2.$Proxy41 +jdk.proxy2.$Proxy42 +jdk.proxy2.$Proxy43 +jdk.proxy2.$Proxy44 +jdk.proxy2.$Proxy45 +org.mockito.internal.creation.bytebuddy.access.MockMethodInterceptor$ForHashCode +org.mockito.internal.creation.bytebuddy.access.MockMethodInterceptor$ForEquals +org.mockito.internal.creation.bytebuddy.access.MockMethodInterceptor$ForWriteReplace +net.bytebuddy.TypeCache$Sort +net.bytebuddy.TypeCache$Sort$1 +net.bytebuddy.TypeCache$Sort$2 +net.bytebuddy.TypeCache$Sort$3 +org.mockito.internal.creation.bytebuddy.TypeCachingBytecodeGenerator$TypeCachingLock +net.bytebuddy.asm.AsmVisitorWrapper$ForDeclaredMethods +net.bytebuddy.asm.AsmVisitorWrapper$ForDeclaredMethods$DispatchingVisitor +net.bytebuddy.matcher.CollectionOneToOneMatcher +net.bytebuddy.matcher.CollectionErasureMatcher +net.bytebuddy.matcher.MethodParameterTypesMatcher +net.bytebuddy.matcher.AnnotationTypeMatcher +net.bytebuddy.matcher.DeclaringAnnotationMatcher +net.bytebuddy.matcher.CollectionItemMatcher +net.bytebuddy.asm.AsmVisitorWrapper$ForDeclaredMethods$MethodVisitorWrapper +net.bytebuddy.asm.Advice +net.bytebuddy.utility.visitor.ExceptionTableSensitiveMethodVisitor +net.bytebuddy.utility.visitor.LineNumberPrependingMethodVisitor +net.bytebuddy.asm.Advice$Dispatcher$RelocationHandler$Relocation +net.bytebuddy.asm.Advice$AdviceVisitor +net.bytebuddy.asm.Advice$AdviceVisitor$WithoutExitAdvice +net.bytebuddy.asm.Advice$AdviceVisitor$WithExitAdvice +net.bytebuddy.asm.Advice$AdviceVisitor$WithExitAdvice$WithoutExceptionHandling +net.bytebuddy.asm.Advice$AdviceVisitor$WithExitAdvice$WithExceptionHandling +net.bytebuddy.asm.Advice$ExceptionHandler +net.bytebuddy.asm.Advice$Dispatcher +net.bytebuddy.asm.Advice$Dispatcher$Unresolved +net.bytebuddy.asm.Advice$Delegator$Factory +net.bytebuddy.asm.Advice$PostProcessor$Factory +net.bytebuddy.dynamic.ClassFileLocator +net.bytebuddy.asm.Advice$OnMethodEnter +net.bytebuddy.asm.Advice$OnMethodExit +net.bytebuddy.asm.Advice$WithCustomMapping +net.bytebuddy.asm.Advice$OffsetMapping$Factory +net.bytebuddy.asm.Advice$BootstrapArgumentResolver$Factory +net.bytebuddy.asm.Advice$PostProcessor +net.bytebuddy.asm.Advice$PostProcessor$NoOp +net.bytebuddy.asm.Advice$Delegator$ForRegularInvocation$Factory +net.bytebuddy.asm.Advice$Delegator +net.bytebuddy.asm.Advice$OffsetMapping$ForStackManipulation$Factory +net.bytebuddy.asm.Advice$OffsetMapping +net.bytebuddy.utility.ConstantValue$Simple +net.bytebuddy.utility.JavaConstant$Simple +net.bytebuddy.utility.JavaConstant$Simple$Dispatcher +jdk.proxy2.$Proxy46 +net.bytebuddy.utility.dispatcher.JavaDispatcher$Dispatcher$ForContainerCreation +net.bytebuddy.utility.$Proxy47 +net.bytebuddy.utility.JavaConstant$Simple$Dispatcher$OfClassDesc +jdk.proxy2.$Proxy48 +net.bytebuddy.utility.dispatcher.JavaDispatcher$Dispatcher$ForStaticMethod +jdk.proxy2.$Proxy49 +net.bytebuddy.utility.JavaConstant$Simple$Dispatcher$OfMethodTypeDesc +jdk.proxy2.$Proxy50 +net.bytebuddy.utility.JavaConstant$Simple$Dispatcher$OfMethodHandleDesc +jdk.proxy2.$Proxy51 +net.bytebuddy.utility.JavaConstant$Simple$Dispatcher$OfDirectMethodHandleDesc +jdk.proxy2.$Proxy52 +net.bytebuddy.utility.JavaConstant$Simple$Dispatcher$OfDirectMethodHandleDesc$ForKind +jdk.proxy2.$Proxy53 +net.bytebuddy.utility.JavaConstant$Simple$Dispatcher$OfDynamicConstantDesc +jdk.proxy2.$Proxy54 +net.bytebuddy.utility.JavaConstant$Simple$OfTrivialValue +net.bytebuddy.utility.JavaConstant$Simple$OfTrivialValue$ForString +net.bytebuddy.implementation.bytecode.StackManipulation$AbstractBase +net.bytebuddy.implementation.bytecode.constant.TextConstant +net.bytebuddy.dynamic.ClassFileLocator$ForClassLoader +net.bytebuddy.dynamic.ClassFileLocator$Resolution +net.bytebuddy.dynamic.ClassFileLocator$ForClassLoader$BootLoaderProxyCreationAction +net.bytebuddy.asm.Advice$Dispatcher$Resolved +net.bytebuddy.asm.Advice$Dispatcher$Resolved$ForMethodEnter +net.bytebuddy.asm.Advice$Dispatcher$Resolved$ForMethodExit +net.bytebuddy.asm.Advice$Dispatcher$Bound +net.bytebuddy.asm.Advice$Dispatcher$Inactive +net.bytebuddy.asm.Advice$NoExceptionHandler +jdk.proxy2.$Proxy55 +net.bytebuddy.description.annotation.AnnotationValue$AbstractBase +net.bytebuddy.description.annotation.AnnotationValue$ForConstant +net.bytebuddy.description.annotation.AnnotationValue$Loaded +net.bytebuddy.description.annotation.AnnotationValue$ForConstant$PropertyDelegate +net.bytebuddy.description.annotation.AnnotationValue$ForConstant$PropertyDelegate$ForNonArrayType +net.bytebuddy.description.annotation.AnnotationValue$ForConstant$PropertyDelegate$ForNonArrayType$1 +net.bytebuddy.description.annotation.AnnotationValue$ForConstant$PropertyDelegate$ForNonArrayType$2 +net.bytebuddy.description.annotation.AnnotationValue$ForConstant$PropertyDelegate$ForNonArrayType$3 +net.bytebuddy.description.annotation.AnnotationValue$ForConstant$PropertyDelegate$ForNonArrayType$4 +net.bytebuddy.description.annotation.AnnotationValue$ForConstant$PropertyDelegate$ForNonArrayType$5 +net.bytebuddy.description.annotation.AnnotationValue$ForConstant$PropertyDelegate$ForNonArrayType$6 +net.bytebuddy.description.annotation.AnnotationValue$ForConstant$PropertyDelegate$ForNonArrayType$7 +net.bytebuddy.description.annotation.AnnotationValue$ForConstant$PropertyDelegate$ForNonArrayType$8 +net.bytebuddy.description.annotation.AnnotationValue$ForConstant$PropertyDelegate$ForNonArrayType$9 +net.bytebuddy.description.type.TypeDescription$Generic$LazyProjection +net.bytebuddy.description.type.TypeDescription$Generic$LazyProjection$WithEagerNavigation +net.bytebuddy.description.type.TypeDescription$Generic$LazyProjection$WithEagerNavigation$OfAnnotatedElement +net.bytebuddy.description.type.TypeDescription$Generic$LazyProjection$ForLoadedReturnType +net.bytebuddy.asm.Advice$Dispatcher$Inlining +net.bytebuddy.asm.Advice$Return +jdk.proxy2.$Proxy56 +net.bytebuddy.asm.Advice$Enter +jdk.proxy2.$Proxy57 +net.bytebuddy.asm.Advice$Local +net.bytebuddy.asm.Advice$OnNonDefaultValue +jdk.proxy2.$Proxy58 +net.bytebuddy.asm.Advice$This +jdk.proxy2.$Proxy59 +net.bytebuddy.asm.Advice$Origin +jdk.proxy2.$Proxy60 +net.bytebuddy.asm.Advice$AllArguments +jdk.proxy2.$Proxy61 +net.bytebuddy.dynamic.ClassFileLocator$Resolution$Explicit +net.bytebuddy.utility.StreamDrainer +net.bytebuddy.utility.OpenedClassReader +net.bytebuddy.utility.AsmClassReader$ForAsm +net.bytebuddy.jar.asm.ClassReader +net.bytebuddy.asm.Advice$Dispatcher$Resolved$AbstractBase +net.bytebuddy.asm.Advice$Dispatcher$Inlining$Resolved +net.bytebuddy.asm.Advice$Dispatcher$Inlining$Resolved$ForMethodEnter +net.bytebuddy.asm.Advice$ArgumentHandler +net.bytebuddy.asm.Advice$Dispatcher$Inlining$CodeTranslationVisitor +net.bytebuddy.asm.Advice$Dispatcher$Inlining$Resolved$ForMethodEnter$WithRetainedEnterType +net.bytebuddy.asm.Advice$Dispatcher$Inlining$Resolved$ForMethodEnter$WithDiscardedEnterType +net.bytebuddy.asm.Advice$OffsetMapping$ForArgument$Unresolved$Factory +net.bytebuddy.asm.Advice$Argument +net.bytebuddy.asm.Advice$OffsetMapping$ForAllArguments$Factory +net.bytebuddy.asm.Advice$OffsetMapping$ForThisReference$Factory +net.bytebuddy.asm.Advice$OffsetMapping$ForField$Unresolved$Factory +net.bytebuddy.asm.Advice$OffsetMapping$ForField +net.bytebuddy.asm.Advice$OffsetMapping$ForField$Unresolved +net.bytebuddy.asm.Advice$OffsetMapping$ForField$Unresolved$WithImplicitType +net.bytebuddy.asm.Advice$OffsetMapping$ForField$Unresolved$WithExplicitType +net.bytebuddy.asm.Advice$OffsetMapping$ForFieldHandle$Unresolved$ReaderFactory +net.bytebuddy.asm.Advice$OffsetMapping$ForFieldHandle +net.bytebuddy.asm.Advice$OffsetMapping$ForFieldHandle$Unresolved +net.bytebuddy.asm.Advice$OffsetMapping$ForFieldHandle$Unresolved$WithImplicitType +net.bytebuddy.asm.Advice$OffsetMapping$ForFieldHandle$Unresolved$WithExplicitType +net.bytebuddy.asm.Advice$FieldGetterHandle +net.bytebuddy.asm.Advice$OffsetMapping$ForFieldHandle$Unresolved$WriterFactory +net.bytebuddy.asm.Advice$FieldSetterHandle +net.bytebuddy.asm.Advice$OffsetMapping$ForOrigin$Factory +net.bytebuddy.asm.Advice$OffsetMapping$ForSelfCallHandle$Factory +net.bytebuddy.asm.Advice$SelfCallHandle +net.bytebuddy.asm.Advice$OffsetMapping$ForHandle$Factory +net.bytebuddy.asm.Advice$Handle +net.bytebuddy.asm.Advice$OffsetMapping$ForDynamicConstant$Factory +net.bytebuddy.asm.Advice$DynamicConstant +net.bytebuddy.asm.Advice$OffsetMapping$ForUnusedValue$Factory +net.bytebuddy.asm.Advice$OffsetMapping$ForStubValue +net.bytebuddy.asm.Advice$OffsetMapping$Target +net.bytebuddy.asm.Advice$OffsetMapping$ForThrowable$Factory +net.bytebuddy.asm.Advice$Thrown +net.bytebuddy.asm.Advice$OffsetMapping$ForExitValue$Factory +net.bytebuddy.asm.Advice$Exit +net.bytebuddy.asm.Advice$OffsetMapping$Factory$Illegal +net.bytebuddy.asm.Advice$OffsetMapping$ForLocalValue$Factory +net.bytebuddy.description.annotation.AnnotationValue$ForTypeDescription +net.bytebuddy.description.annotation.AnnotationValue$ForMismatchedType +net.bytebuddy.asm.Advice$OffsetMapping$Factory$AdviceType +net.bytebuddy.asm.Advice$FieldValue +net.bytebuddy.asm.Advice$Unused +net.bytebuddy.asm.Advice$StubValue +net.bytebuddy.asm.Advice$OffsetMapping$ForStackManipulation +net.bytebuddy.description.type.TypeDescription$Generic$LazyProjection$OfMethodParameter +net.bytebuddy.description.type.TypeList$Generic$AbstractBase +net.bytebuddy.description.type.TypeList$Generic$Explicit +net.bytebuddy.description.type.TypeList$Explicit +net.bytebuddy.implementation.bytecode.StackSize +net.bytebuddy.asm.Advice$OffsetMapping$ForThisReference +net.bytebuddy.asm.Advice$OffsetMapping$Target$ForDefaultValue +net.bytebuddy.asm.Advice$OffsetMapping$Target$ForDefaultValue$ReadOnly +net.bytebuddy.asm.Advice$OffsetMapping$Target$ForDefaultValue$ReadWrite +net.bytebuddy.description.enumeration.EnumerationDescription$AbstractBase +net.bytebuddy.description.enumeration.EnumerationDescription$ForLoadedEnumeration +net.bytebuddy.description.annotation.AnnotationValue$ForEnumerationDescription +net.bytebuddy.asm.Advice$OffsetMapping$ForInstrumentedMethod +net.bytebuddy.asm.Advice$OffsetMapping$ForInstrumentedMethod$1 +net.bytebuddy.asm.Advice$OffsetMapping$ForInstrumentedMethod$2 +net.bytebuddy.asm.Advice$OffsetMapping$ForInstrumentedMethod$3 +net.bytebuddy.asm.Advice$OffsetMapping$ForInstrumentedMethod$4 +net.bytebuddy.asm.Advice$OffsetMapping$ForInstrumentedMethod$5 +sun.reflect.generics.tree.ArrayTypeSignature +sun.reflect.generics.tree.BottomSignature +sun.reflect.generics.tree.Wildcard +net.bytebuddy.description.type.TypeDescription$Generic$AnnotationReader$Delegator +net.bytebuddy.description.type.TypeDescription$Generic$AnnotationReader$Delegator$ForLoadedExecutableParameterType +net.bytebuddy.description.type.TypeDescription$Generic$AnnotationReader$Delegator$ForLoadedExecutableParameterType$Dispatcher +net.bytebuddy.description.type.$Proxy62 +net.bytebuddy.asm.Advice$OffsetMapping$ForAllArguments +net.bytebuddy.description.type.TypeDescription$Generic$AnnotationReader$Delegator$Chained +net.bytebuddy.description.type.TypeDescription$Generic$AnnotationReader$ForComponentType +net.bytebuddy.description.type.TypeDescription$Generic$AnnotationReader$ForComponentType$AnnotatedParameterizedType +java.lang.reflect.AnnotatedArrayType +net.bytebuddy.description.type.$Proxy63 +net.bytebuddy.asm.Advice$Dispatcher$SuppressionHandler +net.bytebuddy.asm.Advice$Dispatcher$SuppressionHandler$Suppressing +net.bytebuddy.asm.Advice$Dispatcher$SuppressionHandler$Bound +net.bytebuddy.asm.Advice$Dispatcher$SuppressionHandler$NoOp +net.bytebuddy.asm.Advice$Dispatcher$RelocationHandler +net.bytebuddy.asm.Advice$Dispatcher$RelocationHandler$ForType +net.bytebuddy.asm.Advice$Dispatcher$RelocationHandler$Bound +net.bytebuddy.asm.Advice$OnDefaultValue +net.bytebuddy.asm.Advice$Dispatcher$RelocationHandler$ForValue +net.bytebuddy.asm.Advice$Dispatcher$RelocationHandler$ForValue$1 +net.bytebuddy.asm.Advice$Dispatcher$RelocationHandler$ForValue$2 +net.bytebuddy.asm.Advice$Dispatcher$RelocationHandler$ForValue$3 +net.bytebuddy.asm.Advice$Dispatcher$RelocationHandler$ForValue$4 +net.bytebuddy.asm.Advice$Dispatcher$RelocationHandler$ForValue$5 +net.bytebuddy.asm.Advice$Dispatcher$RelocationHandler$ForValue$6 +net.bytebuddy.asm.Advice$Dispatcher$RelocationHandler$ForValue$7 +net.bytebuddy.asm.Advice$Dispatcher$RelocationHandler$ForValue$8 +net.bytebuddy.asm.Advice$Dispatcher$RelocationHandler$ForValue$9 +java.lang.reflect.WildcardType +sun.reflect.generics.reflectiveObjects.WildcardTypeImpl +net.bytebuddy.description.type.TypeDescription$Generic$AnnotationReader$Delegator$ForLoadedMethodReturnType +net.bytebuddy.description.type.TypeDescription$Generic$AnnotationReader$Delegator$ForLoadedMethodReturnType$Dispatcher +net.bytebuddy.description.type.$Proxy64 +net.bytebuddy.description.type.TypeDescription$Generic$OfParameterizedType +net.bytebuddy.description.type.TypeDescription$Generic$OfParameterizedType$ForLoadedType +net.bytebuddy.asm.Advice$Dispatcher$RelocationHandler$ForValue$OfNonDefault +net.bytebuddy.asm.Advice$Dispatcher$Inlining$Resolved$ForMethodExit +net.bytebuddy.asm.Advice$Dispatcher$Inlining$Resolved$ForMethodExit$WithoutExceptionHandler +net.bytebuddy.asm.Advice$Dispatcher$Inlining$Resolved$ForMethodExit$WithExceptionHandler +net.bytebuddy.asm.Advice$OffsetMapping$ForEnterValue$Factory +net.bytebuddy.asm.Advice$OffsetMapping$ForReturnValue$Factory +net.bytebuddy.asm.Advice$OffsetMapping$ForReturnValue +net.bytebuddy.asm.Advice$OffsetMapping$ForEnterValue +net.bytebuddy.asm.Advice$Dispatcher$RelocationHandler$Disabled +net.bytebuddy.asm.Advice$ExceptionHandler$Default +net.bytebuddy.asm.Advice$ExceptionHandler$Default$1 +net.bytebuddy.asm.Advice$ExceptionHandler$Default$2 +net.bytebuddy.asm.Advice$ExceptionHandler$Default$3 +net.bytebuddy.implementation.SuperMethodCall +net.bytebuddy.asm.AsmVisitorWrapper$ForDeclaredMethods$Entry +org.mockito.internal.creation.bytebuddy.MockMethodAdvice$ForStatic +net.bytebuddy.asm.Advice$OffsetMapping$ForInstrumentedType +org.mockito.internal.creation.bytebuddy.MockMethodAdvice$ConstructorShortcut +org.mockito.internal.creation.bytebuddy.MockMethodAdvice$ConstructorShortcut$1 +org.mockito.internal.creation.bytebuddy.MockMethodAdvice$ForHashCode +org.mockito.internal.creation.bytebuddy.MockMethodAdvice$ForEquals +jdk.proxy2.$Proxy65 +net.bytebuddy.asm.Advice$OffsetMapping$ForArgument +net.bytebuddy.asm.Advice$OffsetMapping$ForArgument$Unresolved +org.mockito.internal.creation.bytebuddy.MockMethodAdvice$SelfCallInfo +org.mockito.internal.util.reflection.ModuleMemberAccessor +org.mockito.internal.util.reflection.InstrumentationMemberAccessor +net.bytebuddy.dynamic.loading.InjectionClassLoader +net.bytebuddy.dynamic.loading.ByteArrayClassLoader +net.bytebuddy.implementation.MethodCall +net.bytebuddy.implementation.MethodCall$WithoutSpecifiedTarget +net.bytebuddy.dynamic.loading.ClassFilePostProcessor +net.bytebuddy.dynamic.loading.PackageDefinitionStrategy +java.lang.invoke.LambdaForm$MH/0x00003fc001474000 +java.lang.invoke.LambdaForm$MH/0x00003fc001474400 +net.bytebuddy.dynamic.loading.ByteArrayClassLoader$PackageLookupStrategy$CreationAction +net.bytebuddy.dynamic.loading.ByteArrayClassLoader$PackageLookupStrategy +net.bytebuddy.utility.JavaModule +net.bytebuddy.utility.JavaModule$Resolver +net.bytebuddy.utility.$Proxy66 +net.bytebuddy.utility.JavaModule$Module +net.bytebuddy.utility.$Proxy67 +net.bytebuddy.dynamic.loading.ByteArrayClassLoader$PackageLookupStrategy$ForJava9CapableVm +net.bytebuddy.dynamic.loading.ByteArrayClassLoader$SynchronizationStrategy$CreationAction +net.bytebuddy.dynamic.loading.ByteArrayClassLoader$SynchronizationStrategy$Initializable +net.bytebuddy.dynamic.loading.ByteArrayClassLoader$SynchronizationStrategy +net.bytebuddy.dynamic.loading.ByteArrayClassLoader$SynchronizationStrategy$ForJava8CapableVm +java.lang.invoke.LambdaForm$MH/0x00003fc001474800 +java.lang.invoke.LambdaForm$MH/0x00003fc001474c00 +java.lang.invoke.LambdaForm$MH/0x00003fc001475000 +java.lang.invoke.LambdaForm$MH/0x00003fc001475400 +java.lang.invoke.LambdaForm$MH/0x00003fc001475800 +java.lang.invoke.LambdaForm$MH/0x00003fc001475c00 +java.lang.invoke.BoundMethodHandle$Species_LLLLL +java.lang.invoke.LambdaForm$MH/0x00003fc001478000 +java.lang.invoke.LambdaForm$MH/0x00003fc001478400 +net.bytebuddy.dynamic.loading.ByteArrayClassLoader$PersistenceHandler +net.bytebuddy.dynamic.loading.ByteArrayClassLoader$PersistenceHandler$1 +net.bytebuddy.dynamic.loading.ByteArrayClassLoader$PersistenceHandler$2 +net.bytebuddy.dynamic.loading.PackageDefinitionStrategy$Trivial +net.bytebuddy.dynamic.loading.PackageDefinitionStrategy$Definition +net.bytebuddy.dynamic.loading.ClassFilePostProcessor$NoOp +org.mockito.internal.util.reflection.InstrumentationMemberAccessor$Dispatcher +net.bytebuddy.dynamic.scaffold.subclass.ConstructorStrategy$Default +net.bytebuddy.dynamic.scaffold.subclass.ConstructorStrategy$Default$1 +net.bytebuddy.dynamic.scaffold.subclass.ConstructorStrategy$Default$2 +net.bytebuddy.dynamic.scaffold.subclass.ConstructorStrategy$Default$3 +net.bytebuddy.dynamic.scaffold.subclass.ConstructorStrategy$Default$4 +net.bytebuddy.dynamic.scaffold.subclass.ConstructorStrategy$Default$5 +net.bytebuddy.dynamic.scaffold.MethodRegistry$Handler +net.bytebuddy.dynamic.DynamicType$Builder$AbstractBase +net.bytebuddy.dynamic.DynamicType$Builder$AbstractBase$UsingTypeWriter +net.bytebuddy.dynamic.DynamicType$Builder$AbstractBase$Adapter +net.bytebuddy.dynamic.scaffold.subclass.SubclassDynamicTypeBuilder +net.bytebuddy.dynamic.DynamicType$Builder$MethodDefinition$ImplementationDefinition +net.bytebuddy.dynamic.DynamicType$Builder$MethodDefinition$TypeVariableDefinition +net.bytebuddy.dynamic.DynamicType$Builder$MethodDefinition$ExceptionDefinition +net.bytebuddy.dynamic.DynamicType$Builder$MethodDefinition$ParameterDefinition +net.bytebuddy.dynamic.DynamicType$Builder$FieldDefinition +net.bytebuddy.dynamic.DynamicType$Builder$FieldDefinition$Optional +net.bytebuddy.dynamic.TypeResolutionStrategy +net.bytebuddy.dynamic.DynamicType$Builder$RecordComponentDefinition +net.bytebuddy.dynamic.DynamicType$Builder$RecordComponentDefinition$Optional +net.bytebuddy.dynamic.DynamicType$Builder$TypeVariableDefinition +net.bytebuddy.dynamic.DynamicType$Builder$MethodDefinition$ImplementationDefinition$Optional +net.bytebuddy.dynamic.DynamicType$Builder$MethodDefinition$ParameterDefinition$Simple +net.bytebuddy.dynamic.DynamicType$Builder$MethodDefinition$ParameterDefinition$Initial +net.bytebuddy.dynamic.DynamicType$Builder$InnerTypeDefinition +net.bytebuddy.dynamic.DynamicType$Builder$InnerTypeDefinition$ForType +net.bytebuddy.dynamic.DynamicType$Builder$AbstractBase$Delegator +net.bytebuddy.dynamic.DynamicType$Builder$AbstractBase$Adapter$InnerTypeDefinitionForTypeAdapter +net.bytebuddy.dynamic.DynamicType$Builder$AbstractBase$Adapter$InnerTypeDefinitionForMethodAdapter +net.bytebuddy.dynamic.DynamicType$Builder$FieldDefinition$Valuable +net.bytebuddy.dynamic.DynamicType$Builder$FieldDefinition$Optional$Valuable +net.bytebuddy.implementation.attribute.TypeAttributeAppender +net.bytebuddy.implementation.Implementation$Target$Factory +net.bytebuddy.dynamic.scaffold.TypeWriter$RecordComponentPool +net.bytebuddy.dynamic.scaffold.TypeWriter$FieldPool +net.bytebuddy.dynamic.scaffold.RecordComponentRegistry +net.bytebuddy.dynamic.scaffold.MethodRegistry +net.bytebuddy.dynamic.scaffold.FieldRegistry +net.bytebuddy.description.modifier.ModifierContributor +net.bytebuddy.description.modifier.ModifierContributor$ForType +net.bytebuddy.description.modifier.ModifierContributor$ForMethod +net.bytebuddy.description.modifier.ModifierContributor$ForField +net.bytebuddy.description.modifier.Visibility +net.bytebuddy.description.modifier.TypeManifestation +net.bytebuddy.description.modifier.ModifierContributor$Resolver +net.bytebuddy.description.type.TypeDescription$AbstractBase$OfSimpleType +net.bytebuddy.dynamic.scaffold.InstrumentedType$Default +net.bytebuddy.dynamic.scaffold.TypeInitializer$None +net.bytebuddy.implementation.LoadedTypeInitializer$NoOp +net.bytebuddy.description.type.TypeDescription$LazyProxy +net.bytebuddy.description.modifier.Ownership +net.bytebuddy.description.modifier.ModifierContributor$ForParameter +net.bytebuddy.description.modifier.SyntheticState +net.bytebuddy.description.modifier.EnumerationState +net.bytebuddy.description.TypeVariableSource$Visitor +jdk.proxy2.$Proxy68 +net.bytebuddy.description.type.TypeList$Generic$ForLoadedTypes +net.bytebuddy.description.type.TypeDescription$Generic$Visitor$Substitutor +net.bytebuddy.description.type.TypeDescription$Generic$Visitor$Substitutor$ForDetachment +net.bytebuddy.dynamic.scaffold.FieldRegistry$Default +net.bytebuddy.dynamic.scaffold.FieldRegistry$Compiled +net.bytebuddy.dynamic.scaffold.MethodRegistry$Default +net.bytebuddy.dynamic.scaffold.MethodRegistry$Prepared +net.bytebuddy.dynamic.scaffold.RecordComponentRegistry$Default +net.bytebuddy.dynamic.scaffold.RecordComponentRegistry$Compiled +net.bytebuddy.implementation.attribute.TypeAttributeAppender$ForInstrumentedType +net.bytebuddy.implementation.attribute.AnnotationAppender$Target +net.bytebuddy.implementation.attribute.AnnotationAppender +net.bytebuddy.asm.AsmVisitorWrapper$NoOp +net.bytebuddy.dynamic.DynamicType$Builder$MethodDefinition$ImplementationDefinition$AbstractBase +net.bytebuddy.dynamic.DynamicType$Builder$AbstractBase$Adapter$MethodMatchAdapter +net.bytebuddy.dynamic.DynamicType$Builder$MethodDefinition +net.bytebuddy.dynamic.DynamicType$Builder$MethodDefinition$ReceiverTypeDefinition +net.bytebuddy.implementation.MethodCall$MethodLocator$Factory +net.bytebuddy.implementation.MethodCall$ArgumentLoader$Factory +net.bytebuddy.implementation.MethodCall$TerminationHandler$Factory +net.bytebuddy.implementation.MethodCall$MethodInvoker$Factory +net.bytebuddy.implementation.MethodCall$TargetHandler$Factory +net.bytebuddy.implementation.MethodCall$MethodLocator +net.bytebuddy.implementation.MethodCall$MethodLocator$ForExplicitMethod +net.bytebuddy.implementation.MethodCall$TargetHandler$ForField$Location +net.bytebuddy.implementation.MethodCall$TargetHandler$ForSelfOrStaticInvocation$Factory +net.bytebuddy.implementation.MethodCall$TargetHandler +net.bytebuddy.implementation.MethodCall$MethodInvoker$ForContextualInvocation$Factory +net.bytebuddy.implementation.MethodCall$MethodInvoker +net.bytebuddy.implementation.MethodCall$TerminationHandler +net.bytebuddy.implementation.MethodCall$TerminationHandler$Simple +net.bytebuddy.implementation.MethodCall$TerminationHandler$Simple$1 +net.bytebuddy.implementation.MethodCall$TerminationHandler$Simple$2 +net.bytebuddy.implementation.MethodCall$TerminationHandler$Simple$3 +net.bytebuddy.dynamic.scaffold.MethodRegistry$Handler$ForImplementation +net.bytebuddy.dynamic.scaffold.MethodRegistry$Handler$Compiled +net.bytebuddy.dynamic.DynamicType$Builder$MethodDefinition$AbstractBase +net.bytebuddy.dynamic.DynamicType$Builder$MethodDefinition$ReceiverTypeDefinition$AbstractBase +net.bytebuddy.dynamic.DynamicType$Builder$MethodDefinition$AbstractBase$Adapter +net.bytebuddy.dynamic.DynamicType$Builder$AbstractBase$Adapter$MethodMatchAdapter$AnnotationAdapter +net.bytebuddy.dynamic.Transformer +net.bytebuddy.implementation.attribute.MethodAttributeAppender +net.bytebuddy.implementation.attribute.MethodAttributeAppender$NoOp +net.bytebuddy.dynamic.Transformer$NoOp +net.bytebuddy.dynamic.scaffold.MethodRegistry$Default$Entry +net.bytebuddy.implementation.MethodCall$TargetHandler$ForMethodCall$Factory +net.bytebuddy.implementation.MethodCall$MethodInvoker$ForVirtualInvocation$WithImplicitType +net.bytebuddy.implementation.MethodCall$TargetHandler$ForMethodParameter +net.bytebuddy.implementation.MethodCall$TargetHandler$Resolved +net.bytebuddy.implementation.MethodCall$ArgumentLoader$ArgumentProvider +net.bytebuddy.implementation.MethodCall$ArgumentLoader$ForMethodParameter$Factory +net.bytebuddy.dynamic.TypeResolutionStrategy$Resolved +net.bytebuddy.dynamic.TypeResolutionStrategy$Passive +net.bytebuddy.pool.TypePool$AbstractBase +net.bytebuddy.pool.TypePool$AbstractBase$Hierarchical +net.bytebuddy.pool.TypePool$ClassLoading +net.bytebuddy.pool.TypePool$Resolution +net.bytebuddy.pool.TypePool$CacheProvider +net.bytebuddy.pool.TypePool$Empty +net.bytebuddy.pool.TypePool$CacheProvider$Simple +net.bytebuddy.description.type.TypeDescription$Generic$LazyProjection$WithResolvedErasure +net.bytebuddy.description.type.TypeDescription$Generic$Visitor$Substitutor$ForAttachment +net.bytebuddy.description.method.MethodList$TypeSubstituting +net.bytebuddy.description.method.MethodDescription$InGenericShape +net.bytebuddy.description.type.TypeDescription$Generic$Visitor$ForRawType +net.bytebuddy.matcher.VisibilityMatcher +net.bytebuddy.description.method.MethodDescription$TypeSubstituting +net.bytebuddy.description.type.TypeDescription$Generic$OfParameterizedType$ForGenerifiedErasure +net.bytebuddy.description.type.TypeDescription$Generic$OfNonGenericType$ForErasure +net.bytebuddy.description.type.TypeList$Generic$ForLoadedTypes$OfTypeVariables +net.bytebuddy.description.method.MethodDescription$Token +net.bytebuddy.matcher.TypeSortMatcher +net.bytebuddy.description.ByteCodeElement$Token$TokenList +net.bytebuddy.description.method.ParameterList$TypeSubstituting +net.bytebuddy.description.method.ParameterDescription$InGenericShape +net.bytebuddy.description.type.TypeList$Generic$ForDetachedTypes +net.bytebuddy.description.type.TypeList$Generic$OfConstructorExceptionTypes +jdk.internal.vm.annotation.IntrinsicCandidate +com.sun.proxy.jdk.proxy1.$Proxy69 +net.bytebuddy.description.annotation.AnnotationList$Explicit +net.bytebuddy.description.type.TypeDescription$Generic$LazyProxy +jdk.proxy2.$Proxy70 +net.bytebuddy.dynamic.scaffold.subclass.SubclassDynamicTypeBuilder$InstrumentableMatcher +net.bytebuddy.description.method.MethodList$ForTokens +net.bytebuddy.description.method.MethodDescription$Latent +net.bytebuddy.description.method.ParameterList$ForTokens +net.bytebuddy.description.type.TypeDescription$Generic$LazyProjection$WithLazyNavigation +net.bytebuddy.description.type.TypeDescription$Generic$LazyProjection$WithLazyNavigation$OfAnnotatedElement +net.bytebuddy.description.type.TypeDescription$Generic$LazyProjection$ForLoadedSuperClass +net.bytebuddy.dynamic.scaffold.MethodGraph$Compiler$Default$Key$Store +net.bytebuddy.dynamic.scaffold.MethodGraph$Compiler$Default$Key$Store$Entry +net.bytebuddy.description.type.TypeList$Generic$ForDetachedTypes$WithResolvedErasure +net.bytebuddy.description.type.TypeList$Generic$OfLoadedInterfaceTypes +net.bytebuddy.dynamic.scaffold.MethodGraph$Compiler$Default$Key +net.bytebuddy.dynamic.scaffold.MethodGraph$Compiler$Default$Key$Harmonized +net.bytebuddy.description.method.MethodDescription$TypeToken +net.bytebuddy.dynamic.scaffold.MethodGraph$Compiler$Default$Harmonizer$ForJavaMethod$Token +net.bytebuddy.dynamic.scaffold.MethodGraph$Compiler$Default$Key$Store$Entry$Initial +net.bytebuddy.dynamic.scaffold.MethodGraph$Compiler$Default$Key$Store$Entry$Resolved +net.bytebuddy.dynamic.scaffold.MethodGraph$Node +net.bytebuddy.description.method.ParameterDescription$TypeSubstituting +net.bytebuddy.dynamic.scaffold.MethodGraph$Compiler$Default$Key$Store$Entry$Resolved$Node +net.bytebuddy.dynamic.scaffold.MethodGraph$Compiler$Default$Key$Detached +net.bytebuddy.dynamic.scaffold.MethodGraph$Compiler$Default$Key$Store$Graph +net.bytebuddy.dynamic.scaffold.MethodGraph$Linked$Delegation +net.bytebuddy.matcher.MethodParameterTypeMatcher +net.bytebuddy.matcher.FailSafeMatcher +net.bytebuddy.dynamic.scaffold.MethodGraph$NodeList +net.bytebuddy.dynamic.scaffold.MethodGraph$Node$Sort +net.bytebuddy.dynamic.scaffold.MethodRegistry$Default$Prepared$Entry +net.bytebuddy.description.method.MethodDescription$Latent$TypeInitializer +net.bytebuddy.dynamic.scaffold.MethodRegistry$Default$Prepared +net.bytebuddy.dynamic.scaffold.TypeWriter$MethodPool +net.bytebuddy.dynamic.scaffold.MethodRegistry$Compiled +net.bytebuddy.description.type.TypeDescription$Generic$Visitor$Validator +net.bytebuddy.description.type.TypeDescription$Generic$Visitor$Validator$1 +net.bytebuddy.description.type.TypeDescription$Generic$Visitor$Validator$2 +net.bytebuddy.description.type.TypeDescription$Generic$Visitor$Validator$3 +net.bytebuddy.description.type.TypeDescription$Generic$Visitor$Validator$ForTypeAnnotations +net.bytebuddy.description.annotation.AnnotationList$Empty +net.bytebuddy.description.type.TypeList$Generic$ForDetachedTypes$OfTypeVariables +net.bytebuddy.description.type.PackageDescription$AbstractBase +net.bytebuddy.description.type.PackageDescription$Simple +net.bytebuddy.description.field.FieldList$AbstractBase +net.bytebuddy.description.field.FieldList$ForTokens +net.bytebuddy.description.method.MethodDescription$SignatureToken +net.bytebuddy.description.annotation.AnnotationValue$ForDescriptionArray +net.bytebuddy.description.annotation.AnnotationValue$Sort +net.bytebuddy.description.annotation.AnnotationValue$State +net.bytebuddy.dynamic.scaffold.subclass.SubclassImplementationTarget$Factory +net.bytebuddy.implementation.Implementation$Target +net.bytebuddy.dynamic.scaffold.subclass.SubclassImplementationTarget$OriginTypeResolver +net.bytebuddy.dynamic.scaffold.subclass.SubclassImplementationTarget$OriginTypeResolver$1 +net.bytebuddy.dynamic.scaffold.subclass.SubclassImplementationTarget$OriginTypeResolver$2 +net.bytebuddy.implementation.Implementation$Target$AbstractBase +net.bytebuddy.dynamic.scaffold.subclass.SubclassImplementationTarget +net.bytebuddy.implementation.Implementation$SpecialMethodInvocation +net.bytebuddy.implementation.Implementation$Target$AbstractBase$DefaultMethodInvocation +net.bytebuddy.implementation.Implementation$Target$AbstractBase$DefaultMethodInvocation$1 +net.bytebuddy.implementation.Implementation$Target$AbstractBase$DefaultMethodInvocation$2 +net.bytebuddy.dynamic.scaffold.MethodRegistry$Handler$ForImplementation$Compiled +net.bytebuddy.dynamic.scaffold.TypeWriter$MethodPool$Record +net.bytebuddy.implementation.MethodCall$Appender +net.bytebuddy.implementation.MethodCall$MethodInvoker$ForContextualInvocation +net.bytebuddy.implementation.MethodCall$TargetHandler$ForSelfOrStaticInvocation +net.bytebuddy.dynamic.scaffold.MethodRegistry$Default$Compiled$Entry +net.bytebuddy.implementation.MethodCall$TargetHandler$ForMethodCall +net.bytebuddy.implementation.SuperMethodCall$Appender +net.bytebuddy.implementation.SuperMethodCall$Appender$TerminationHandler +net.bytebuddy.implementation.SuperMethodCall$Appender$TerminationHandler$1 +net.bytebuddy.implementation.SuperMethodCall$Appender$TerminationHandler$2 +net.bytebuddy.dynamic.scaffold.MethodRegistry$Default$Compiled +net.bytebuddy.dynamic.scaffold.FieldRegistry$Default$Compiled +net.bytebuddy.dynamic.scaffold.TypeWriter$FieldPool$Record +net.bytebuddy.dynamic.scaffold.RecordComponentRegistry$Default$Compiled +net.bytebuddy.dynamic.scaffold.TypeWriter$RecordComponentPool$Record +net.bytebuddy.pool.TypePool$Explicit +net.bytebuddy.pool.TypePool$CacheProvider$NoOp +net.bytebuddy.dynamic.scaffold.TypeWriter +net.bytebuddy.dynamic.scaffold.TypeWriter$Default +net.bytebuddy.dynamic.scaffold.inline.MethodRebaseResolver +net.bytebuddy.dynamic.scaffold.TypeWriter$Default$ClassDumpAction$Dispatcher +net.bytebuddy.dynamic.scaffold.TypeWriter$Default$ForCreation +net.bytebuddy.utility.visitor.MetadataAwareClassVisitor +net.bytebuddy.dynamic.scaffold.TypeWriter$Default$ForCreation$CreationClassVisitor +net.bytebuddy.utility.visitor.ContextClassVisitor +net.bytebuddy.dynamic.scaffold.TypeWriter$Default$ForCreation$ImplementationContextClassVisitor +net.bytebuddy.dynamic.scaffold.TypeInitializer$Drain +net.bytebuddy.description.type.RecordComponentList$ForTokens +net.bytebuddy.description.type.RecordComponentDescription +net.bytebuddy.description.type.RecordComponentDescription$InDefinedShape +net.bytebuddy.dynamic.scaffold.TypeWriter$Default$ClassDumpAction$Dispatcher$Disabled +net.bytebuddy.utility.AsmClassWriter$Factory$Default$EmptyAsmClassReader +net.bytebuddy.utility.AsmClassWriter$ForAsm +net.bytebuddy.implementation.Implementation$Context$FrameGeneration +net.bytebuddy.implementation.Implementation$Context$FrameGeneration$1 +net.bytebuddy.implementation.Implementation$Context$FrameGeneration$2 +net.bytebuddy.implementation.Implementation$Context$FrameGeneration$3 +net.bytebuddy.implementation.Implementation$Context$ExtractableView$AbstractBase +net.bytebuddy.implementation.Implementation$Context$Default +net.bytebuddy.dynamic.scaffold.TypeWriter$MethodPool$Record$ForDefinedMethod +net.bytebuddy.implementation.Implementation$Context$Default$DelegationRecord +net.bytebuddy.implementation.Implementation$Context$Default$AccessorMethodDelegation +net.bytebuddy.implementation.Implementation$Context$Default$FieldGetterDelegation +net.bytebuddy.implementation.Implementation$Context$Default$FieldSetterDelegation +net.bytebuddy.dynamic.scaffold.TypeWriter$Default$ValidatingClassVisitor +net.bytebuddy.dynamic.scaffold.TypeWriter$Default$ValidatingClassVisitor$ValidatingFieldVisitor +net.bytebuddy.dynamic.scaffold.TypeWriter$Default$ValidatingClassVisitor$ValidatingMethodVisitor +net.bytebuddy.dynamic.scaffold.TypeWriter$Default$ValidatingClassVisitor$Constraint +net.bytebuddy.jar.asm.signature.SignatureVisitor +net.bytebuddy.jar.asm.signature.SignatureWriter +net.bytebuddy.description.type.TypeDescription$Generic$Visitor$ForSignatureVisitor +net.bytebuddy.dynamic.scaffold.TypeWriter$Default$ValidatingClassVisitor$Constraint$ForClassFileVersion +net.bytebuddy.dynamic.scaffold.TypeWriter$Default$ValidatingClassVisitor$Constraint$ForClass +net.bytebuddy.dynamic.scaffold.TypeWriter$Default$ValidatingClassVisitor$Constraint$Compound +net.bytebuddy.implementation.attribute.AnnotationAppender$Default +net.bytebuddy.implementation.attribute.AnnotationAppender$Target$OnType +net.bytebuddy.implementation.attribute.AnnotationAppender$ForTypeAnnotations +java.util.AbstractList$SubList +net.bytebuddy.jar.asm.TypeReference +net.bytebuddy.dynamic.scaffold.TypeWriter$MethodPool$Record$ForDefinedMethod$WithBody +net.bytebuddy.dynamic.scaffold.TypeWriter$MethodPool$Record$AccessBridgeWrapper +net.bytebuddy.dynamic.scaffold.TypeWriter$MethodPool$Record$Sort +net.bytebuddy.description.modifier.Visibility$1 +net.bytebuddy.description.type.TypeList$Generic$OfMethodExceptionTypes +net.bytebuddy.implementation.MethodCall$TargetHandler$ForSelfOrStaticInvocation$Resolved +net.bytebuddy.implementation.bytecode.Duplication +net.bytebuddy.implementation.bytecode.ByteCodeAppender$Size +net.bytebuddy.implementation.bytecode.StackManipulation$Compound +net.bytebuddy.implementation.bytecode.member.MethodInvocation +net.bytebuddy.implementation.bytecode.member.MethodInvocation$WithImplicitInvocationTargetType +net.bytebuddy.implementation.bytecode.member.MethodInvocation$Invocation +net.bytebuddy.implementation.bytecode.member.MethodReturn +net.bytebuddy.implementation.bytecode.StackManipulation$Size +net.bytebuddy.implementation.MethodCall$TargetHandler$ForMethodCall$Resolved +net.bytebuddy.implementation.bytecode.member.MethodVariableAccess +net.bytebuddy.implementation.bytecode.member.MethodVariableAccess$MethodLoading$TypeCastingHandler +net.bytebuddy.implementation.bytecode.member.MethodVariableAccess$OffsetLoading +net.bytebuddy.implementation.MethodCall$TargetHandler$ForMethodParameter$Resolved +net.bytebuddy.implementation.MethodCall$ArgumentLoader +net.bytebuddy.implementation.MethodCall$ArgumentLoader$ForMethodParameter +net.bytebuddy.implementation.bytecode.assign.primitive.PrimitiveWideningDelegate +net.bytebuddy.implementation.bytecode.assign.primitive.PrimitiveWideningDelegate$WideningStackManipulation +net.bytebuddy.description.type.TypeList$Generic$OfMethodExceptionTypes$TypeProjection +net.bytebuddy.description.type.TypeDescription$Generic$AnnotationReader$Delegator$ForLoadedExecutableExceptionType +net.bytebuddy.description.type.TypeDescription$Generic$AnnotationReader$Delegator$ForLoadedExecutableExceptionType$Dispatcher +net.bytebuddy.description.type.$Proxy71 +net.bytebuddy.matcher.SignatureTokenMatcher +net.bytebuddy.implementation.Implementation$SpecialMethodInvocation$AbstractBase +net.bytebuddy.implementation.Implementation$SpecialMethodInvocation$Simple +net.bytebuddy.implementation.bytecode.member.MethodVariableAccess$MethodLoading +net.bytebuddy.implementation.bytecode.member.MethodVariableAccess$MethodLoading$TypeCastingHandler$NoOp +net.bytebuddy.dynamic.scaffold.TypeInitializer$Drain$Default +net.bytebuddy.description.method.ParameterList$Empty +net.bytebuddy.description.type.TypeList$Generic$Empty +net.bytebuddy.dynamic.scaffold.TypeWriter$MethodPool$Record$ForNonImplementedMethod +net.bytebuddy.dynamic.scaffold.TypeWriter$Default$UnresolvedType +net.bytebuddy.dynamic.DynamicType +net.bytebuddy.dynamic.DynamicType$Unloaded +net.bytebuddy.dynamic.DynamicType$AbstractBase +net.bytebuddy.dynamic.DynamicType$Default +net.bytebuddy.dynamic.DynamicType$Default$Unloaded +net.bytebuddy.dynamic.DynamicType$Loaded +net.bytebuddy.dynamic.loading.InjectionClassLoader$Strategy +net.bytebuddy.dynamic.DynamicType$Default$Loaded +java.lang.invoke.LambdaForm$MH/0x00003fc0014c4000 +java.lang.invoke.LambdaForm$MH/0x00003fc0014c4400 +java.lang.invoke.LambdaForm$MH/0x00003fc0014c4800 +java.lang.invoke.MethodHandleImpl$WrappedMember +java.lang.invoke.MethodHandleImpl$LoopClauses +java.lang.invoke.MethodHandleImpl$CasesHolder +java.lang.invoke.MethodHandleImpl$ArrayAccess +java.lang.invoke.MethodHandleImpl$ArrayAccessor +java.lang.invoke.MethodHandleImpl$ArrayAccessor$1 +java.lang.invoke.LambdaForm$DMH/0x00003fc0014c4c00 +java.lang.invoke.LambdaForm$DMH/0x00003fc0014c5000 +java.lang.invoke.LambdaForm$MH/0x00003fc0014c5400 +java.lang.invoke.LambdaForm$MH/0x00003fc0014c5800 +java.lang.invoke.LambdaForm$MH/0x00003fc0014c5c00 +net.bytebuddy.dynamic.loading.ByteArrayClassLoader$ClassDefinitionAction +net.bytebuddy.dynamic.loading.PackageDefinitionStrategy$Definition$Trivial +java.lang.invoke.LambdaForm$MH/0x00003fc0014c6000 +org.mockito.internal.util.reflection.InstrumentationMemberAccessor$Dispatcher$ByteBuddy$MLoL4JuG +java.lang.invoke.LambdaForm$DMH/0x00003fc0014c6400 +org.mockito.internal.exceptions.stacktrace.DefaultStackTraceCleanerProvider +org.mockito.internal.configuration.InjectingAnnotationEngine +org.mockito.internal.configuration.IndependentAnnotationEngine +org.mockito.internal.configuration.FieldAnnotationProcessor +org.mockito.Mock +org.mockito.internal.configuration.MockAnnotationProcessor +org.mockito.Captor +org.mockito.internal.configuration.CaptorAnnotationProcessor +org.mockito.internal.configuration.SpyAnnotationEngine +org.mockito.internal.util.ConsoleMockitoLogger +org.mockito.plugins.MockResolver +org.mockito.plugins.DoNotMockEnforcer +org.mockito.internal.configuration.DefaultDoNotMockEnforcer +org.mockito.internal.creation.instance.DefaultInstantiatorProvider +org.mockito.internal.creation.instance.ObjenesisInstantiator +org.objenesis.Objenesis +org.objenesis.ObjenesisBase +org.objenesis.ObjenesisStd +org.objenesis.strategy.InstantiatorStrategy +org.mockito.configuration.IMockitoConfiguration +org.mockito.internal.configuration.GlobalConfiguration +org.mockito.configuration.DefaultMockitoConfiguration +org.mockito.internal.configuration.ClassPathLoader +org.objenesis.strategy.BaseInstantiatorStrategy +org.objenesis.strategy.StdInstantiatorStrategy +org.objenesis.instantiator.ObjectInstantiator +org.mockito.Answers +org.mockito.internal.stubbing.defaultanswers.GloballyConfiguredAnswer +org.mockito.internal.stubbing.defaultanswers.ReturnsSmartNulls +org.mockito.internal.stubbing.defaultanswers.RetrieveGenericsForDefaultAnswers$AnswerCallback +org.mockito.internal.stubbing.defaultanswers.ReturnsMoreEmptyValues +org.mockito.internal.stubbing.defaultanswers.ReturnsEmptyValues +org.mockito.internal.stubbing.defaultanswers.ReturnsMocks +org.mockito.internal.stubbing.defaultanswers.ReturnsDeepStubs +org.mockito.invocation.DescribedInvocation +org.mockito.internal.stubbing.defaultanswers.ReturnsDeepStubs$ReturnsDeepStubsSerializationFallback +org.mockito.stubbing.ValidableAnswer +org.mockito.internal.stubbing.answers.CallsRealMethods +org.mockito.internal.stubbing.defaultanswers.TriesToReturnSelf +org.mockito.MockSettings +org.mockito.mock.MockCreationSettings +org.mockito.internal.creation.settings.CreationSettings +org.mockito.internal.creation.MockSettingsImpl +org.mockito.mock.MockName +org.mockito.mock.SerializableMode +org.mockito.internal.util.MockCreationValidator +org.mockito.internal.util.MockUtil +org.mockito.internal.creation.bytebuddy.InlineDelegateByteBuddyMockMaker$1 +org.mockito.mock.MockType +org.mockito.internal.util.MockNameImpl +org.mockito.plugins.DoNotMockEnforcer$Cache +org.mockito.internal.handler.MockHandlerFactory +org.mockito.invocation.MockHandler +org.mockito.internal.handler.MockHandlerImpl +org.mockito.invocation.InvocationContainer +org.mockito.invocation.MatchableInvocation +org.mockito.stubbing.OngoingStubbing +org.mockito.stubbing.Stubbing +org.mockito.invocation.InvocationOnMock +org.mockito.internal.invocation.MatchersBinder +org.mockito.internal.stubbing.InvocationContainerImpl +org.mockito.invocation.StubInfo +org.mockito.internal.verification.RegisteredInvocations +org.mockito.internal.verification.DefaultRegisteredInvocations +org.mockito.internal.stubbing.DoAnswerStyleStubbing +org.mockito.internal.handler.NullResultGuardian +org.mockito.internal.handler.InvocationNotifierHandler +org.mockito.listeners.MethodInvocationReport +org.mockito.internal.creation.bytebuddy.MockFeatures +net.bytebuddy.TypeCache$SimpleKey +org.mockito.internal.creation.bytebuddy.TypeCachingBytecodeGenerator$MockitoMockKey +org.mockito.internal.creation.bytebuddy.TypeCachingBytecodeGenerator$$Lambda/0x00003fc0014cfb10 +net.bytebuddy.TypeCache$LookupKey +org.mockito.internal.util.concurrent.WeakConcurrentMap$WeakKey +org.mockito.internal.util.concurrent.WeakConcurrentMap$LatentKey +java.lang.invoke.LambdaForm$DMH/0x00003fc0014d4000 +java.lang.invoke.LambdaForm$BMH/0x00003fc0014d4400 +java.lang.invoke.LambdaForm$MH/0x00003fc0014d4800 +java.lang.invoke.LambdaForm$MH/0x00003fc0014d4c00 +java.lang.invoke.LambdaForm$MH/0x00003fc0014d5000 +java.lang.invoke.LambdaForm$MH/0x00003fc0014d5400 +java.lang.invoke.LambdaForm$MH/0x00003fc0014d5800 +java.lang.invoke.LambdaForm$MH/0x00003fc0014d5c00 +sun.instrument.InstrumentationImpl$$Lambda/0x00003fc0013cdc50 +sun.instrument.InstrumentationImpl$$Lambda/0x00003fc0013cde90 +net.bytebuddy.dynamic.ClassFileLocator$Simple +net.bytebuddy.dynamic.scaffold.inline.AbstractInliningDynamicTypeBuilder +net.bytebuddy.dynamic.scaffold.inline.RedefinitionDynamicTypeBuilder +net.bytebuddy.description.field.FieldList$ForLoadedFields +net.bytebuddy.utility.FieldComparator +net.bytebuddy.description.field.FieldDescription$AbstractBase +net.bytebuddy.description.field.FieldDescription$InDefinedShape$AbstractBase +net.bytebuddy.description.field.FieldDescription$ForLoadedField +net.bytebuddy.description.field.FieldDescription$Token +net.bytebuddy.description.type.TypeDescription$Generic$LazyProjection$ForLoadedFieldType +net.bytebuddy.description.type.TypeDescription$Generic$AnnotationReader$Delegator$ForLoadedField +net.bytebuddy.description.type.TypeDescription$Generic$AnnotationReader$Delegator$ForLoadedField$Dispatcher +net.bytebuddy.description.type.$Proxy72 +net.bytebuddy.description.type.TypeDescription$Generic$OfNonGenericType$Latent +sun.reflect.annotation.TypeAnnotation$TypeAnnotationTarget +sun.reflect.annotation.TypeAnnotationParser +sun.reflect.annotation.TypeAnnotation +sun.reflect.annotation.TypeAnnotation$LocationInfo +sun.reflect.annotation.TypeAnnotation$LocationInfo$Location +sun.reflect.annotation.AnnotatedTypeFactory +sun.reflect.annotation.AnnotatedTypeFactory$AnnotatedTypeBaseImpl +net.bytebuddy.description.type.TypeDescription$Generic$AnnotationReader$Delegator$Simple +net.bytebuddy.description.method.ParameterDescription$Token +net.bytebuddy.description.type.RecordComponentDescription$Token +net.bytebuddy.implementation.attribute.TypeAttributeAppender$ForInstrumentedType$Differentiating +net.bytebuddy.asm.AsmVisitorWrapper$AbstractBase +org.mockito.internal.creation.bytebuddy.InlineBytecodeGenerator$ParameterWritingVisitorWrapper +org.mockito.internal.creation.bytebuddy.InlineBytecodeGenerator$ParameterWritingVisitorWrapper$ParameterAddingClassVisitor +net.bytebuddy.asm.AsmVisitorWrapper$Compound +net.bytebuddy.pool.TypePool$Default +net.bytebuddy.pool.TypePool$Default$TypeExtractor +net.bytebuddy.pool.TypePool$Default$ReaderMode +net.bytebuddy.dynamic.scaffold.inline.InliningImplementationMatcher +net.bytebuddy.description.method.ParameterDescription$Latent +net.bytebuddy.dynamic.scaffold.MethodGraph$Node$Simple +net.bytebuddy.dynamic.scaffold.MethodGraph$Simple +net.bytebuddy.dynamic.scaffold.MethodGraph$Empty +net.bytebuddy.dynamic.scaffold.TypeWriter$Default$ForInlining +net.bytebuddy.dynamic.scaffold.TypeWriter$Default$ForInlining$WithFullProcessing +net.bytebuddy.dynamic.scaffold.TypeWriter$Default$ForInlining$RegistryContextClassVisitor +net.bytebuddy.dynamic.scaffold.TypeWriter$Default$ForInlining$WithFullProcessing$RedefinitionClassVisitor +net.bytebuddy.jar.asm.commons.Remapper +net.bytebuddy.jar.asm.commons.SimpleRemapper +net.bytebuddy.jar.asm.commons.ClassRemapper +net.bytebuddy.dynamic.scaffold.TypeWriter$Default$ForInlining$WithFullProcessing$OpenedClassRemapper +net.bytebuddy.dynamic.scaffold.inline.MethodRebaseResolver$Disabled +net.bytebuddy.dynamic.scaffold.inline.MethodRebaseResolver$Resolution +net.bytebuddy.jar.asm.Handle +net.bytebuddy.dynamic.scaffold.TypeWriter$Default$ForInlining$ContextRegistry +net.bytebuddy.dynamic.scaffold.TypeWriter$Default$ForInlining$WithFullProcessing$RedefinitionClassVisitor$AttributeObtainingFieldVisitor +net.bytebuddy.dynamic.scaffold.TypeWriter$Default$ForInlining$WithFullProcessing$RedefinitionClassVisitor$AttributeObtainingMethodVisitor +net.bytebuddy.dynamic.scaffold.TypeWriter$Default$ForInlining$WithFullProcessing$RedefinitionClassVisitor$CodePreservingMethodVisitor +net.bytebuddy.dynamic.scaffold.TypeWriter$Default$ForInlining$WithFullProcessing$RedefinitionClassVisitor$AttributeObtainingRecordComponentVisitor +net.bytebuddy.dynamic.scaffold.TypeWriter$Default$ForInlining$WithFullProcessing$RedefinitionClassVisitor$DeduplicatingClassVisitor +net.bytebuddy.dynamic.scaffold.TypeWriter$Default$ForInlining$WithFullProcessing$InitializationHandler +net.bytebuddy.description.field.FieldDescription$Latent +net.bytebuddy.dynamic.scaffold.TypeWriter$Default$SignatureKey +net.bytebuddy.jar.asm.Context +net.bytebuddy.dynamic.scaffold.TypeWriter$Default$ForInlining$WithFullProcessing$InitializationHandler$Creating +net.bytebuddy.implementation.Implementation$Context$Disabled +org.mockito.internal.creation.bytebuddy.InlineBytecodeGenerator$ParameterWritingVisitorWrapper$MethodParameterStrippingMethodVisitor +net.bytebuddy.description.type.TypeDescription$Generic$AnnotationReader$Delegator$ForLoadedSuperClass +net.bytebuddy.dynamic.scaffold.TypeWriter$FieldPool$Record$ForImplicitField +net.bytebuddy.matcher.DescriptorMatcher +net.bytebuddy.jar.asm.Label +net.bytebuddy.implementation.bytecode.Removal +net.bytebuddy.implementation.bytecode.Removal$1 +net.bytebuddy.utility.visitor.StackAwareMethodVisitor +net.bytebuddy.asm.Advice$ArgumentHandler$Factory +net.bytebuddy.asm.Advice$ArgumentHandler$Factory$1 +net.bytebuddy.asm.Advice$ArgumentHandler$Factory$2 +net.bytebuddy.asm.Advice$ArgumentHandler$ForInstrumentedMethod +net.bytebuddy.asm.Advice$ArgumentHandler$ForInstrumentedMethod$Default +net.bytebuddy.asm.Advice$ArgumentHandler$ForInstrumentedMethod$Default$Copying +net.bytebuddy.asm.Advice$ArgumentHandler$ForAdvice +java.util.TreeMap$Values +java.util.TreeMap$ValueIterator +net.bytebuddy.asm.Advice$MethodSizeHandler +net.bytebuddy.asm.Advice$MethodSizeHandler$ForInstrumentedMethod +net.bytebuddy.asm.Advice$MethodSizeHandler$Default +net.bytebuddy.asm.Advice$MethodSizeHandler$ForAdvice +net.bytebuddy.asm.Advice$MethodSizeHandler$Default$WithCopiedArguments +net.bytebuddy.asm.Advice$StackMapFrameHandler +net.bytebuddy.asm.Advice$StackMapFrameHandler$ForInstrumentedMethod +net.bytebuddy.asm.Advice$StackMapFrameHandler$Default +net.bytebuddy.asm.Advice$StackMapFrameHandler$ForPostProcessor +net.bytebuddy.asm.Advice$StackMapFrameHandler$ForAdvice +net.bytebuddy.asm.Advice$StackMapFrameHandler$Default$WithPreservedArguments +net.bytebuddy.asm.Advice$StackMapFrameHandler$Default$WithPreservedArguments$WithArgumentCopy +net.bytebuddy.asm.Advice$Dispatcher$Inlining$Resolved$AdviceMethodInliner +net.bytebuddy.asm.Advice$Dispatcher$Inlining$Resolved$AdviceMethodInliner$ExceptionTableSubstitutor +net.bytebuddy.asm.Advice$Dispatcher$Inlining$Resolved$AdviceMethodInliner$ExceptionTableExtractor +net.bytebuddy.asm.Advice$Dispatcher$RelocationHandler$ForValue$Bound +net.bytebuddy.asm.Advice$Dispatcher$RelocationHandler$Relocation$ForLabel +net.bytebuddy.asm.Advice$Dispatcher$Inlining$Resolved$AdviceMethodInliner$ExceptionTableCollector +net.bytebuddy.asm.Advice$ArgumentHandler$ForAdvice$Default +net.bytebuddy.asm.Advice$ArgumentHandler$ForAdvice$Default$ForMethodEnter +net.bytebuddy.asm.Advice$MethodSizeHandler$Default$ForAdvice +net.bytebuddy.asm.Advice$StackMapFrameHandler$Default$ForAdvice +net.bytebuddy.asm.Advice$StackMapFrameHandler$Default$TranslationMode +net.bytebuddy.asm.Advice$StackMapFrameHandler$Default$TranslationMode$1 +net.bytebuddy.asm.Advice$StackMapFrameHandler$Default$TranslationMode$2 +net.bytebuddy.asm.Advice$StackMapFrameHandler$Default$TranslationMode$3 +net.bytebuddy.asm.Advice$StackMapFrameHandler$Default$Initialization +net.bytebuddy.asm.Advice$StackMapFrameHandler$Default$Initialization$1 +net.bytebuddy.asm.Advice$StackMapFrameHandler$Default$Initialization$2 +net.bytebuddy.asm.Advice$OffsetMapping$Sort +net.bytebuddy.asm.Advice$OffsetMapping$Sort$1 +net.bytebuddy.asm.Advice$OffsetMapping$Sort$2 +net.bytebuddy.asm.Advice$OffsetMapping$Target$ForStackManipulation +net.bytebuddy.asm.Advice$OffsetMapping$Target$ForVariable +net.bytebuddy.asm.Advice$OffsetMapping$Target$ForVariable$ReadOnly +net.bytebuddy.implementation.bytecode.constant.MethodConstant +net.bytebuddy.implementation.bytecode.constant.MethodConstant$CanCache +net.bytebuddy.implementation.bytecode.constant.MethodConstant$ForMethod +net.bytebuddy.asm.Advice$OffsetMapping$Target$ForArray +net.bytebuddy.asm.Advice$OffsetMapping$Target$ForArray$ReadOnly +net.bytebuddy.implementation.bytecode.constant.ClassConstant +net.bytebuddy.implementation.bytecode.constant.ClassConstant$ForReferenceType +net.bytebuddy.implementation.bytecode.collection.CollectionFactory +net.bytebuddy.implementation.bytecode.collection.ArrayFactory +net.bytebuddy.implementation.bytecode.collection.ArrayFactory$ArrayCreator +net.bytebuddy.implementation.bytecode.collection.ArrayFactory$ArrayCreator$ForReferenceType +net.bytebuddy.implementation.bytecode.collection.ArrayFactory$ArrayStackManipulation +net.bytebuddy.implementation.bytecode.constant.IntegerConstant +net.bytebuddy.jar.asm.Opcodes +net.bytebuddy.asm.Advice$ArgumentHandler$ForAdvice$Default$ForMethodExit +net.bytebuddy.implementation.bytecode.assign.TypeCasting +net.bytebuddy.asm.Advice$OffsetMapping$Target$ForVariable$ReadWrite +net.bytebuddy.implementation.bytecode.member.MethodVariableAccess$OffsetWriting +net.bytebuddy.implementation.bytecode.StackSize$1 +net.bytebuddy.description.field.FieldList$Explicit +net.bytebuddy.dynamic.scaffold.TypeWriter$Default$ForInlining$WithFullProcessing$InitializationHandler$Appending +net.bytebuddy.dynamic.scaffold.TypeWriter$Default$ForInlining$WithFullProcessing$InitializationHandler$Appending$WithDrain +net.bytebuddy.dynamic.scaffold.TypeWriter$Default$ForInlining$WithFullProcessing$InitializationHandler$Appending$WithDrain$WithActiveRecord +net.bytebuddy.dynamic.scaffold.TypeWriter$Default$ForInlining$WithFullProcessing$InitializationHandler$Appending$WithDrain$WithoutActiveRecord +net.bytebuddy.dynamic.scaffold.TypeWriter$Default$ForInlining$WithFullProcessing$InitializationHandler$Appending$WithoutDrain +net.bytebuddy.dynamic.scaffold.TypeWriter$Default$ForInlining$WithFullProcessing$InitializationHandler$Appending$WithoutDrain$WithActiveRecord +net.bytebuddy.dynamic.scaffold.TypeWriter$Default$ForInlining$WithFullProcessing$InitializationHandler$Appending$WithoutDrain$WithoutActiveRecord +net.bytebuddy.dynamic.scaffold.TypeWriter$Default$ForInlining$WithFullProcessing$InitializationHandler$Appending$FrameWriter +net.bytebuddy.dynamic.scaffold.TypeWriter$Default$ForInlining$WithFullProcessing$InitializationHandler$Appending$FrameWriter$NoOp +software.amazon.lambda.powertools.metadata.internal.LambdaMetadataHttpClient +net.bytebuddy.description.type.TypeDescription$Generic$OfParameterizedType$ForLoadedType$ParameterArgumentTypeList +net.bytebuddy.description.type.TypeDescription$Generic$AnnotationReader$ForTypeArgument +net.bytebuddy.description.type.TypeDescription$Generic$AnnotationReader$ForTypeArgument$AnnotatedParameterizedType +java.lang.reflect.AnnotatedParameterizedType +net.bytebuddy.description.type.$Proxy73 +net.bytebuddy.description.type.TypeDescription$Generic$OfWildcardType +net.bytebuddy.description.type.TypeDescription$Generic$OfWildcardType$ForLoadedType +net.bytebuddy.description.type.TypeDescription$Generic$OfWildcardType$Latent +net.bytebuddy.description.type.TypeDescription$Generic$OfWildcardType$ForLoadedType$WildcardUpperBoundTypeList +net.bytebuddy.description.type.TypeDescription$Generic$AnnotationReader$ForWildcardUpperBoundType +net.bytebuddy.description.type.TypeDescription$Generic$AnnotationReader$ForWildcardUpperBoundType$AnnotatedWildcardType +java.lang.reflect.AnnotatedWildcardType +net.bytebuddy.description.type.$Proxy74 +net.bytebuddy.description.type.TypeDescription$Generic$OfWildcardType$ForLoadedType$WildcardLowerBoundTypeList +net.bytebuddy.description.type.TypeDescription$Generic$OfParameterizedType$Latent +java.lang.invoke.LambdaForm$MH/0x00003fc0014f4000 +net.bytebuddy.implementation.bytecode.assign.primitive.PrimitiveBoxingDelegate +net.bytebuddy.implementation.bytecode.assign.primitive.PrimitiveBoxingDelegate$BoxingStackManipulation +net.bytebuddy.implementation.bytecode.constant.DefaultValue +net.bytebuddy.implementation.bytecode.constant.LongConstant +net.bytebuddy.implementation.bytecode.constant.FloatConstant +net.bytebuddy.implementation.bytecode.constant.DoubleConstant +net.bytebuddy.implementation.bytecode.constant.NullConstant +net.bytebuddy.implementation.bytecode.Removal$2 +java.lang.Object +net.bytebuddy.TypeCache$StorageKey +org.mockito.plugins.MemberAccessor$OnConstruction +org.mockito.plugins.MemberAccessor$ConstructionDispatcher +org.mockito.internal.creation.bytebuddy.InlineDelegateByteBuddyMockMaker$$Lambda/0x00003fc0014f6460 +java.lang.invoke.LambdaForm$MH/0x00003fc0014f4400 +java.lang.invoke.LambdaForm$MH/0x00003fc0014f4800 +java.lang.invoke.LambdaForm$MH/0x00003fc0014f4c00 +java.lang.invoke.LambdaForm$MH/0x00003fc0014f5000 +java.lang.invoke.LambdaForm$MH/0x00003fc0014f5400 +org.mockito.internal.util.reflection.InstrumentationMemberAccessor$$Lambda/0x00003fc0014f6690 +org.mockito.invocation.Invocation +org.mockito.internal.creation.bytebuddy.ByteBuddyCrossClassLoaderSerializationSupport +org.mockito.exceptions.base.MockitoSerializationIssue +org.mockito.internal.progress.ThreadSafeMockingProgress +org.mockito.internal.progress.ThreadSafeMockingProgress$1 +org.mockito.internal.progress.MockingProgress +org.mockito.internal.progress.MockingProgressImpl +org.mockito.verification.VerificationStrategy +org.mockito.internal.progress.ArgumentMatcherStorage +org.mockito.internal.progress.ArgumentMatcherStorageImpl +org.mockito.internal.progress.MockingProgressImpl$1 +org.crac.Resource +software.amazon.lambda.powertools.metadata.LambdaMetadataClient +org.crac.Core +org.crac.Context +org.crac.GlobalContextWrapper +org.crac.Core$Compat +org.crac.CheckpointException +org.crac.RestoreException +org.mockito.internal.creation.bytebuddy.MockMethodAdvice$RealMethodCall +org.mockito.internal.invocation.mockref.MockReference +org.mockito.internal.invocation.mockref.MockWeakReference +org.mockito.internal.creation.bytebuddy.MockMethodAdvice$ReturnValueWrapper +org.mockito.internal.debugging.LocationFactory +org.mockito.internal.debugging.LocationFactory$Factory +org.mockito.internal.util.Platform +org.mockito.internal.debugging.LocationFactory$DefaultLocationFactory +org.mockito.invocation.Location +org.mockito.internal.debugging.LocationImpl +org.mockito.exceptions.stacktrace.StackTraceCleaner +org.mockito.exceptions.stacktrace.StackTraceCleaner$StackFrameMetadata +org.mockito.internal.exceptions.stacktrace.DefaultStackTraceCleaner +org.mockito.internal.debugging.LocationImpl$$Lambda/0x00003fc0014fa940 +org.mockito.internal.debugging.LocationImpl$$Lambda/0x00003fc0014fab88 +org.mockito.internal.debugging.LocationImpl$$Lambda/0x00003fc0014fade8 +java.lang.StackStreamFactory +java.lang.StackWalker$ExtendedOption +java.lang.StackStreamFactory$StackFrameTraverser +java.lang.StackStreamFactory$WalkerState +java.lang.StackStreamFactory$FrameBuffer +java.lang.StackStreamFactory$StackFrameBuffer +org.mockito.internal.debugging.LocationImpl$$Lambda/0x00003fc0014fb030 +org.mockito.internal.debugging.LocationImpl$MetadataShim +org.mockito.internal.debugging.LocationImpl$$Lambda/0x00003fc0014fb4c0 +org.mockito.internal.debugging.LocationImpl$$Lambda/0x00003fc0014fb708 +org.mockito.invocation.InvocationFactory +org.mockito.internal.invocation.DefaultInvocationFactory +org.mockito.internal.invocation.AbstractAwareMethod +org.mockito.internal.invocation.MockitoMethod +org.mockito.internal.exceptions.VerificationAwareInvocation +org.mockito.internal.invocation.InterceptedInvocation +org.mockito.internal.invocation.InterceptedInvocation$1 +org.mockito.internal.creation.DelegatingMethod +org.mockito.internal.creation.SuspendMethod +org.mockito.internal.progress.SequenceNumber +org.mockito.internal.invocation.ArgumentsProcessor +org.mockito.internal.invocation.InvocationMatcher +org.mockito.internal.invocation.ArgumentMatcherAction +org.mockito.internal.stubbing.BaseStubbing +org.mockito.internal.stubbing.OngoingStubbingImpl +org.mockito.internal.listeners.StubbingLookupNotifier +org.mockito.listeners.StubbingLookupEvent +org.mockito.internal.util.ObjectMethodsGuru +org.mockito.internal.util.Primitives +java.util.stream.DoubleStream +java.util.stream.LongStream +java.util.OptionalDouble +java.util.OptionalInt +java.util.OptionalLong +org.mockito.internal.stubbing.answers.DefaultAnswerValidator +org.mockito.internal.stubbing.answers.InvocationInfo +java.lang.invoke.LambdaForm$MH/0x00003fc001500000 +org.mockito.internal.stubbing.answers.Returns +org.mockito.internal.util.reflection.GenericMetadataSupport +org.mockito.internal.util.reflection.GenericMetadataSupport$GenericArrayReturnType +org.mockito.internal.util.reflection.GenericMetadataSupport$FromClassGenericMetadataSupport +org.mockito.internal.util.reflection.GenericMetadataSupport$FromParameterizedTypeGenericMetadataSupport +org.mockito.internal.util.reflection.GenericMetadataSupport$BoundedType +org.mockito.internal.util.reflection.GenericMetadataSupport$NotGenericReturnTypeSupport +org.mockito.internal.util.reflection.GenericMetadataSupport$ParameterizedReturnType +org.mockito.internal.util.reflection.GenericMetadataSupport$TypeVariableReturnType +org.mockito.internal.util.Checks +org.mockito.internal.stubbing.StubbedInvocationMatcher +org.mockito.internal.stubbing.ConsecutiveStubbing +software.amazon.lambda.powertools.metadata.LambdaMetadataClientConcurrencyTest$$Lambda/0x00003fc0015047e8 +org.mockito.internal.invocation.MatcherApplicationStrategy +org.mockito.internal.invocation.TypeSafeMatching +org.mockito.internal.invocation.StubInfoImpl +org.mockito.internal.invocation.InvocationMatcher$1 +org.mockito.internal.util.KotlinInlineClassUtil +org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor$$Lambda/0x00003fc0015054f0 +org.junit.jupiter.engine.extension.TimeoutExtension$$Lambda/0x00003fc001505718 +org.junit.jupiter.engine.extension.TimeoutConfiguration$$Lambda/0x00003fc001505978 +org.mockito.internal.verification.VerificationModeFactory +org.mockito.internal.verification.api.VerificationInOrderMode +org.mockito.internal.verification.Times +org.mockito.internal.util.DefaultMockingDetails +org.mockito.internal.listeners.VerificationStartedNotifier +org.mockito.listeners.VerificationStartedEvent +org.mockito.internal.verification.MockAwareVerificationMode +org.mockito.verification.VerificationEvent +org.mockito.internal.debugging.Localized +org.mockito.internal.verification.VerificationDataImpl +java.util.LinkedList$LLSpliterator +org.mockito.internal.verification.DefaultRegisteredInvocations$$Lambda/0x00003fc0015071a8 +org.mockito.internal.verification.checkers.MissingInvocationChecker +org.mockito.exceptions.base.MockitoAssertionError +org.mockito.internal.invocation.InvocationsFinder +org.mockito.internal.invocation.InvocationsFinder$$Lambda/0x00003fc001507a90 +org.mockito.internal.verification.checkers.NumberOfInvocationsChecker +org.mockito.internal.invocation.InvocationMarker +org.mockito.internal.verification.VerificationEventImpl +org.mockito.internal.stubbing.answers.AbstractThrowsException +org.mockito.internal.stubbing.answers.ThrowsException +org.mockito.internal.exceptions.stacktrace.ConditionalStackTraceFilter +org.mockito.internal.exceptions.stacktrace.StackTraceFilter +software.amazon.lambda.powertools.metadata.LambdaMetadataClientTest$$Lambda/0x00003fc001502d80 +java.lang.StackTraceElement$HashedModules +org.junit.platform.launcher.core.OutcomeDelayingEngineExecutionListener$Outcome +org.junit.platform.launcher.core.CompositeTestExecutionListener$$Lambda/0x00003fc0015033f8 +org.junit.platform.launcher.core.CompositeTestExecutionListener$$Lambda/0x00003fc001503638 +org.junit.platform.launcher.core.EngineExecutionOrchestrator$$Lambda/0x00003fc001503868 +org.junit.platform.launcher.core.DefaultLauncherSession$ClosedLauncher +org.apache.maven.surefire.api.suite.RunResult +org.apache.maven.surefire.booter.ForkedBooter$6 +org.apache.maven.surefire.booter.ForkedBooter$7 +org.apache.maven.surefire.booter.ForkedBooter$1 +org.apache.maven.surefire.booter.spi.AbstractMasterProcessChannelProcessorFactory$2 diff --git a/powertools-lambda-metadata/src/test/java/software/amazon/lambda/powertools/metadata/LambdaMetadataClientConcurrencyTest.java b/powertools-lambda-metadata/src/test/java/software/amazon/lambda/powertools/metadata/LambdaMetadataClientConcurrencyTest.java new file mode 100644 index 000000000..a41aebd4d --- /dev/null +++ b/powertools-lambda-metadata/src/test/java/software/amazon/lambda/powertools/metadata/LambdaMetadataClientConcurrencyTest.java @@ -0,0 +1,84 @@ +/* + * Copyright 2023 Amazon.com, Inc. or its affiliates. + * Licensed under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * 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. + * + */ + +package software.amazon.lambda.powertools.metadata; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.Future; +import java.util.concurrent.TimeUnit; + +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import software.amazon.lambda.powertools.metadata.internal.LambdaMetadataHttpClient; + +class LambdaMetadataClientConcurrencyTest { + + private LambdaMetadataHttpClient mockHttpClient; + + @BeforeEach + void setUp() { + mockHttpClient = mock(LambdaMetadataHttpClient.class); + LambdaMetadataClient.setHttpClient(mockHttpClient); + } + + @AfterEach + void tearDown() { + LambdaMetadataClient.resetCache(); + } + + @Test + void get_shouldBeThreadSafe() throws Exception { + // Given + LambdaMetadata metadata = new LambdaMetadata("use1-az1"); + when(mockHttpClient.fetchMetadata()).thenReturn(metadata); + + int threadCount = 10; + ExecutorService executor = Executors.newFixedThreadPool(threadCount); + CountDownLatch startLatch = new CountDownLatch(1); + List> futures = new ArrayList<>(); + + // When - all threads try to get metadata simultaneously + for (int i = 0; i < threadCount; i++) { + futures.add(executor.submit(() -> { + startLatch.await(); + return LambdaMetadataClient.get(); + })); + } + startLatch.countDown(); + + // Then - all threads should get the same instance + LambdaMetadata firstResult = null; + for (Future future : futures) { + LambdaMetadata result = future.get(5, TimeUnit.SECONDS); + if (firstResult == null) { + firstResult = result; + } + assertThat(result).isSameAs(firstResult); + assertThat(result.getAvailabilityZoneId()).isEqualTo("use1-az1"); + } + + executor.shutdown(); + executor.awaitTermination(5, TimeUnit.SECONDS); + } +} diff --git a/powertools-lambda-metadata/src/test/java/software/amazon/lambda/powertools/metadata/LambdaMetadataClientTest.java b/powertools-lambda-metadata/src/test/java/software/amazon/lambda/powertools/metadata/LambdaMetadataClientTest.java new file mode 100644 index 000000000..822201ba0 --- /dev/null +++ b/powertools-lambda-metadata/src/test/java/software/amazon/lambda/powertools/metadata/LambdaMetadataClientTest.java @@ -0,0 +1,128 @@ +/* + * Copyright 2023 Amazon.com, Inc. or its affiliates. + * Licensed under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * 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. + * + */ + +package software.amazon.lambda.powertools.metadata; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import software.amazon.lambda.powertools.metadata.exception.LambdaMetadataException; +import software.amazon.lambda.powertools.metadata.internal.LambdaMetadataHttpClient; + +class LambdaMetadataClientTest { + + private LambdaMetadataHttpClient mockHttpClient; + + @BeforeEach + void setUp() { + mockHttpClient = mock(LambdaMetadataHttpClient.class); + LambdaMetadataClient.setHttpClient(mockHttpClient); + } + + @AfterEach + void tearDown() { + LambdaMetadataClient.resetCache(); + } + + @Test + void get_shouldReturnMetadata() { + // Given + LambdaMetadata metadata = new LambdaMetadata("use1-az1"); + when(mockHttpClient.fetchMetadata()).thenReturn(metadata); + + // When + LambdaMetadata result = LambdaMetadataClient.get(); + + // Then + assertThat(result).isNotNull(); + assertThat(result.getAvailabilityZoneId()).isEqualTo("use1-az1"); + } + + @Test + void get_shouldCacheMetadata() { + // Given + LambdaMetadata metadata = new LambdaMetadata("use1-az1"); + when(mockHttpClient.fetchMetadata()).thenReturn(metadata); + + // When + LambdaMetadata first = LambdaMetadataClient.get(); + LambdaMetadata second = LambdaMetadataClient.get(); + + // Then + assertThat(first).isSameAs(second); + verify(mockHttpClient, times(1)).fetchMetadata(); + } + + @Test + void refresh_shouldFetchNewMetadata() { + // Given + LambdaMetadata metadata1 = new LambdaMetadata("use1-az1"); + LambdaMetadata metadata2 = new LambdaMetadata("use1-az2"); + when(mockHttpClient.fetchMetadata()) + .thenReturn(metadata1) + .thenReturn(metadata2); + + // When + LambdaMetadata first = LambdaMetadataClient.get(); + LambdaMetadata refreshed = LambdaMetadataClient.refresh(); + + // Then + assertThat(first.getAvailabilityZoneId()).isEqualTo("use1-az1"); + assertThat(refreshed.getAvailabilityZoneId()).isEqualTo("use1-az2"); + verify(mockHttpClient, times(2)).fetchMetadata(); + } + + @Test + void get_shouldThrowExceptionOnError() { + // Given + when(mockHttpClient.fetchMetadata()) + .thenThrow(new LambdaMetadataException("Test error")); + + // When/Then + assertThatThrownBy(LambdaMetadataClient::get) + .isInstanceOf(LambdaMetadataException.class) + .hasMessage("Test error"); + } + + @Test + void afterRestore_shouldInvalidateCache() { + // Given + LambdaMetadata metadata1 = new LambdaMetadata("use1-az1"); + LambdaMetadata metadata2 = new LambdaMetadata("use1-az2"); + when(mockHttpClient.fetchMetadata()) + .thenReturn(metadata1) + .thenReturn(metadata2); + + // When + LambdaMetadata first = LambdaMetadataClient.get(); + + // Simulate SnapStart restore + LambdaMetadataClient.resetCache(); + + LambdaMetadata afterRestore = LambdaMetadataClient.get(); + + // Then + assertThat(first.getAvailabilityZoneId()).isEqualTo("use1-az1"); + assertThat(afterRestore.getAvailabilityZoneId()).isEqualTo("use1-az2"); + verify(mockHttpClient, times(2)).fetchMetadata(); + } +} diff --git a/powertools-lambda-metadata/src/test/java/software/amazon/lambda/powertools/metadata/LambdaMetadataTest.java b/powertools-lambda-metadata/src/test/java/software/amazon/lambda/powertools/metadata/LambdaMetadataTest.java new file mode 100644 index 000000000..f391434ea --- /dev/null +++ b/powertools-lambda-metadata/src/test/java/software/amazon/lambda/powertools/metadata/LambdaMetadataTest.java @@ -0,0 +1,68 @@ +/* + * Copyright 2023 Amazon.com, Inc. or its affiliates. + * Licensed under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * 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. + * + */ + +package software.amazon.lambda.powertools.metadata; + +import static org.assertj.core.api.Assertions.assertThat; + +import org.junit.jupiter.api.Test; + +import com.fasterxml.jackson.databind.ObjectMapper; + +class LambdaMetadataTest { + + private final ObjectMapper objectMapper = new ObjectMapper(); + + @Test + void defaultConstructor_shouldCreateInstanceWithNullValues() { + // When + LambdaMetadata metadata = new LambdaMetadata(); + + // Then + assertThat(metadata.getAvailabilityZoneId()).isNull(); + } + + @Test + void constructor_withAvailabilityZoneId_shouldSetValue() { + // When + LambdaMetadata metadata = new LambdaMetadata("use1-az1"); + + // Then + assertThat(metadata.getAvailabilityZoneId()).isEqualTo("use1-az1"); + } + + @Test + void deserialize_shouldMapJsonProperty() throws Exception { + // Given + String json = "{\"AvailabilityZoneID\": \"euw1-az3\"}"; + + // When + LambdaMetadata metadata = objectMapper.readValue(json, LambdaMetadata.class); + + // Then + assertThat(metadata.getAvailabilityZoneId()).isEqualTo("euw1-az3"); + } + + @Test + void deserialize_shouldIgnoreUnknownFields() throws Exception { + // Given + String json = "{\"AvailabilityZoneID\": \"apne1-az1\", \"UnknownField\": \"value\", \"AnotherField\": 123}"; + + // When + LambdaMetadata metadata = objectMapper.readValue(json, LambdaMetadata.class); + + // Then + assertThat(metadata.getAvailabilityZoneId()).isEqualTo("apne1-az1"); + } +} diff --git a/powertools-lambda-metadata/src/test/java/software/amazon/lambda/powertools/metadata/exception/LambdaMetadataExceptionTest.java b/powertools-lambda-metadata/src/test/java/software/amazon/lambda/powertools/metadata/exception/LambdaMetadataExceptionTest.java new file mode 100644 index 000000000..edc1a98db --- /dev/null +++ b/powertools-lambda-metadata/src/test/java/software/amazon/lambda/powertools/metadata/exception/LambdaMetadataExceptionTest.java @@ -0,0 +1,58 @@ +/* + * Copyright 2023 Amazon.com, Inc. or its affiliates. + * Licensed under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * 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. + * + */ + +package software.amazon.lambda.powertools.metadata.exception; + +import static org.assertj.core.api.Assertions.assertThat; + +import org.junit.jupiter.api.Test; + +class LambdaMetadataExceptionTest { + + @Test + void constructor_withMessage_shouldSetMessage() { + // When + LambdaMetadataException exception = new LambdaMetadataException("Test message"); + + // Then + assertThat(exception.getMessage()).isEqualTo("Test message"); + assertThat(exception.getStatusCode()).isEqualTo(-1); + assertThat(exception.getCause()).isNull(); + } + + @Test + void constructor_withMessageAndCause_shouldSetBoth() { + // Given + Throwable cause = new RuntimeException("Root cause"); + + // When + LambdaMetadataException exception = new LambdaMetadataException("Test message", cause); + + // Then + assertThat(exception.getMessage()).isEqualTo("Test message"); + assertThat(exception.getCause()).isSameAs(cause); + assertThat(exception.getStatusCode()).isEqualTo(-1); + } + + @Test + void constructor_withMessageAndStatusCode_shouldSetBoth() { + // When + LambdaMetadataException exception = new LambdaMetadataException("Test message", 500); + + // Then + assertThat(exception.getMessage()).isEqualTo("Test message"); + assertThat(exception.getStatusCode()).isEqualTo(500); + assertThat(exception.getCause()).isNull(); + } +} diff --git a/powertools-lambda-metadata/src/test/java/software/amazon/lambda/powertools/metadata/internal/LambdaMetadataHttpClientTest.java b/powertools-lambda-metadata/src/test/java/software/amazon/lambda/powertools/metadata/internal/LambdaMetadataHttpClientTest.java new file mode 100644 index 000000000..f8030500b --- /dev/null +++ b/powertools-lambda-metadata/src/test/java/software/amazon/lambda/powertools/metadata/internal/LambdaMetadataHttpClientTest.java @@ -0,0 +1,170 @@ +/* + * Copyright 2023 Amazon.com, Inc. or its affiliates. + * Licensed under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * 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. + * + */ + +package software.amazon.lambda.powertools.metadata.internal; + +import static com.github.tomakehurst.wiremock.client.WireMock.aResponse; +import static com.github.tomakehurst.wiremock.client.WireMock.equalTo; +import static com.github.tomakehurst.wiremock.client.WireMock.get; +import static com.github.tomakehurst.wiremock.client.WireMock.stubFor; +import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; + +import org.junit.jupiter.api.Test; + +import com.github.tomakehurst.wiremock.junit5.WireMockRuntimeInfo; +import com.github.tomakehurst.wiremock.junit5.WireMockTest; + +import software.amazon.lambda.powertools.metadata.LambdaMetadata; +import software.amazon.lambda.powertools.metadata.exception.LambdaMetadataException; + +@WireMockTest +class LambdaMetadataHttpClientTest { + + private static final String TEST_TOKEN = "test-token-12345"; + private static final String METADATA_PATH = "/2026-01-15/metadata/execution-environment"; + + @Test + void fetchMetadata_shouldReturnMetadata(WireMockRuntimeInfo wmRuntimeInfo) { + // Given + stubFor(get(urlEqualTo(METADATA_PATH)) + .withHeader("Authorization", equalTo("Bearer " + TEST_TOKEN)) + .willReturn(aResponse() + .withStatus(200) + .withHeader("Content-Type", "application/json") + .withBody("{\"AvailabilityZoneID\": \"use1-az1\"}"))); + + LambdaMetadataHttpClient client = createClient(wmRuntimeInfo); + + // When + LambdaMetadata metadata = client.fetchMetadata(); + + // Then + assertThat(metadata).isNotNull(); + assertThat(metadata.getAvailabilityZoneId()).isEqualTo("use1-az1"); + } + + @Test + void fetchMetadata_shouldHandleUnknownFields(WireMockRuntimeInfo wmRuntimeInfo) { + // Given - response with extra fields that should be ignored + stubFor(get(urlEqualTo(METADATA_PATH)) + .withHeader("Authorization", equalTo("Bearer " + TEST_TOKEN)) + .willReturn(aResponse() + .withStatus(200) + .withHeader("Content-Type", "application/json") + .withBody("{\"AvailabilityZoneID\": \"use1-az2\", \"FutureField\": \"value\"}"))); + + LambdaMetadataHttpClient client = createClient(wmRuntimeInfo); + + // When + LambdaMetadata metadata = client.fetchMetadata(); + + // Then + assertThat(metadata).isNotNull(); + assertThat(metadata.getAvailabilityZoneId()).isEqualTo("use1-az2"); + } + + @Test + void fetchMetadata_shouldThrowOnNon200Status(WireMockRuntimeInfo wmRuntimeInfo) { + // Given + stubFor(get(urlEqualTo(METADATA_PATH)) + .willReturn(aResponse() + .withStatus(500) + .withBody("Internal Server Error"))); + + LambdaMetadataHttpClient client = createClient(wmRuntimeInfo); + + // When/Then + assertThatThrownBy(client::fetchMetadata) + .isInstanceOf(LambdaMetadataException.class) + .hasMessageContaining("status 500") + .satisfies(e -> { + LambdaMetadataException ex = (LambdaMetadataException) e; + assertThat(ex.getStatusCode()).isEqualTo(500); + }); + } + + @Test + void fetchMetadata_shouldThrowOnMissingToken() { + // Given + LambdaMetadataHttpClient client = new LambdaMetadataHttpClient() { + @Override + String getRequiredEnvironmentVariable(String name) { + if (LambdaMetadataHttpClient.ENV_METADATA_API.equals(name)) { + return "localhost:8080"; + } + return super.getRequiredEnvironmentVariable(name); + } + }; + + // When/Then + assertThatThrownBy(client::fetchMetadata) + .isInstanceOf(LambdaMetadataException.class) + .hasMessageContaining(LambdaMetadataHttpClient.ENV_METADATA_TOKEN); + } + + @Test + void fetchMetadata_shouldThrowOnMissingApi() { + // Given + LambdaMetadataHttpClient client = new LambdaMetadataHttpClient() { + @Override + String getRequiredEnvironmentVariable(String name) { + if (LambdaMetadataHttpClient.ENV_METADATA_TOKEN.equals(name)) { + return TEST_TOKEN; + } + return super.getRequiredEnvironmentVariable(name); + } + }; + + // When/Then + assertThatThrownBy(client::fetchMetadata) + .isInstanceOf(LambdaMetadataException.class) + .hasMessageContaining(LambdaMetadataHttpClient.ENV_METADATA_API); + } + + @Test + void fetchMetadata_shouldThrowOn404(WireMockRuntimeInfo wmRuntimeInfo) { + // Given + stubFor(get(urlEqualTo(METADATA_PATH)) + .willReturn(aResponse() + .withStatus(404) + .withBody("Not Found"))); + + LambdaMetadataHttpClient client = createClient(wmRuntimeInfo); + + // When/Then + assertThatThrownBy(client::fetchMetadata) + .isInstanceOf(LambdaMetadataException.class) + .satisfies(e -> { + LambdaMetadataException ex = (LambdaMetadataException) e; + assertThat(ex.getStatusCode()).isEqualTo(404); + }); + } + + private LambdaMetadataHttpClient createClient(WireMockRuntimeInfo wmRuntimeInfo) { + return new LambdaMetadataHttpClient() { + @Override + String getRequiredEnvironmentVariable(String name) { + if (LambdaMetadataHttpClient.ENV_METADATA_TOKEN.equals(name)) { + return TEST_TOKEN; + } + if (LambdaMetadataHttpClient.ENV_METADATA_API.equals(name)) { + return "localhost:" + wmRuntimeInfo.getHttpPort(); + } + return super.getRequiredEnvironmentVariable(name); + } + }; + } +} From 761ed10cf502ba3f0c966647c92fc7e368c1cd70 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 19 Mar 2026 13:58:46 +0100 Subject: [PATCH 125/202] chore(ci): bump version to 2.10.0 (#2429) * chore(ci): bump version to 2.10.0 * Restore CHANGELOG.md from main. --------- Co-authored-by: Powertools for AWS Lambda (Java) Bot <151832416+aws-powertools-bot@users.noreply.github.com> Co-authored-by: Philipp Page --- README.md | 6 +++--- examples/pom.xml | 2 +- examples/powertools-examples-batch/pom.xml | 2 +- examples/powertools-examples-cloudformation/README.md | 4 ++-- .../infra/sam-graalvm/README.md | 2 +- examples/powertools-examples-cloudformation/pom.xml | 2 +- examples/powertools-examples-core-utilities/cdk/app/pom.xml | 2 +- .../powertools-examples-core-utilities/cdk/infra/pom.xml | 2 +- .../powertools-examples-core-utilities/gradle/build.gradle | 6 +++--- .../kotlin/build.gradle.kts | 6 +++--- .../powertools-examples-core-utilities/sam-graalvm/pom.xml | 2 +- examples/powertools-examples-core-utilities/sam/pom.xml | 2 +- .../powertools-examples-core-utilities/serverless/pom.xml | 2 +- .../powertools-examples-core-utilities/terraform/pom.xml | 2 +- .../powertools-examples-idempotency/sam-graalvm/pom.xml | 2 +- examples/powertools-examples-idempotency/sam/pom.xml | 2 +- examples/powertools-examples-kafka/pom.xml | 2 +- examples/powertools-examples-parameters/sam-graalvm/pom.xml | 2 +- examples/powertools-examples-parameters/sam/pom.xml | 2 +- .../powertools-examples-serialization/sam-graalvm/pom.xml | 2 +- examples/powertools-examples-serialization/sam/pom.xml | 2 +- examples/powertools-examples-validation/pom.xml | 2 +- mkdocs.yml | 2 +- pom.xml | 2 +- powertools-batch/pom.xml | 2 +- powertools-cloudformation/pom.xml | 2 +- powertools-common/pom.xml | 2 +- powertools-e2e-tests/handlers/batch/pom.xml | 2 +- .../handlers/idempotency-functional/pom.xml | 2 +- powertools-e2e-tests/handlers/idempotency-generics/pom.xml | 2 +- powertools-e2e-tests/handlers/idempotency/pom.xml | 2 +- powertools-e2e-tests/handlers/lambda-metadata/pom.xml | 2 +- .../handlers/largemessage-functional/pom.xml | 2 +- powertools-e2e-tests/handlers/largemessage/pom.xml | 2 +- .../handlers/largemessage_idempotent/pom.xml | 2 +- powertools-e2e-tests/handlers/logging-functional/pom.xml | 2 +- .../handlers/logging-log4j-fluent-api/pom.xml | 2 +- powertools-e2e-tests/handlers/logging-log4j/pom.xml | 2 +- .../handlers/logging-logback-fluent-api/pom.xml | 2 +- powertools-e2e-tests/handlers/logging-logback/pom.xml | 2 +- powertools-e2e-tests/handlers/metrics/pom.xml | 2 +- powertools-e2e-tests/handlers/parameters/pom.xml | 2 +- powertools-e2e-tests/handlers/pom.xml | 2 +- powertools-e2e-tests/handlers/tracing/pom.xml | 2 +- powertools-e2e-tests/handlers/validation-alb-event/pom.xml | 2 +- .../handlers/validation-apigw-event/pom.xml | 2 +- powertools-e2e-tests/pom.xml | 2 +- powertools-idempotency/pom.xml | 2 +- powertools-idempotency/powertools-idempotency-core/pom.xml | 2 +- .../powertools-idempotency-dynamodb/pom.xml | 2 +- powertools-kafka/pom.xml | 2 +- powertools-lambda-metadata/pom.xml | 2 +- powertools-large-messages/pom.xml | 2 +- powertools-logging/pom.xml | 2 +- powertools-logging/powertools-logging-log4j/pom.xml | 2 +- powertools-logging/powertools-logging-logback/pom.xml | 2 +- powertools-metrics/pom.xml | 2 +- powertools-parameters/pom.xml | 2 +- .../powertools-parameters-appconfig/pom.xml | 2 +- .../powertools-parameters-dynamodb/pom.xml | 2 +- powertools-parameters/powertools-parameters-secrets/pom.xml | 2 +- powertools-parameters/powertools-parameters-ssm/pom.xml | 2 +- powertools-parameters/powertools-parameters-tests/pom.xml | 2 +- powertools-serialization/pom.xml | 2 +- powertools-tracing/pom.xml | 2 +- powertools-validation/pom.xml | 2 +- 66 files changed, 73 insertions(+), 73 deletions(-) diff --git a/README.md b/README.md index 4c02e2d1f..6e5216b4f 100644 --- a/README.md +++ b/README.md @@ -22,17 +22,17 @@ Powertools for AWS Lambda (Java) is available in Maven Central. You can use your software.amazon.lambda powertools-tracing - 2.9.0 + 2.10.0 software.amazon.lambda powertools-logging-log4j - 2.9.0 + 2.10.0 software.amazon.lambda powertools-metrics - 2.9.0 + 2.10.0 ... diff --git a/examples/pom.xml b/examples/pom.xml index 5d191063f..291db92df 100644 --- a/examples/pom.xml +++ b/examples/pom.xml @@ -20,7 +20,7 @@ software.amazon.lambda powertools-examples - 2.9.0 + 2.10.0 pom Powertools for AWS Lambda (Java) - Examples diff --git a/examples/powertools-examples-batch/pom.xml b/examples/powertools-examples-batch/pom.xml index 7d1253d7d..a82dbedae 100644 --- a/examples/powertools-examples-batch/pom.xml +++ b/examples/powertools-examples-batch/pom.xml @@ -5,7 +5,7 @@ 4.0.0 software.amazon.lambda.examples - 2.9.0 + 2.10.0 powertools-examples-batch jar Powertools for AWS Lambda (Java) - Examples - Batch diff --git a/examples/powertools-examples-cloudformation/README.md b/examples/powertools-examples-cloudformation/README.md index 27e564bf3..aff40b331 100644 --- a/examples/powertools-examples-cloudformation/README.md +++ b/examples/powertools-examples-cloudformation/README.md @@ -15,7 +15,7 @@ Run the following in your shell: ```bash cd infra/sam sam build -sam deploy --guided --parameter-overrides BucketNameParam=my-unique-bucket-2.9.0718 +sam deploy --guided --parameter-overrides BucketNameParam=my-unique-bucket-2.10.0718 ``` ### Deploy with CDK @@ -32,5 +32,5 @@ To build and deploy this application for the first time, run the following in yo cd infra/cdk mvn package cdk synth -cdk deploy -c BucketNameParam=my-unique-bucket-2.9.0718 +cdk deploy -c BucketNameParam=my-unique-bucket-2.10.0718 ``` \ No newline at end of file diff --git a/examples/powertools-examples-cloudformation/infra/sam-graalvm/README.md b/examples/powertools-examples-cloudformation/infra/sam-graalvm/README.md index 3aca1408a..d5ae03171 100644 --- a/examples/powertools-examples-cloudformation/infra/sam-graalvm/README.md +++ b/examples/powertools-examples-cloudformation/infra/sam-graalvm/README.md @@ -40,7 +40,7 @@ sam build ## Deploy the sample application ```shell -sam deploy --guided --parameter-overrides BucketNameParam=my-unique-bucket-2.9.0718 +sam deploy --guided --parameter-overrides BucketNameParam=my-unique-bucket-2.10.0718 ``` This sample is based on Serverless Application Model (SAM). To deploy it, check out the instructions for getting started with SAM in [the examples directory](../../../README.md) diff --git a/examples/powertools-examples-cloudformation/pom.xml b/examples/powertools-examples-cloudformation/pom.xml index dc4d5857b..cb1d19bdf 100644 --- a/examples/powertools-examples-cloudformation/pom.xml +++ b/examples/powertools-examples-cloudformation/pom.xml @@ -3,7 +3,7 @@ 4.0.0 software.amazon.lambda.examples - 2.9.0 + 2.10.0 powertools-examples-cloudformation jar diff --git a/examples/powertools-examples-core-utilities/cdk/app/pom.xml b/examples/powertools-examples-core-utilities/cdk/app/pom.xml index c02b73026..ec1f1364b 100644 --- a/examples/powertools-examples-core-utilities/cdk/app/pom.xml +++ b/examples/powertools-examples-core-utilities/cdk/app/pom.xml @@ -6,7 +6,7 @@ software.amazon.lambda.examples - 2.9.0 + 2.10.0 powertools-examples-core-utilities-cdk jar diff --git a/examples/powertools-examples-core-utilities/cdk/infra/pom.xml b/examples/powertools-examples-core-utilities/cdk/infra/pom.xml index f71f446b6..eb4dae3d2 100644 --- a/examples/powertools-examples-core-utilities/cdk/infra/pom.xml +++ b/examples/powertools-examples-core-utilities/cdk/infra/pom.xml @@ -4,7 +4,7 @@ 4.0.0 software.amazon.lambda.examples cdk - 2.9.0 + 2.10.0 UTF-8 2.243.0 diff --git a/examples/powertools-examples-core-utilities/gradle/build.gradle b/examples/powertools-examples-core-utilities/gradle/build.gradle index b01fdcfaa..a228857c8 100644 --- a/examples/powertools-examples-core-utilities/gradle/build.gradle +++ b/examples/powertools-examples-core-utilities/gradle/build.gradle @@ -29,8 +29,8 @@ dependencies { implementation 'com.amazonaws:aws-lambda-java-events:3.16.0' implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.13.2' implementation 'org.aspectj:aspectjrt:1.9.20.1' - aspect 'software.amazon.lambda:powertools-tracing:2.9.0' - aspect 'software.amazon.lambda:powertools-logging-log4j:2.9.0' - aspect 'software.amazon.lambda:powertools-metrics:2.9.0' + aspect 'software.amazon.lambda:powertools-tracing:2.10.0' + aspect 'software.amazon.lambda:powertools-logging-log4j:2.10.0' + aspect 'software.amazon.lambda:powertools-metrics:2.10.0' } diff --git a/examples/powertools-examples-core-utilities/kotlin/build.gradle.kts b/examples/powertools-examples-core-utilities/kotlin/build.gradle.kts index 3dae5015e..7d2a3b831 100644 --- a/examples/powertools-examples-core-utilities/kotlin/build.gradle.kts +++ b/examples/powertools-examples-core-utilities/kotlin/build.gradle.kts @@ -15,9 +15,9 @@ dependencies { implementation("com.amazonaws:aws-lambda-java-events:3.16.0") implementation("com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.15.2") implementation("org.aspectj:aspectjrt:1.9.20.1") - aspect("software.amazon.lambda:powertools-tracing:2.9.0") - aspect("software.amazon.lambda:powertools-logging-log4j:2.9.0") - aspect("software.amazon.lambda:powertools-metrics:2.9.0") + aspect("software.amazon.lambda:powertools-tracing:2.10.0") + aspect("software.amazon.lambda:powertools-logging-log4j:2.10.0") + aspect("software.amazon.lambda:powertools-metrics:2.10.0") implementation("org.jetbrains.kotlin:kotlin-stdlib:1.9.24") } diff --git a/examples/powertools-examples-core-utilities/sam-graalvm/pom.xml b/examples/powertools-examples-core-utilities/sam-graalvm/pom.xml index 57a3663e7..18f245410 100644 --- a/examples/powertools-examples-core-utilities/sam-graalvm/pom.xml +++ b/examples/powertools-examples-core-utilities/sam-graalvm/pom.xml @@ -4,7 +4,7 @@ Powertools for AWS Lambda (Java) - Examples - Core Utilities (logging, tracing, metrics) with SAM GraalVM software.amazon.lambda.examples - 2.9.0 + 2.10.0 powertools-examples-core-utilities-sam-graalvm jar diff --git a/examples/powertools-examples-core-utilities/sam/pom.xml b/examples/powertools-examples-core-utilities/sam/pom.xml index 2d6a00161..7b5d1d87d 100644 --- a/examples/powertools-examples-core-utilities/sam/pom.xml +++ b/examples/powertools-examples-core-utilities/sam/pom.xml @@ -4,7 +4,7 @@ Powertools for AWS Lambda (Java) - Examples - Core Utilities (logging, tracing, metrics) with SAM software.amazon.lambda.examples - 2.9.0 + 2.10.0 powertools-examples-core-utilities-sam jar diff --git a/examples/powertools-examples-core-utilities/serverless/pom.xml b/examples/powertools-examples-core-utilities/serverless/pom.xml index 26e647dad..81aebb078 100644 --- a/examples/powertools-examples-core-utilities/serverless/pom.xml +++ b/examples/powertools-examples-core-utilities/serverless/pom.xml @@ -4,7 +4,7 @@ Powertools for AWS Lambda (Java) - Examples - Core Utilities (logging, tracing, metrics) with Serverless software.amazon.lambda.examples - 2.9.0 + 2.10.0 powertools-examples-core-utilities-serverless jar diff --git a/examples/powertools-examples-core-utilities/terraform/pom.xml b/examples/powertools-examples-core-utilities/terraform/pom.xml index 4de1e415c..92e6b709e 100644 --- a/examples/powertools-examples-core-utilities/terraform/pom.xml +++ b/examples/powertools-examples-core-utilities/terraform/pom.xml @@ -4,7 +4,7 @@ Powertools for AWS Lambda (Java) - Examples - Core Utilities (logging, tracing, metrics) with Terraform software.amazon.lambda.examples - 2.9.0 + 2.10.0 powertools-examples-core-utilities-terraform jar diff --git a/examples/powertools-examples-idempotency/sam-graalvm/pom.xml b/examples/powertools-examples-idempotency/sam-graalvm/pom.xml index dc05bddbe..ca1c1cd41 100644 --- a/examples/powertools-examples-idempotency/sam-graalvm/pom.xml +++ b/examples/powertools-examples-idempotency/sam-graalvm/pom.xml @@ -2,7 +2,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 4.0.0 software.amazon.lambda.examples - 2.9.0 + 2.10.0 powertools-examples-idempotency-sam-graalvm jar Powertools for AWS Lambda (Java) - Examples - Idempotency GraalVM diff --git a/examples/powertools-examples-idempotency/sam/pom.xml b/examples/powertools-examples-idempotency/sam/pom.xml index 22d6a9c81..a206b6885 100644 --- a/examples/powertools-examples-idempotency/sam/pom.xml +++ b/examples/powertools-examples-idempotency/sam/pom.xml @@ -17,7 +17,7 @@ 4.0.0 software.amazon.lambda.examples - 2.9.0 + 2.10.0 powertools-examples-idempotency jar Powertools for AWS Lambda (Java) - Examples - Idempotency diff --git a/examples/powertools-examples-kafka/pom.xml b/examples/powertools-examples-kafka/pom.xml index 70eef52c1..aa76d208d 100644 --- a/examples/powertools-examples-kafka/pom.xml +++ b/examples/powertools-examples-kafka/pom.xml @@ -2,7 +2,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 4.0.0 software.amazon.lambda.examples - 2.9.0 + 2.10.0 powertools-examples-kafka jar Powertools for AWS Lambda (Java) - Examples - Kafka diff --git a/examples/powertools-examples-parameters/sam-graalvm/pom.xml b/examples/powertools-examples-parameters/sam-graalvm/pom.xml index aaea139ee..e525a8260 100644 --- a/examples/powertools-examples-parameters/sam-graalvm/pom.xml +++ b/examples/powertools-examples-parameters/sam-graalvm/pom.xml @@ -2,7 +2,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 4.0.0 software.amazon.lambda.examples - 2.9.0 + 2.10.0 powertools-examples-parameters-sam-graalvm jar Powertools for AWS Lambda (Java) - Examples - Parameters GraalVM diff --git a/examples/powertools-examples-parameters/sam/pom.xml b/examples/powertools-examples-parameters/sam/pom.xml index d59e494f2..64f6519ce 100644 --- a/examples/powertools-examples-parameters/sam/pom.xml +++ b/examples/powertools-examples-parameters/sam/pom.xml @@ -2,7 +2,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 4.0.0 software.amazon.lambda.examples - 2.9.0 + 2.10.0 powertools-examples-parameters-sam jar Powertools for AWS Lambda (Java) - Examples - Parameters diff --git a/examples/powertools-examples-serialization/sam-graalvm/pom.xml b/examples/powertools-examples-serialization/sam-graalvm/pom.xml index 73d02365c..59d9d3811 100644 --- a/examples/powertools-examples-serialization/sam-graalvm/pom.xml +++ b/examples/powertools-examples-serialization/sam-graalvm/pom.xml @@ -2,7 +2,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 4.0.0 software.amazon.lambda.examples - 2.9.0 + 2.10.0 powertools-examples-serialization-sam-graalvm jar Powertools for AWS Lambda (Java) - Examples - Serialization GraalVM diff --git a/examples/powertools-examples-serialization/sam/pom.xml b/examples/powertools-examples-serialization/sam/pom.xml index cf66c3e14..ff85d9814 100644 --- a/examples/powertools-examples-serialization/sam/pom.xml +++ b/examples/powertools-examples-serialization/sam/pom.xml @@ -2,7 +2,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 4.0.0 software.amazon.lambda.examples - 2.9.0 + 2.10.0 powertools-examples-serialization-sam jar Powertools for AWS Lambda (Java) - Examples - Serialization diff --git a/examples/powertools-examples-validation/pom.xml b/examples/powertools-examples-validation/pom.xml index 95f2a064b..e7ecd72af 100644 --- a/examples/powertools-examples-validation/pom.xml +++ b/examples/powertools-examples-validation/pom.xml @@ -16,7 +16,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 4.0.0 software.amazon.lambda.examples - 2.9.0 + 2.10.0 powertools-examples-validation jar Powertools for AWS Lambda (Java) - Examples - Validation diff --git a/mkdocs.yml b/mkdocs.yml index fea59aae0..f19a46f61 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -131,7 +131,7 @@ extra_javascript: extra: powertools: - version: 2.9.0 + version: 2.10.0 version: provider: mike default: latest diff --git a/pom.xml b/pom.xml index 75bdf6187..b6c5866a2 100644 --- a/pom.xml +++ b/pom.xml @@ -20,7 +20,7 @@ software.amazon.lambda powertools-parent - 2.9.0 + 2.10.0 pom Powertools for AWS Lambda (Java) - Parent diff --git a/powertools-batch/pom.xml b/powertools-batch/pom.xml index 37cfdf7b2..31930bde9 100644 --- a/powertools-batch/pom.xml +++ b/powertools-batch/pom.xml @@ -6,7 +6,7 @@ software.amazon.lambda powertools-parent - 2.9.0 + 2.10.0 A suite of utilities that makes batch message processing using AWS Lambda easier. diff --git a/powertools-cloudformation/pom.xml b/powertools-cloudformation/pom.xml index 4c3d2ac70..d8a41ef33 100644 --- a/powertools-cloudformation/pom.xml +++ b/powertools-cloudformation/pom.xml @@ -24,7 +24,7 @@ powertools-parent software.amazon.lambda - 2.9.0 + 2.10.0 Powertools for AWS Lambda (Java) - Cloudformation diff --git a/powertools-common/pom.xml b/powertools-common/pom.xml index cd43df238..d15f86ff2 100644 --- a/powertools-common/pom.xml +++ b/powertools-common/pom.xml @@ -24,7 +24,7 @@ powertools-parent software.amazon.lambda - 2.9.0 + 2.10.0 Powertools for AWS Lambda (Java) - Common Internal Utilities diff --git a/powertools-e2e-tests/handlers/batch/pom.xml b/powertools-e2e-tests/handlers/batch/pom.xml index 3e89aadd2..a884d65d4 100644 --- a/powertools-e2e-tests/handlers/batch/pom.xml +++ b/powertools-e2e-tests/handlers/batch/pom.xml @@ -5,7 +5,7 @@ software.amazon.lambda e2e-test-handlers-parent - 2.9.0 + 2.10.0 e2e-test-handler-batch diff --git a/powertools-e2e-tests/handlers/idempotency-functional/pom.xml b/powertools-e2e-tests/handlers/idempotency-functional/pom.xml index b5669b21f..47a0dcdf9 100644 --- a/powertools-e2e-tests/handlers/idempotency-functional/pom.xml +++ b/powertools-e2e-tests/handlers/idempotency-functional/pom.xml @@ -5,7 +5,7 @@ software.amazon.lambda e2e-test-handlers-parent - 2.9.0 + 2.10.0 e2e-test-handler-idempotency-functional diff --git a/powertools-e2e-tests/handlers/idempotency-generics/pom.xml b/powertools-e2e-tests/handlers/idempotency-generics/pom.xml index 21a658e6c..7122d8c02 100644 --- a/powertools-e2e-tests/handlers/idempotency-generics/pom.xml +++ b/powertools-e2e-tests/handlers/idempotency-generics/pom.xml @@ -5,7 +5,7 @@ software.amazon.lambda e2e-test-handlers-parent - 2.9.0 + 2.10.0 e2e-test-handler-idempotency-generics diff --git a/powertools-e2e-tests/handlers/idempotency/pom.xml b/powertools-e2e-tests/handlers/idempotency/pom.xml index 921599bdb..fe59be802 100644 --- a/powertools-e2e-tests/handlers/idempotency/pom.xml +++ b/powertools-e2e-tests/handlers/idempotency/pom.xml @@ -5,7 +5,7 @@ software.amazon.lambda e2e-test-handlers-parent - 2.9.0 + 2.10.0 e2e-test-handler-idempotency diff --git a/powertools-e2e-tests/handlers/lambda-metadata/pom.xml b/powertools-e2e-tests/handlers/lambda-metadata/pom.xml index eb69c1d47..518feac59 100644 --- a/powertools-e2e-tests/handlers/lambda-metadata/pom.xml +++ b/powertools-e2e-tests/handlers/lambda-metadata/pom.xml @@ -5,7 +5,7 @@ software.amazon.lambda e2e-test-handlers-parent - 2.9.0 + 2.10.0 e2e-test-handler-lambda-metadata diff --git a/powertools-e2e-tests/handlers/largemessage-functional/pom.xml b/powertools-e2e-tests/handlers/largemessage-functional/pom.xml index ddfe39a5e..3f2808de9 100644 --- a/powertools-e2e-tests/handlers/largemessage-functional/pom.xml +++ b/powertools-e2e-tests/handlers/largemessage-functional/pom.xml @@ -5,7 +5,7 @@ software.amazon.lambda e2e-test-handlers-parent - 2.9.0 + 2.10.0 e2e-test-handler-largemessage-functional diff --git a/powertools-e2e-tests/handlers/largemessage/pom.xml b/powertools-e2e-tests/handlers/largemessage/pom.xml index bee253988..1f9e5427a 100644 --- a/powertools-e2e-tests/handlers/largemessage/pom.xml +++ b/powertools-e2e-tests/handlers/largemessage/pom.xml @@ -5,7 +5,7 @@ software.amazon.lambda e2e-test-handlers-parent - 2.9.0 + 2.10.0 e2e-test-handler-largemessage diff --git a/powertools-e2e-tests/handlers/largemessage_idempotent/pom.xml b/powertools-e2e-tests/handlers/largemessage_idempotent/pom.xml index 5ef7e1963..26ff22da9 100644 --- a/powertools-e2e-tests/handlers/largemessage_idempotent/pom.xml +++ b/powertools-e2e-tests/handlers/largemessage_idempotent/pom.xml @@ -5,7 +5,7 @@ software.amazon.lambda e2e-test-handlers-parent - 2.9.0 + 2.10.0 e2e-test-handler-large-msg-idempotent diff --git a/powertools-e2e-tests/handlers/logging-functional/pom.xml b/powertools-e2e-tests/handlers/logging-functional/pom.xml index 4ec6e5008..8c7b5cddb 100644 --- a/powertools-e2e-tests/handlers/logging-functional/pom.xml +++ b/powertools-e2e-tests/handlers/logging-functional/pom.xml @@ -5,7 +5,7 @@ software.amazon.lambda e2e-test-handlers-parent - 2.9.0 + 2.10.0 e2e-test-handler-logging-functional diff --git a/powertools-e2e-tests/handlers/logging-log4j-fluent-api/pom.xml b/powertools-e2e-tests/handlers/logging-log4j-fluent-api/pom.xml index 8432aa604..ee73976a7 100644 --- a/powertools-e2e-tests/handlers/logging-log4j-fluent-api/pom.xml +++ b/powertools-e2e-tests/handlers/logging-log4j-fluent-api/pom.xml @@ -5,7 +5,7 @@ software.amazon.lambda e2e-test-handlers-parent - 2.9.0 + 2.10.0 e2e-test-handler-logging-log4j-fluent-api diff --git a/powertools-e2e-tests/handlers/logging-log4j/pom.xml b/powertools-e2e-tests/handlers/logging-log4j/pom.xml index 022f029e6..71b549874 100644 --- a/powertools-e2e-tests/handlers/logging-log4j/pom.xml +++ b/powertools-e2e-tests/handlers/logging-log4j/pom.xml @@ -5,7 +5,7 @@ software.amazon.lambda e2e-test-handlers-parent - 2.9.0 + 2.10.0 e2e-test-handler-logging-log4j diff --git a/powertools-e2e-tests/handlers/logging-logback-fluent-api/pom.xml b/powertools-e2e-tests/handlers/logging-logback-fluent-api/pom.xml index 83d0abddb..6063b01e6 100644 --- a/powertools-e2e-tests/handlers/logging-logback-fluent-api/pom.xml +++ b/powertools-e2e-tests/handlers/logging-logback-fluent-api/pom.xml @@ -5,7 +5,7 @@ software.amazon.lambda e2e-test-handlers-parent - 2.9.0 + 2.10.0 e2e-test-handler-logging-logback-fluent-api diff --git a/powertools-e2e-tests/handlers/logging-logback/pom.xml b/powertools-e2e-tests/handlers/logging-logback/pom.xml index f8458db25..441d64d9b 100644 --- a/powertools-e2e-tests/handlers/logging-logback/pom.xml +++ b/powertools-e2e-tests/handlers/logging-logback/pom.xml @@ -5,7 +5,7 @@ software.amazon.lambda e2e-test-handlers-parent - 2.9.0 + 2.10.0 e2e-test-handler-logging-logback diff --git a/powertools-e2e-tests/handlers/metrics/pom.xml b/powertools-e2e-tests/handlers/metrics/pom.xml index ddc6ae1bd..790900739 100644 --- a/powertools-e2e-tests/handlers/metrics/pom.xml +++ b/powertools-e2e-tests/handlers/metrics/pom.xml @@ -5,7 +5,7 @@ software.amazon.lambda e2e-test-handlers-parent - 2.9.0 + 2.10.0 e2e-test-handler-metrics diff --git a/powertools-e2e-tests/handlers/parameters/pom.xml b/powertools-e2e-tests/handlers/parameters/pom.xml index fb2deb2aa..f18d54546 100644 --- a/powertools-e2e-tests/handlers/parameters/pom.xml +++ b/powertools-e2e-tests/handlers/parameters/pom.xml @@ -5,7 +5,7 @@ software.amazon.lambda e2e-test-handlers-parent - 2.9.0 + 2.10.0 e2e-test-handler-parameters diff --git a/powertools-e2e-tests/handlers/pom.xml b/powertools-e2e-tests/handlers/pom.xml index abea8288e..daf66d1a0 100644 --- a/powertools-e2e-tests/handlers/pom.xml +++ b/powertools-e2e-tests/handlers/pom.xml @@ -4,7 +4,7 @@ software.amazon.lambda e2e-test-handlers-parent - 2.9.0 + 2.10.0 pom Handlers for End-to-End tests Fake handlers that use Powertools for AWS Lambda (Java). diff --git a/powertools-e2e-tests/handlers/tracing/pom.xml b/powertools-e2e-tests/handlers/tracing/pom.xml index 9874ce986..3f0dae3f3 100644 --- a/powertools-e2e-tests/handlers/tracing/pom.xml +++ b/powertools-e2e-tests/handlers/tracing/pom.xml @@ -5,7 +5,7 @@ software.amazon.lambda e2e-test-handlers-parent - 2.9.0 + 2.10.0 e2e-test-handler-tracing diff --git a/powertools-e2e-tests/handlers/validation-alb-event/pom.xml b/powertools-e2e-tests/handlers/validation-alb-event/pom.xml index 14dbb9b13..520b0eb97 100644 --- a/powertools-e2e-tests/handlers/validation-alb-event/pom.xml +++ b/powertools-e2e-tests/handlers/validation-alb-event/pom.xml @@ -5,7 +5,7 @@ software.amazon.lambda e2e-test-handlers-parent - 2.9.0 + 2.10.0 e2e-test-handler-validation-alb-event diff --git a/powertools-e2e-tests/handlers/validation-apigw-event/pom.xml b/powertools-e2e-tests/handlers/validation-apigw-event/pom.xml index 290e47b13..7f71c076a 100644 --- a/powertools-e2e-tests/handlers/validation-apigw-event/pom.xml +++ b/powertools-e2e-tests/handlers/validation-apigw-event/pom.xml @@ -5,7 +5,7 @@ software.amazon.lambda e2e-test-handlers-parent - 2.9.0 + 2.10.0 e2e-test-handler-validation-apigw-event diff --git a/powertools-e2e-tests/pom.xml b/powertools-e2e-tests/pom.xml index 864440833..1f16e561e 100644 --- a/powertools-e2e-tests/pom.xml +++ b/powertools-e2e-tests/pom.xml @@ -20,7 +20,7 @@ powertools-parent software.amazon.lambda - 2.9.0 + 2.10.0 powertools-e2e-tests diff --git a/powertools-idempotency/pom.xml b/powertools-idempotency/pom.xml index cbe2384ba..80ed6268d 100644 --- a/powertools-idempotency/pom.xml +++ b/powertools-idempotency/pom.xml @@ -21,7 +21,7 @@ software.amazon.lambda powertools-parent - 2.9.0 + 2.10.0 powertools-idempotency diff --git a/powertools-idempotency/powertools-idempotency-core/pom.xml b/powertools-idempotency/powertools-idempotency-core/pom.xml index 0676be3fe..1d61a1f14 100644 --- a/powertools-idempotency/powertools-idempotency-core/pom.xml +++ b/powertools-idempotency/powertools-idempotency-core/pom.xml @@ -21,7 +21,7 @@ software.amazon.lambda powertools-idempotency - 2.9.0 + 2.10.0 powertools-idempotency-core diff --git a/powertools-idempotency/powertools-idempotency-dynamodb/pom.xml b/powertools-idempotency/powertools-idempotency-dynamodb/pom.xml index e7101da6f..483922da6 100644 --- a/powertools-idempotency/powertools-idempotency-dynamodb/pom.xml +++ b/powertools-idempotency/powertools-idempotency-dynamodb/pom.xml @@ -21,7 +21,7 @@ software.amazon.lambda powertools-idempotency - 2.9.0 + 2.10.0 powertools-idempotency-dynamodb diff --git a/powertools-kafka/pom.xml b/powertools-kafka/pom.xml index 6cade6bbf..5803b4006 100644 --- a/powertools-kafka/pom.xml +++ b/powertools-kafka/pom.xml @@ -21,7 +21,7 @@ powertools-parent software.amazon.lambda - 2.9.0 + 2.10.0 powertools-kafka diff --git a/powertools-lambda-metadata/pom.xml b/powertools-lambda-metadata/pom.xml index 7a5ab6f24..1cf825cd8 100644 --- a/powertools-lambda-metadata/pom.xml +++ b/powertools-lambda-metadata/pom.xml @@ -24,7 +24,7 @@ powertools-parent software.amazon.lambda - 2.9.0 + 2.10.0 Powertools for AWS Lambda (Java) - Lambda Metadata diff --git a/powertools-large-messages/pom.xml b/powertools-large-messages/pom.xml index ad5910ec1..214d66992 100644 --- a/powertools-large-messages/pom.xml +++ b/powertools-large-messages/pom.xml @@ -23,7 +23,7 @@ software.amazon.lambda powertools-parent - 2.9.0 + 2.10.0 powertools-large-messages diff --git a/powertools-logging/pom.xml b/powertools-logging/pom.xml index 631a37b99..5342d9f45 100644 --- a/powertools-logging/pom.xml +++ b/powertools-logging/pom.xml @@ -21,7 +21,7 @@ powertools-parent software.amazon.lambda - 2.9.0 + 2.10.0 Powertools for AWS Lambda (Java) - Logging diff --git a/powertools-logging/powertools-logging-log4j/pom.xml b/powertools-logging/powertools-logging-log4j/pom.xml index d02439325..a719a8d19 100644 --- a/powertools-logging/powertools-logging-log4j/pom.xml +++ b/powertools-logging/powertools-logging-log4j/pom.xml @@ -7,7 +7,7 @@ powertools-parent software.amazon.lambda - 2.9.0 + 2.10.0 ../../pom.xml diff --git a/powertools-logging/powertools-logging-logback/pom.xml b/powertools-logging/powertools-logging-logback/pom.xml index ff4c77f18..20af8fe95 100644 --- a/powertools-logging/powertools-logging-logback/pom.xml +++ b/powertools-logging/powertools-logging-logback/pom.xml @@ -6,7 +6,7 @@ powertools-parent software.amazon.lambda - 2.9.0 + 2.10.0 ../../pom.xml diff --git a/powertools-metrics/pom.xml b/powertools-metrics/pom.xml index 37f4adae6..5d97e87cc 100644 --- a/powertools-metrics/pom.xml +++ b/powertools-metrics/pom.xml @@ -24,7 +24,7 @@ powertools-parent software.amazon.lambda - 2.9.0 + 2.10.0 Powertools for AWS Lambda (Java) - Metrics diff --git a/powertools-parameters/pom.xml b/powertools-parameters/pom.xml index 0ed7d26dc..757efff5f 100644 --- a/powertools-parameters/pom.xml +++ b/powertools-parameters/pom.xml @@ -21,7 +21,7 @@ powertools-parent software.amazon.lambda - 2.9.0 + 2.10.0 powertools-parameters diff --git a/powertools-parameters/powertools-parameters-appconfig/pom.xml b/powertools-parameters/powertools-parameters-appconfig/pom.xml index 012b5d3a8..d0c53ace2 100644 --- a/powertools-parameters/powertools-parameters-appconfig/pom.xml +++ b/powertools-parameters/powertools-parameters-appconfig/pom.xml @@ -7,7 +7,7 @@ software.amazon.lambda powertools-parent - 2.9.0 + 2.10.0 ../../pom.xml diff --git a/powertools-parameters/powertools-parameters-dynamodb/pom.xml b/powertools-parameters/powertools-parameters-dynamodb/pom.xml index ff4be1ab6..54584647e 100644 --- a/powertools-parameters/powertools-parameters-dynamodb/pom.xml +++ b/powertools-parameters/powertools-parameters-dynamodb/pom.xml @@ -7,7 +7,7 @@ software.amazon.lambda powertools-parent - 2.9.0 + 2.10.0 ../../pom.xml diff --git a/powertools-parameters/powertools-parameters-secrets/pom.xml b/powertools-parameters/powertools-parameters-secrets/pom.xml index 2dddedec2..3bc2bc2b9 100644 --- a/powertools-parameters/powertools-parameters-secrets/pom.xml +++ b/powertools-parameters/powertools-parameters-secrets/pom.xml @@ -7,7 +7,7 @@ software.amazon.lambda powertools-parent - 2.9.0 + 2.10.0 ../../pom.xml diff --git a/powertools-parameters/powertools-parameters-ssm/pom.xml b/powertools-parameters/powertools-parameters-ssm/pom.xml index fac44f57f..50237ad8b 100644 --- a/powertools-parameters/powertools-parameters-ssm/pom.xml +++ b/powertools-parameters/powertools-parameters-ssm/pom.xml @@ -7,7 +7,7 @@ software.amazon.lambda powertools-parent - 2.9.0 + 2.10.0 ../../pom.xml diff --git a/powertools-parameters/powertools-parameters-tests/pom.xml b/powertools-parameters/powertools-parameters-tests/pom.xml index 289a86ecb..00e321750 100644 --- a/powertools-parameters/powertools-parameters-tests/pom.xml +++ b/powertools-parameters/powertools-parameters-tests/pom.xml @@ -6,7 +6,7 @@ software.amazon.lambda powertools-parent - 2.9.0 + 2.10.0 ../../pom.xml diff --git a/powertools-serialization/pom.xml b/powertools-serialization/pom.xml index 45a724ba6..5658401c1 100644 --- a/powertools-serialization/pom.xml +++ b/powertools-serialization/pom.xml @@ -21,7 +21,7 @@ powertools-parent software.amazon.lambda - 2.9.0 + 2.10.0 powertools-serialization diff --git a/powertools-tracing/pom.xml b/powertools-tracing/pom.xml index b70c23262..070dc5a1b 100644 --- a/powertools-tracing/pom.xml +++ b/powertools-tracing/pom.xml @@ -24,7 +24,7 @@ powertools-parent software.amazon.lambda - 2.9.0 + 2.10.0 Powertools for AWS Lambda (Java) - Tracing diff --git a/powertools-validation/pom.xml b/powertools-validation/pom.xml index 8dfce6b6a..21d7c0274 100644 --- a/powertools-validation/pom.xml +++ b/powertools-validation/pom.xml @@ -24,7 +24,7 @@ powertools-parent software.amazon.lambda - 2.9.0 + 2.10.0 Powertools for AWS Lambda (Java) - Validation From 49b9b335743967e7d178e55194500915d36a0b83 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 19 Mar 2026 17:49:35 +0100 Subject: [PATCH 126/202] chore: bump org.codehaus.mojo:versions-maven-plugin (#2426) Bumps [org.codehaus.mojo:versions-maven-plugin](https://github.com/mojohaus/versions) from 2.20.1 to 2.21.0. - [Release notes](https://github.com/mojohaus/versions/releases) - [Changelog](https://github.com/mojohaus/versions/blob/master/ReleaseNotes.md) - [Commits](https://github.com/mojohaus/versions/compare/2.20.1...2.21.0) --- updated-dependencies: - dependency-name: org.codehaus.mojo:versions-maven-plugin dependency-version: 2.21.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 b6c5866a2..27f0a117f 100644 --- a/pom.xml +++ b/pom.xml @@ -112,7 +112,7 @@ 4.1.2 0.6.0 1.12.781 - 2.20.1 + 2.21.0 1.7.0 5.21.0 5.21.0 From bd6d4cdc8df34c7426551f5b83a33eca0f9654ca Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 19 Mar 2026 17:49:44 +0100 Subject: [PATCH 127/202] chore: bump org.apache.maven.plugins:maven-jar-plugin (#2427) Bumps [org.apache.maven.plugins:maven-jar-plugin](https://github.com/apache/maven-jar-plugin) from 3.4.2 to 3.5.0. - [Release notes](https://github.com/apache/maven-jar-plugin/releases) - [Commits](https://github.com/apache/maven-jar-plugin/compare/maven-jar-plugin-3.4.2...maven-jar-plugin-3.5.0) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-jar-plugin dependency-version: 3.5.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> --- powertools-idempotency/powertools-idempotency-dynamodb/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/powertools-idempotency/powertools-idempotency-dynamodb/pom.xml b/powertools-idempotency/powertools-idempotency-dynamodb/pom.xml index 483922da6..28f3a6bf6 100644 --- a/powertools-idempotency/powertools-idempotency-dynamodb/pom.xml +++ b/powertools-idempotency/powertools-idempotency-dynamodb/pom.xml @@ -203,7 +203,7 @@ org.apache.maven.plugins maven-jar-plugin - 3.4.2 + 3.5.0 From 0aaf34ab0a86434aaa96afc30aa13c7dfac9e154 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 19 Mar 2026 17:49:53 +0100 Subject: [PATCH 128/202] chore: bump release-drafter/release-drafter from 7.1.0 to 7.1.1 (#2428) Bumps [release-drafter/release-drafter](https://github.com/release-drafter/release-drafter) from 7.1.0 to 7.1.1. - [Release notes](https://github.com/release-drafter/release-drafter/releases) - [Commits](https://github.com/release-drafter/release-drafter/compare/44a942e465867c7465b76aa808ddca6e0acae5da...139054aeaa9adc52ab36ddf67437541f039b88e2) --- updated-dependencies: - dependency-name: release-drafter/release-drafter dependency-version: 7.1.1 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/release-drafter.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release-drafter.yml b/.github/workflows/release-drafter.yml index 951a0b0f9..b492f2d86 100644 --- a/.github/workflows/release-drafter.yml +++ b/.github/workflows/release-drafter.yml @@ -23,6 +23,6 @@ jobs: contents: write # required for creating draft releases steps: - name: Relase Drafter - uses: release-drafter/release-drafter@44a942e465867c7465b76aa808ddca6e0acae5da + uses: release-drafter/release-drafter@139054aeaa9adc52ab36ddf67437541f039b88e2 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} From 2006aff7b51034fc24616bb44e38b7b0913a77db Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 19 Mar 2026 17:50:14 +0100 Subject: [PATCH 129/202] chore: bump org.graalvm.buildtools:native-maven-plugin (#2425) Bumps [org.graalvm.buildtools:native-maven-plugin](https://github.com/graalvm/native-build-tools) from 0.11.2 to 0.11.5. - [Release notes](https://github.com/graalvm/native-build-tools/releases) - [Commits](https://github.com/graalvm/native-build-tools/compare/0.11.2...0.11.5) --- updated-dependencies: - dependency-name: org.graalvm.buildtools:native-maven-plugin dependency-version: 0.11.5 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- examples/powertools-examples-cloudformation/pom.xml | 2 +- examples/powertools-examples-core-utilities/sam-graalvm/pom.xml | 2 +- examples/powertools-examples-idempotency/sam-graalvm/pom.xml | 2 +- examples/powertools-examples-parameters/sam-graalvm/pom.xml | 2 +- examples/powertools-examples-serialization/sam-graalvm/pom.xml | 2 +- powertools-e2e-tests/handlers/pom.xml | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/examples/powertools-examples-cloudformation/pom.xml b/examples/powertools-examples-cloudformation/pom.xml index cb1d19bdf..41ea4dc3d 100644 --- a/examples/powertools-examples-cloudformation/pom.xml +++ b/examples/powertools-examples-cloudformation/pom.xml @@ -159,7 +159,7 @@ org.graalvm.buildtools native-maven-plugin - 0.11.2 + 0.11.5 true diff --git a/examples/powertools-examples-core-utilities/sam-graalvm/pom.xml b/examples/powertools-examples-core-utilities/sam-graalvm/pom.xml index 18f245410..af06dcc76 100644 --- a/examples/powertools-examples-core-utilities/sam-graalvm/pom.xml +++ b/examples/powertools-examples-core-utilities/sam-graalvm/pom.xml @@ -158,7 +158,7 @@ org.graalvm.buildtools native-maven-plugin - 0.11.2 + 0.11.5 true diff --git a/examples/powertools-examples-idempotency/sam-graalvm/pom.xml b/examples/powertools-examples-idempotency/sam-graalvm/pom.xml index ca1c1cd41..327a11450 100644 --- a/examples/powertools-examples-idempotency/sam-graalvm/pom.xml +++ b/examples/powertools-examples-idempotency/sam-graalvm/pom.xml @@ -139,7 +139,7 @@ org.graalvm.buildtools native-maven-plugin - 0.11.2 + 0.11.5 true diff --git a/examples/powertools-examples-parameters/sam-graalvm/pom.xml b/examples/powertools-examples-parameters/sam-graalvm/pom.xml index e525a8260..4804f3f86 100644 --- a/examples/powertools-examples-parameters/sam-graalvm/pom.xml +++ b/examples/powertools-examples-parameters/sam-graalvm/pom.xml @@ -175,7 +175,7 @@ org.graalvm.buildtools native-maven-plugin - 0.11.2 + 0.11.5 true diff --git a/examples/powertools-examples-serialization/sam-graalvm/pom.xml b/examples/powertools-examples-serialization/sam-graalvm/pom.xml index 59d9d3811..8683f08ef 100644 --- a/examples/powertools-examples-serialization/sam-graalvm/pom.xml +++ b/examples/powertools-examples-serialization/sam-graalvm/pom.xml @@ -61,7 +61,7 @@ org.graalvm.buildtools native-maven-plugin - 0.11.2 + 0.11.5 true diff --git a/powertools-e2e-tests/handlers/pom.xml b/powertools-e2e-tests/handlers/pom.xml index daf66d1a0..6bfc5365f 100644 --- a/powertools-e2e-tests/handlers/pom.xml +++ b/powertools-e2e-tests/handlers/pom.xml @@ -216,7 +216,7 @@ org.graalvm.buildtools native-maven-plugin - 0.11.2 + 0.11.5 true From 06e4f35b1a5488750605007d197046201a7e70bc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 26 Mar 2026 15:58:11 +0100 Subject: [PATCH 130/202] chore: bump github/codeql-action from 4.33.0 to 4.34.1 (#2435) Bumps [github/codeql-action](https://github.com/github/codeql-action) from 4.33.0 to 4.34.1. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/b1bff81932f5cdfc8695c7752dcee935dcd061c8...38697555549f1db7851b81482ff19f1fa5c4fedc) --- updated-dependencies: - dependency-name: github/codeql-action dependency-version: 4.34.1 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> --- .github/workflows/security-scorecard.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/security-scorecard.yml b/.github/workflows/security-scorecard.yml index 01bdf2621..c2a3ced2a 100644 --- a/.github/workflows/security-scorecard.yml +++ b/.github/workflows/security-scorecard.yml @@ -53,6 +53,6 @@ jobs: path: results.sarif retention-days: 5 - name: Upload to Code-Scanning - uses: github/codeql-action/upload-sarif@b1bff81932f5cdfc8695c7752dcee935dcd061c8 # v3.29.5 + uses: github/codeql-action/upload-sarif@38697555549f1db7851b81482ff19f1fa5c4fedc # v3.29.5 with: sarif_file: results.sarif From 95cd484af68392ae09754202ad810aa07436c654 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 26 Mar 2026 15:58:22 +0100 Subject: [PATCH 131/202] chore: bump sam/build-java25 (#2434) Bumps sam/build-java25 from `32b91ab` to `fc5fca4`. --- updated-dependencies: - dependency-name: sam/build-java25 dependency-version: fc5fca4b79c4d97e46d7bd1d501ee1c68be6b75600375827a085c415239ea355 dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- powertools-e2e-tests/src/test/resources/docker/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/powertools-e2e-tests/src/test/resources/docker/Dockerfile b/powertools-e2e-tests/src/test/resources/docker/Dockerfile index cb8ea7dcd..d81bc9409 100644 --- a/powertools-e2e-tests/src/test/resources/docker/Dockerfile +++ b/powertools-e2e-tests/src/test/resources/docker/Dockerfile @@ -1,5 +1,5 @@ # Use the official AWS SAM base image for Java 25 -FROM public.ecr.aws/sam/build-java25@sha256:32b91ab2cbab1eb7b165546f1788e1b113ea1c913aa68c16501458934692fcd2 +FROM public.ecr.aws/sam/build-java25@sha256:fc5fca4b79c4d97e46d7bd1d501ee1c68be6b75600375827a085c415239ea355 # Install GraalVM dependencies RUN curl -4 -L https://download.oracle.com/graalvm/25/latest/graalvm-jdk-25_linux-x64_bin.tar.gz | tar -xvz From d9bb2b0a07c4716e00ce7b730342fe01334d523d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 26 Mar 2026 15:58:36 +0100 Subject: [PATCH 132/202] chore: bump squidfunk/mkdocs-material in /docs (#2433) Bumps squidfunk/mkdocs-material from `c373999` to `868ad4d`. --- updated-dependencies: - dependency-name: squidfunk/mkdocs-material dependency-version: 868ad4d39fb5865b72d00173ade00f4eae2b38dde7ff790a011cc44ce4a8ff8e dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- docs/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Dockerfile b/docs/Dockerfile index b72dc7057..3f3918bdd 100644 --- a/docs/Dockerfile +++ b/docs/Dockerfile @@ -1,4 +1,4 @@ -FROM squidfunk/mkdocs-material@sha256:c3739993c3e7c92cfe649ba03cbc04f4fa9b1497886abd16267eb413cda8aecf +FROM squidfunk/mkdocs-material@sha256:868ad4d39fb5865b72d00173ade00f4eae2b38dde7ff790a011cc44ce4a8ff8e COPY requirements.txt /tmp/ RUN pip install --require-hashes -r /tmp/requirements.txt From 9a8477dd14183f0959c514ea046d29de68d8e209 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 26 Mar 2026 15:58:51 +0100 Subject: [PATCH 133/202] chore: bump mockito.version from 5.21.0 to 5.23.0 (#2432) Bumps `mockito.version` from 5.21.0 to 5.23.0. Updates `org.mockito:mockito-core` from 5.21.0 to 5.23.0 - [Release notes](https://github.com/mockito/mockito/releases) - [Commits](https://github.com/mockito/mockito/compare/v5.21.0...v5.23.0) Updates `org.mockito:mockito-subclass` from 5.21.0 to 5.23.0 - [Release notes](https://github.com/mockito/mockito/releases) - [Commits](https://github.com/mockito/mockito/compare/v5.21.0...v5.23.0) --- updated-dependencies: - dependency-name: org.mockito:mockito-core dependency-version: 5.23.0 dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: org.mockito:mockito-subclass dependency-version: 5.23.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> --- examples/powertools-examples-parameters/sam-graalvm/pom.xml | 2 +- examples/powertools-examples-parameters/sam/pom.xml | 2 +- examples/powertools-examples-validation/pom.xml | 2 +- pom.xml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/examples/powertools-examples-parameters/sam-graalvm/pom.xml b/examples/powertools-examples-parameters/sam-graalvm/pom.xml index 4804f3f86..a510b8759 100644 --- a/examples/powertools-examples-parameters/sam-graalvm/pom.xml +++ b/examples/powertools-examples-parameters/sam-graalvm/pom.xml @@ -76,7 +76,7 @@ org.mockito mockito-core - 5.21.0 + 5.23.0 test diff --git a/examples/powertools-examples-parameters/sam/pom.xml b/examples/powertools-examples-parameters/sam/pom.xml index 64f6519ce..5b8b17d95 100644 --- a/examples/powertools-examples-parameters/sam/pom.xml +++ b/examples/powertools-examples-parameters/sam/pom.xml @@ -50,7 +50,7 @@ org.mockito mockito-core - 5.21.0 + 5.23.0 test diff --git a/examples/powertools-examples-validation/pom.xml b/examples/powertools-examples-validation/pom.xml index e7ecd72af..c312f0b39 100644 --- a/examples/powertools-examples-validation/pom.xml +++ b/examples/powertools-examples-validation/pom.xml @@ -53,7 +53,7 @@ org.mockito mockito-core - 5.21.0 + 5.23.0 test diff --git a/pom.xml b/pom.xml index 27f0a117f..df9644128 100644 --- a/pom.xml +++ b/pom.xml @@ -114,7 +114,7 @@ 1.12.781 2.21.0 1.7.0 - 5.21.0 + 5.23.0 5.21.0 2.3.0 1.5.0 From d0bdc090224f64d6d0c1c883d2e90489e35e4397 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 26 Mar 2026 15:59:06 +0100 Subject: [PATCH 134/202] chore: bump org.yaml:snakeyaml from 2.5 to 2.6 (#2431) Bumps [org.yaml:snakeyaml](https://bitbucket.org/snakeyaml/snakeyaml) from 2.5 to 2.6. - [Commits](https://bitbucket.org/snakeyaml/snakeyaml/branches/compare/snakeyaml-2.6..snakeyaml-2.5) --- updated-dependencies: - dependency-name: org.yaml:snakeyaml dependency-version: '2.6' 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> --- powertools-e2e-tests/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/powertools-e2e-tests/pom.xml b/powertools-e2e-tests/pom.xml index 1f16e561e..2bd16e7b2 100644 --- a/powertools-e2e-tests/pom.xml +++ b/powertools-e2e-tests/pom.xml @@ -152,7 +152,7 @@ org.yaml snakeyaml - 2.5 + 2.6 test From eda0478c302592c4235db741e1933596e1da8a69 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 26 Mar 2026 15:59:25 +0100 Subject: [PATCH 135/202] chore: bump aws.sdk.version from 2.42.15 to 2.42.17 (#2430) Bumps `aws.sdk.version` from 2.42.15 to 2.42.17. Updates `software.amazon.awssdk:bom` from 2.42.15 to 2.42.17 Updates `software.amazon.awssdk:http-client-spi` from 2.42.15 to 2.42.17 Updates `software.amazon.awssdk:url-connection-client` from 2.41.11 to 2.42.17 Updates `software.amazon.awssdk:s3` from 2.41.11 to 2.42.17 Updates `software.amazon.awssdk:dynamodb` from 2.42.15 to 2.42.17 Updates `software.amazon.awssdk:lambda` from 2.42.15 to 2.42.17 Updates `software.amazon.awssdk:kinesis` from 2.41.11 to 2.42.17 Updates `software.amazon.awssdk:cloudwatch` from 2.42.15 to 2.42.17 Updates `software.amazon.awssdk:xray` from 2.42.15 to 2.42.17 Updates `software.amazon.awssdk:sqs` from 2.41.11 to 2.42.17 Updates `software.amazon.awssdk:cloudformation` from 2.42.15 to 2.42.17 Updates `software.amazon.awssdk:sts` from 2.42.15 to 2.42.17 --- updated-dependencies: - dependency-name: software.amazon.awssdk:bom dependency-version: 2.42.17 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: software.amazon.awssdk:http-client-spi dependency-version: 2.42.17 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: software.amazon.awssdk:url-connection-client dependency-version: 2.42.17 dependency-type: direct:development update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:s3 dependency-version: 2.42.17 dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:dynamodb dependency-version: 2.42.17 dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: software.amazon.awssdk:lambda dependency-version: 2.42.17 dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: software.amazon.awssdk:kinesis dependency-version: 2.42.17 dependency-type: direct:development update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:cloudwatch dependency-version: 2.42.17 dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: software.amazon.awssdk:xray dependency-version: 2.42.17 dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: software.amazon.awssdk:sqs dependency-version: 2.42.17 dependency-type: direct:development update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:cloudformation dependency-version: 2.42.17 dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: software.amazon.awssdk:sts dependency-version: 2.42.17 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- examples/powertools-examples-cloudformation/pom.xml | 2 +- pom.xml | 2 +- powertools-e2e-tests/handlers/pom.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/powertools-examples-cloudformation/pom.xml b/examples/powertools-examples-cloudformation/pom.xml index 41ea4dc3d..9501d2922 100644 --- a/examples/powertools-examples-cloudformation/pom.xml +++ b/examples/powertools-examples-cloudformation/pom.xml @@ -14,7 +14,7 @@ 11 1.4.0 3.16.1 - 2.42.15 + 2.42.17 1.9.20.1 diff --git a/pom.xml b/pom.xml index df9644128..d3aa5c7ee 100644 --- a/pom.xml +++ b/pom.xml @@ -86,7 +86,7 @@ 2.25.3 2.0.17 2.21.1 - 2.42.15 + 2.42.17 2.20.0 2.2.0 UTF-8 diff --git a/powertools-e2e-tests/handlers/pom.xml b/powertools-e2e-tests/handlers/pom.xml index 6bfc5365f..37391b269 100644 --- a/powertools-e2e-tests/handlers/pom.xml +++ b/powertools-e2e-tests/handlers/pom.xml @@ -19,7 +19,7 @@ 3.6.1 1.14.1 3.14.1 - 2.42.15 + 2.42.17 1.9.20.1 true
From 4bef85e9df694458474a645d9911d674a9c47dd7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 27 Mar 2026 14:39:16 +0100 Subject: [PATCH 136/202] chore: bump aws.sdk.version from 2.42.17 to 2.42.22 (#2437) Bumps `aws.sdk.version` from 2.42.17 to 2.42.22. Updates `software.amazon.awssdk:bom` from 2.42.17 to 2.42.22 Updates `software.amazon.awssdk:http-client-spi` from 2.42.17 to 2.42.22 Updates `software.amazon.awssdk:url-connection-client` from 2.41.11 to 2.42.22 Updates `software.amazon.awssdk:s3` from 2.41.11 to 2.42.22 Updates `software.amazon.awssdk:dynamodb` from 2.42.17 to 2.42.22 Updates `software.amazon.awssdk:lambda` from 2.42.17 to 2.42.22 Updates `software.amazon.awssdk:kinesis` from 2.41.11 to 2.42.22 Updates `software.amazon.awssdk:cloudwatch` from 2.42.17 to 2.42.22 Updates `software.amazon.awssdk:xray` from 2.42.17 to 2.42.22 Updates `software.amazon.awssdk:sqs` from 2.41.11 to 2.42.22 Updates `software.amazon.awssdk:cloudformation` from 2.42.17 to 2.42.22 Updates `software.amazon.awssdk:sts` from 2.42.17 to 2.42.22 --- updated-dependencies: - dependency-name: software.amazon.awssdk:bom dependency-version: 2.42.22 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: software.amazon.awssdk:http-client-spi dependency-version: 2.42.22 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: software.amazon.awssdk:url-connection-client dependency-version: 2.42.22 dependency-type: direct:development update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:s3 dependency-version: 2.42.22 dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:dynamodb dependency-version: 2.42.22 dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: software.amazon.awssdk:lambda dependency-version: 2.42.22 dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: software.amazon.awssdk:kinesis dependency-version: 2.42.22 dependency-type: direct:development update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:cloudwatch dependency-version: 2.42.22 dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: software.amazon.awssdk:xray dependency-version: 2.42.22 dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: software.amazon.awssdk:sqs dependency-version: 2.42.22 dependency-type: direct:development update-type: version-update:semver-minor - dependency-name: software.amazon.awssdk:cloudformation dependency-version: 2.42.22 dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: software.amazon.awssdk:sts dependency-version: 2.42.22 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- examples/powertools-examples-cloudformation/pom.xml | 2 +- pom.xml | 2 +- powertools-e2e-tests/handlers/pom.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/powertools-examples-cloudformation/pom.xml b/examples/powertools-examples-cloudformation/pom.xml index 9501d2922..5cd6213f3 100644 --- a/examples/powertools-examples-cloudformation/pom.xml +++ b/examples/powertools-examples-cloudformation/pom.xml @@ -14,7 +14,7 @@ 11 1.4.0 3.16.1 - 2.42.17 + 2.42.22 1.9.20.1 diff --git a/pom.xml b/pom.xml index d3aa5c7ee..472f1cfe4 100644 --- a/pom.xml +++ b/pom.xml @@ -86,7 +86,7 @@ 2.25.3 2.0.17 2.21.1 - 2.42.17 + 2.42.22 2.20.0 2.2.0 UTF-8 diff --git a/powertools-e2e-tests/handlers/pom.xml b/powertools-e2e-tests/handlers/pom.xml index 37391b269..5b056a407 100644 --- a/powertools-e2e-tests/handlers/pom.xml +++ b/powertools-e2e-tests/handlers/pom.xml @@ -19,7 +19,7 @@ 3.6.1 1.14.1 3.14.1 - 2.42.17 + 2.42.22 1.9.20.1 true From 89f4423d3f6e4887fb6629f0fc2ce65d19558e68 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 27 Mar 2026 14:39:27 +0100 Subject: [PATCH 137/202] chore: bump org.sonatype.central:central-publishing-maven-plugin (#2436) Bumps [org.sonatype.central:central-publishing-maven-plugin](https://github.com/sonatype/central-publishing-maven-plugin) from 0.9.0 to 0.10.0. - [Commits](https://github.com/sonatype/central-publishing-maven-plugin/commits) --- updated-dependencies: - dependency-name: org.sonatype.central:central-publishing-maven-plugin dependency-version: 0.10.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 472f1cfe4..4c00bbecf 100644 --- a/pom.xml +++ b/pom.xml @@ -564,7 +564,7 @@ org.sonatype.central central-publishing-maven-plugin - 0.9.0 + 0.10.0 true central From becec931fea85a783129aa7bb6d7fd81517a82ab Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 27 Mar 2026 14:39:39 +0100 Subject: [PATCH 138/202] chore: bump software.constructs:constructs from 10.4.3 to 10.6.0 (#2439) Bumps [software.constructs:constructs](https://github.com/aws/constructs) from 10.4.3 to 10.6.0. - [Release notes](https://github.com/aws/constructs/releases) - [Commits](https://github.com/aws/constructs/compare/v10.4.3...v10.6.0) --- updated-dependencies: - dependency-name: software.constructs:constructs dependency-version: 10.6.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> --- powertools-e2e-tests/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/powertools-e2e-tests/pom.xml b/powertools-e2e-tests/pom.xml index 2bd16e7b2..1af7ce57d 100644 --- a/powertools-e2e-tests/pom.xml +++ b/powertools-e2e-tests/pom.xml @@ -30,7 +30,7 @@ 11 11 - 10.4.3 + 10.6.0 2.243.0 From 5753d70c9680fcb54bdc11a80b3ef1766d75a9ed Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 27 Mar 2026 14:40:19 +0100 Subject: [PATCH 139/202] chore: bump sam/build-java25 (#2438) Bumps sam/build-java25 from `fc5fca4` to `badfeb1`. --- updated-dependencies: - dependency-name: sam/build-java25 dependency-version: badfeb1beb0ae397f9b170a5139c49bff9bd0912c8debdb8c4c17a53e70b6195 dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- powertools-e2e-tests/src/test/resources/docker/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/powertools-e2e-tests/src/test/resources/docker/Dockerfile b/powertools-e2e-tests/src/test/resources/docker/Dockerfile index d81bc9409..ca209af17 100644 --- a/powertools-e2e-tests/src/test/resources/docker/Dockerfile +++ b/powertools-e2e-tests/src/test/resources/docker/Dockerfile @@ -1,5 +1,5 @@ # Use the official AWS SAM base image for Java 25 -FROM public.ecr.aws/sam/build-java25@sha256:fc5fca4b79c4d97e46d7bd1d501ee1c68be6b75600375827a085c415239ea355 +FROM public.ecr.aws/sam/build-java25@sha256:badfeb1beb0ae397f9b170a5139c49bff9bd0912c8debdb8c4c17a53e70b6195 # Install GraalVM dependencies RUN curl -4 -L https://download.oracle.com/graalvm/25/latest/graalvm-jdk-25_linux-x64_bin.tar.gz | tar -xvz From 060f9b84ab16cf74fde7094558bd938cf4f30af3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 30 Mar 2026 15:27:47 +0200 Subject: [PATCH 140/202] chore: bump github/codeql-action from 4.34.1 to 4.35.1 (#2444) Merged by Claude Code. @phipag approved this action. --- .github/workflows/security-scorecard.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/security-scorecard.yml b/.github/workflows/security-scorecard.yml index c2a3ced2a..7e535fe7b 100644 --- a/.github/workflows/security-scorecard.yml +++ b/.github/workflows/security-scorecard.yml @@ -53,6 +53,6 @@ jobs: path: results.sarif retention-days: 5 - name: Upload to Code-Scanning - uses: github/codeql-action/upload-sarif@38697555549f1db7851b81482ff19f1fa5c4fedc # v3.29.5 + uses: github/codeql-action/upload-sarif@c10b8064de6f491fea524254123dbe5e09572f13 # v3.29.5 with: sarif_file: results.sarif From 4f9200c92d638fef0e235d668b0ae896372e23df Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 30 Mar 2026 15:27:53 +0200 Subject: [PATCH 141/202] chore: bump org.apache.maven.plugins:maven-source-plugin (#2443) Merged by Claude Code. @phipag approved this action. --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 4c00bbecf..68bb38515 100644 --- a/pom.xml +++ b/pom.xml @@ -99,7 +99,7 @@ 0.8.11 1.6.13 3.12.0 - 3.3.1 + 3.4.0 3.2.1 1.14.1 3.5.4 From 416c6ff4d2e6bb73c1873b25fd7ea7635136d52c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 30 Mar 2026 15:27:58 +0200 Subject: [PATCH 142/202] chore: bump aws.sdk.version from 2.42.22 to 2.42.23 (#2442) Merged by Claude Code. @phipag approved this action. --- examples/powertools-examples-cloudformation/pom.xml | 2 +- pom.xml | 2 +- powertools-e2e-tests/handlers/pom.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/powertools-examples-cloudformation/pom.xml b/examples/powertools-examples-cloudformation/pom.xml index 5cd6213f3..04edf29ef 100644 --- a/examples/powertools-examples-cloudformation/pom.xml +++ b/examples/powertools-examples-cloudformation/pom.xml @@ -14,7 +14,7 @@ 11 1.4.0 3.16.1 - 2.42.22 + 2.42.23 1.9.20.1 diff --git a/pom.xml b/pom.xml index 68bb38515..15e18981c 100644 --- a/pom.xml +++ b/pom.xml @@ -86,7 +86,7 @@ 2.25.3 2.0.17 2.21.1 - 2.42.22 + 2.42.23 2.20.0 2.2.0 UTF-8 diff --git a/powertools-e2e-tests/handlers/pom.xml b/powertools-e2e-tests/handlers/pom.xml index 5b056a407..74bf1e9ae 100644 --- a/powertools-e2e-tests/handlers/pom.xml +++ b/powertools-e2e-tests/handlers/pom.xml @@ -19,7 +19,7 @@ 3.6.1 1.14.1 3.14.1 - 2.42.22 + 2.42.23 1.9.20.1 true From edb28eaddb8e782df8a175b1c8d25cced2790609 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 30 Mar 2026 15:28:01 +0200 Subject: [PATCH 143/202] chore: bump com.github.spotbugs:spotbugs-maven-plugin (#2441) Merged by Claude Code. @phipag approved this action. --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 15e18981c..6cfd64e80 100644 --- a/pom.xml +++ b/pom.xml @@ -638,7 +638,7 @@ com.github.spotbugs spotbugs-maven-plugin - 4.9.8.1 + 4.9.8.3 test From 60e73ffb25468ad4abc0b2cfda9b1d0ea648d26e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 31 Mar 2026 15:09:09 +0200 Subject: [PATCH 144/202] chore: bump log4j.version from 2.25.3 to 2.25.4 (#2446) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bump log4j 2.25.3 → 2.25.4. Bug fixes, no breaking changes. Reviewed and authorized by user, merge performed by Claude. --- examples/powertools-examples-core-utilities/cdk/app/pom.xml | 2 +- examples/powertools-examples-core-utilities/sam-graalvm/pom.xml | 2 +- examples/powertools-examples-parameters/sam-graalvm/pom.xml | 2 +- pom.xml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/examples/powertools-examples-core-utilities/cdk/app/pom.xml b/examples/powertools-examples-core-utilities/cdk/app/pom.xml index ec1f1364b..135e7ed91 100644 --- a/examples/powertools-examples-core-utilities/cdk/app/pom.xml +++ b/examples/powertools-examples-core-utilities/cdk/app/pom.xml @@ -11,7 +11,7 @@ jar - 2.25.3 + 2.25.4 11 11 1.9.20.1 diff --git a/examples/powertools-examples-core-utilities/sam-graalvm/pom.xml b/examples/powertools-examples-core-utilities/sam-graalvm/pom.xml index af06dcc76..0dfd0a1ea 100644 --- a/examples/powertools-examples-core-utilities/sam-graalvm/pom.xml +++ b/examples/powertools-examples-core-utilities/sam-graalvm/pom.xml @@ -9,7 +9,7 @@ jar - 2.25.3 + 2.25.4 11 11 1.9.20.1 diff --git a/examples/powertools-examples-parameters/sam-graalvm/pom.xml b/examples/powertools-examples-parameters/sam-graalvm/pom.xml index a510b8759..4a14e41d1 100644 --- a/examples/powertools-examples-parameters/sam-graalvm/pom.xml +++ b/examples/powertools-examples-parameters/sam-graalvm/pom.xml @@ -8,7 +8,7 @@ Powertools for AWS Lambda (Java) - Examples - Parameters GraalVM - 2.25.3 + 2.25.4 11 11 1.9.20.1 diff --git a/pom.xml b/pom.xml index 6cfd64e80..732df6fd6 100644 --- a/pom.xml +++ b/pom.xml @@ -83,7 +83,7 @@ 11 11 3.1.2 - 2.25.3 + 2.25.4 2.0.17 2.21.1 2.42.23 From 9f228fa78de55faf5529439c3fb34781988b0542 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 31 Mar 2026 15:09:18 +0200 Subject: [PATCH 145/202] chore: bump aws.sdk.version from 2.42.23 to 2.42.24 (#2445) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bump AWS SDK 2.42.23 → 2.42.24. Perf improvements, no breaking changes. Reviewed and authorized by user, merge performed by Claude. --- examples/powertools-examples-cloudformation/pom.xml | 2 +- pom.xml | 2 +- powertools-e2e-tests/handlers/pom.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/powertools-examples-cloudformation/pom.xml b/examples/powertools-examples-cloudformation/pom.xml index 04edf29ef..8ce045d66 100644 --- a/examples/powertools-examples-cloudformation/pom.xml +++ b/examples/powertools-examples-cloudformation/pom.xml @@ -14,7 +14,7 @@ 11 1.4.0 3.16.1 - 2.42.23 + 2.42.24 1.9.20.1 diff --git a/pom.xml b/pom.xml index 732df6fd6..7cdd7f77c 100644 --- a/pom.xml +++ b/pom.xml @@ -86,7 +86,7 @@ 2.25.4 2.0.17 2.21.1 - 2.42.23 + 2.42.24 2.20.0 2.2.0 UTF-8 diff --git a/powertools-e2e-tests/handlers/pom.xml b/powertools-e2e-tests/handlers/pom.xml index 74bf1e9ae..beca67a35 100644 --- a/powertools-e2e-tests/handlers/pom.xml +++ b/powertools-e2e-tests/handlers/pom.xml @@ -19,7 +19,7 @@ 3.6.1 1.14.1 3.14.1 - 2.42.23 + 2.42.24 1.9.20.1 true From 57a15496dced711cf31111517efa463e6e7567f7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 31 Mar 2026 15:21:51 +0200 Subject: [PATCH 146/202] chore: bump graalvm/setup-graalvm from 1.5.0 to 1.5.1 (#2448) chore: bump graalvm/setup-graalvm from 1.5.0 to 1.5.1 Patch version bump with no breaking changes. SHAs verified. Authorized by @pagejep, reviewed and merged by Claude. --- .github/workflows/check-build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/check-build.yml b/.github/workflows/check-build.yml index 76f6f1a67..46ad9cf6d 100644 --- a/.github/workflows/check-build.yml +++ b/.github/workflows/check-build.yml @@ -107,7 +107,7 @@ jobs: powertools-*/** pom.xml - name: Setup GraalVM - uses: graalvm/setup-graalvm@f744c72a42b1995d7b0cbc314bde4bace7ac1fe1 # v1.5.0 + uses: graalvm/setup-graalvm@2149f395d36ce12ad4ee5d7f334b26bf081fa555 # v1.5.1 with: # Pinned to 21.0.8 due to unsafeAllocated enforcement in 21.0.10+. See #2416 java-version: "21.0.8" From 278743b7c102b2e8b588eb06cc3fef9996a67e41 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 2 Apr 2026 16:10:24 +0200 Subject: [PATCH 147/202] chore: bump graalvm/setup-graalvm from 1.5.1 to 1.5.2 (#2451) Bump graalvm/setup-graalvm from 1.5.1 to 1.5.2. Patch release with internal dev dependency updates. SHA verified. Reviewed and approved by @phipag, review performed by Claude. --- .github/workflows/check-build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/check-build.yml b/.github/workflows/check-build.yml index 46ad9cf6d..eac133b63 100644 --- a/.github/workflows/check-build.yml +++ b/.github/workflows/check-build.yml @@ -107,7 +107,7 @@ jobs: powertools-*/** pom.xml - name: Setup GraalVM - uses: graalvm/setup-graalvm@2149f395d36ce12ad4ee5d7f334b26bf081fa555 # v1.5.1 + uses: graalvm/setup-graalvm@60c26726de13f8b90771df4bc1641a52a3159994 # v1.5.2 with: # Pinned to 21.0.8 due to unsafeAllocated enforcement in 21.0.10+. See #2416 java-version: "21.0.8" From 572b1e937aee19d5893d266d36fa4d707e7c0491 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 2 Apr 2026 16:10:44 +0200 Subject: [PATCH 148/202] chore: bump aws.xray.recorder.version from 2.20.0 to 2.21.0 (#2449) Bump aws.xray.recorder.version from 2.20.0 to 2.21.0. Security-focused release fixing CVEs in transitive dependencies (Jackson, Spring, AWS SDK v2). Reviewed and approved by @phipag, review performed by Claude. --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 7cdd7f77c..dc5df3d30 100644 --- a/pom.xml +++ b/pom.xml @@ -87,7 +87,7 @@ 2.0.17 2.21.1 2.42.24 - 2.20.0 + 2.21.0 2.2.0 UTF-8 1.4.0 From 3433b7ed23dcb62d436a74032e7fa1c24bf5c46d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 2 Apr 2026 16:59:11 +0200 Subject: [PATCH 149/202] chore: bump com.amazonaws:aws-lambda-java-serialization (#2450) Bump com.amazonaws:aws-lambda-java-serialization from 1.1.6 to 1.3.1. Internal Jackson databind upgrade and deprecated naming strategy modernization. No breaking changes. Reviewed and approved by @phipag, review performed by Claude. --- pom.xml | 2 +- powertools-e2e-tests/handlers/pom.xml | 2 +- powertools-kafka/pom.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index dc5df3d30..f297e1315 100644 --- a/pom.xml +++ b/pom.xml @@ -92,7 +92,7 @@ UTF-8 1.4.0 3.16.1 - 1.1.6 + 1.3.1 3.14.1 1.9.7 1.13.1 diff --git a/powertools-e2e-tests/handlers/pom.xml b/powertools-e2e-tests/handlers/pom.xml index beca67a35..4037ddb55 100644 --- a/powertools-e2e-tests/handlers/pom.xml +++ b/powertools-e2e-tests/handlers/pom.xml @@ -14,7 +14,7 @@ 11 11 1.4.0 - 1.1.6 + 1.3.1 3.16.1 3.6.1 1.14.1 diff --git a/powertools-kafka/pom.xml b/powertools-kafka/pom.xml index 5803b4006..92e472936 100644 --- a/powertools-kafka/pom.xml +++ b/powertools-kafka/pom.xml @@ -37,7 +37,7 @@ 4.1.1 1.12.1 4.33.4 - 1.1.6 + 1.3.1 From 7a570023528760441775c1818554bce528af4e38 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 7 Apr 2026 11:24:41 +0200 Subject: [PATCH 150/202] chore: bump aws.sdk.version from 2.42.24 to 2.42.27 (#2453) chore: bump aws.sdk.version from 2.42.24 to 2.42.27 Reviewed and approved by @phipag. Review performed by Claude. --- examples/powertools-examples-cloudformation/pom.xml | 2 +- pom.xml | 2 +- powertools-e2e-tests/handlers/pom.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/powertools-examples-cloudformation/pom.xml b/examples/powertools-examples-cloudformation/pom.xml index 8ce045d66..003b49002 100644 --- a/examples/powertools-examples-cloudformation/pom.xml +++ b/examples/powertools-examples-cloudformation/pom.xml @@ -14,7 +14,7 @@ 11 1.4.0 3.16.1 - 2.42.24 + 2.42.27 1.9.20.1 diff --git a/pom.xml b/pom.xml index f297e1315..ad6f487aa 100644 --- a/pom.xml +++ b/pom.xml @@ -86,7 +86,7 @@ 2.25.4 2.0.17 2.21.1 - 2.42.24 + 2.42.27 2.21.0 2.2.0 UTF-8 diff --git a/powertools-e2e-tests/handlers/pom.xml b/powertools-e2e-tests/handlers/pom.xml index 4037ddb55..fdd3d39f2 100644 --- a/powertools-e2e-tests/handlers/pom.xml +++ b/powertools-e2e-tests/handlers/pom.xml @@ -19,7 +19,7 @@ 3.6.1 1.14.1 3.14.1 - 2.42.24 + 2.42.27 1.9.20.1 true From bddf6d923d05d30fa3ddf3e5ab495dcc6b237d18 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 7 Apr 2026 11:25:01 +0200 Subject: [PATCH 151/202] chore: bump org.apache.kafka:kafka-clients from 4.1.1 to 4.2.0 (#2452) chore: bump org.apache.kafka:kafka-clients from 4.1.1 to 4.2.0 Reviewed and approved by @phipag. Failing verify check manually verified as acceptable (license). Review performed by Claude. --- examples/powertools-examples-kafka/pom.xml | 2 +- powertools-kafka/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/powertools-examples-kafka/pom.xml b/examples/powertools-examples-kafka/pom.xml index aa76d208d..31acf89e2 100644 --- a/examples/powertools-examples-kafka/pom.xml +++ b/examples/powertools-examples-kafka/pom.xml @@ -24,7 +24,7 @@ org.apache.kafka kafka-clients - 4.1.1 + 4.2.0 org.apache.avro diff --git a/powertools-kafka/pom.xml b/powertools-kafka/pom.xml index 92e472936..aa47bce51 100644 --- a/powertools-kafka/pom.xml +++ b/powertools-kafka/pom.xml @@ -34,7 +34,7 @@ - 4.1.1 + 4.2.0 1.12.1 4.33.4 1.3.1 From b45503620a8d4d0614c8b803daf4e8b0792b1037 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 7 Apr 2026 18:49:30 +0200 Subject: [PATCH 152/202] chore: bump aws-actions/configure-aws-credentials from 6.0.0 to 6.1.0 (#2456) Bump aws-actions/configure-aws-credentials from 6.0.0 to 6.1.0. Reviewed and approved by @phipag. Review performed by Claude. --- .github/workflows/build-docs.yml | 2 +- .github/workflows/check-e2e.yml | 4 ++-- .github/workflows/release.yml | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build-docs.yml b/.github/workflows/build-docs.yml index 6a33820c7..de30c582b 100644 --- a/.github/workflows/build-docs.yml +++ b/.github/workflows/build-docs.yml @@ -43,7 +43,7 @@ jobs: docker build -t squidfunk/mkdocs-material ./docs/ docker run --rm -t -v ${PWD}:/docs squidfunk/mkdocs-material build - name: Configure AWS credentials - uses: aws-actions/configure-aws-credentials@8df5847569e6427dd6c4fb1cf565c83acfa8afa7 + uses: aws-actions/configure-aws-credentials@ec61189d14ec14c8efccab744f656cffd0e33f37 with: aws-region: us-east-1 role-to-assume: ${{ secrets.AWS_DOCS_ROLE_ARN }} diff --git a/.github/workflows/check-e2e.yml b/.github/workflows/check-e2e.yml index 4cf7234c9..ad0012da9 100644 --- a/.github/workflows/check-e2e.yml +++ b/.github/workflows/check-e2e.yml @@ -116,7 +116,7 @@ jobs: - name: Build all modules run: mvn -B -DskipTests -ntp install --file pom.xml - name: Setup AWS credentials - uses: aws-actions/configure-aws-credentials@8df5847569e6427dd6c4fb1cf565c83acfa8afa7 # v6.0.0 + uses: aws-actions/configure-aws-credentials@ec61189d14ec14c8efccab744f656cffd0e33f37 # v6.1.0 with: role-to-assume: ${{ secrets.AWS_IAM_ROLE }} aws-region: us-east-1 @@ -154,7 +154,7 @@ jobs: - name: Build all modules run: mvn -B -DskipTests -ntp install --file pom.xml - name: Setup AWS credentials - uses: aws-actions/configure-aws-credentials@8df5847569e6427dd6c4fb1cf565c83acfa8afa7 # v6.0.0 + uses: aws-actions/configure-aws-credentials@ec61189d14ec14c8efccab744f656cffd0e33f37 # v6.1.0 with: role-to-assume: ${{ secrets.AWS_IAM_ROLE }} aws-region: us-east-1 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index eab539ee1..b8b016433 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -286,7 +286,7 @@ jobs: docker build -t squidfunk/mkdocs-material ./docs/ docker run --rm -t -v ${PWD}:/docs squidfunk/mkdocs-material build - name: Configure AWS credentials - uses: aws-actions/configure-aws-credentials@8df5847569e6427dd6c4fb1cf565c83acfa8afa7 + uses: aws-actions/configure-aws-credentials@ec61189d14ec14c8efccab744f656cffd0e33f37 with: aws-region: us-east-1 role-to-assume: ${{ secrets.AWS_DOCS_ROLE_ARN }} From 8264d6f01a395b1a4f1c749559efb0c8dd51d794 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 7 Apr 2026 18:49:48 +0200 Subject: [PATCH 153/202] chore: bump aws.sdk.version from 2.42.27 to 2.42.29 (#2455) Bump aws.sdk.version from 2.42.27 to 2.42.29. Reviewed and approved by @phipag. Review performed by Claude. --- examples/powertools-examples-cloudformation/pom.xml | 2 +- pom.xml | 2 +- powertools-e2e-tests/handlers/pom.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/powertools-examples-cloudformation/pom.xml b/examples/powertools-examples-cloudformation/pom.xml index 003b49002..e8b0a5857 100644 --- a/examples/powertools-examples-cloudformation/pom.xml +++ b/examples/powertools-examples-cloudformation/pom.xml @@ -14,7 +14,7 @@ 11 1.4.0 3.16.1 - 2.42.27 + 2.42.29 1.9.20.1 diff --git a/pom.xml b/pom.xml index ad6f487aa..25d108aee 100644 --- a/pom.xml +++ b/pom.xml @@ -86,7 +86,7 @@ 2.25.4 2.0.17 2.21.1 - 2.42.27 + 2.42.29 2.21.0 2.2.0 UTF-8 diff --git a/powertools-e2e-tests/handlers/pom.xml b/powertools-e2e-tests/handlers/pom.xml index fdd3d39f2..72471d2c6 100644 --- a/powertools-e2e-tests/handlers/pom.xml +++ b/powertools-e2e-tests/handlers/pom.xml @@ -19,7 +19,7 @@ 3.6.1 1.14.1 3.14.1 - 2.42.27 + 2.42.29 1.9.20.1 true From 55cf3c5bef10c1bf98e1b9c8029748769632b128 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 7 Apr 2026 18:50:06 +0200 Subject: [PATCH 154/202] chore: bump com.google.protobuf:protobuf-java from 4.33.4 to 4.34.1 (#2454) Bump com.google.protobuf:protobuf-java from 4.33.4 to 4.34.1. Reviewed and approved by @phipag. Review performed by Claude. --- examples/powertools-examples-kafka/pom.xml | 2 +- powertools-kafka/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/powertools-examples-kafka/pom.xml b/examples/powertools-examples-kafka/pom.xml index 31acf89e2..ba29bcfb7 100644 --- a/examples/powertools-examples-kafka/pom.xml +++ b/examples/powertools-examples-kafka/pom.xml @@ -12,7 +12,7 @@ 11 1.9.20.1 1.12.1 - 4.33.4 + 4.34.1 diff --git a/powertools-kafka/pom.xml b/powertools-kafka/pom.xml index aa47bce51..2ff6a8e72 100644 --- a/powertools-kafka/pom.xml +++ b/powertools-kafka/pom.xml @@ -36,7 +36,7 @@ 4.2.0 1.12.1 - 4.33.4 + 4.34.1 1.3.1 From 0ea4f06a0ec456df0f70c2ca729020da311b2f4b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 8 Apr 2026 16:41:31 +0200 Subject: [PATCH 155/202] chore: bump software.amazon.awscdk:aws-cdk-lib from 2.243.0 to 2.248.0 (#2459) Bump software.amazon.awscdk:aws-cdk-lib from 2.243.0 to 2.248.0. Reviewed and approved by @phipag. Review performed by Claude. --- examples/powertools-examples-core-utilities/cdk/infra/pom.xml | 2 +- powertools-e2e-tests/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/powertools-examples-core-utilities/cdk/infra/pom.xml b/examples/powertools-examples-core-utilities/cdk/infra/pom.xml index eb4dae3d2..a3543464d 100644 --- a/examples/powertools-examples-core-utilities/cdk/infra/pom.xml +++ b/examples/powertools-examples-core-utilities/cdk/infra/pom.xml @@ -7,7 +7,7 @@ 2.10.0 UTF-8 - 2.243.0 + 2.248.0 [10.0.0,11.0.0) 5.14.1 diff --git a/powertools-e2e-tests/pom.xml b/powertools-e2e-tests/pom.xml index 1af7ce57d..92f49c4e7 100644 --- a/powertools-e2e-tests/pom.xml +++ b/powertools-e2e-tests/pom.xml @@ -31,7 +31,7 @@ 11 11 10.6.0 - 2.243.0 + 2.248.0 From ad28033f4733380364d7cf80a84674fb3857eaab Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 8 Apr 2026 16:41:50 +0200 Subject: [PATCH 156/202] chore: bump org.mockito:mockito-junit-jupiter from 5.21.0 to 5.23.0 (#2458) Bump org.mockito:mockito-junit-jupiter from 5.21.0 to 5.23.0. Aligns with mockito-core at 5.23.0. Reviewed and approved by @phipag. Review performed by Claude. --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 25d108aee..1bf75bb8d 100644 --- a/pom.xml +++ b/pom.xml @@ -115,7 +115,7 @@ 2.21.0 1.7.0 5.23.0 - 5.21.0 + 5.23.0 2.3.0 1.5.0 0.11.5 From 8326efc61165fcd4d2c9fb520ca745f79284ca24 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 9 Apr 2026 17:35:09 +0200 Subject: [PATCH 157/202] chore: bump com.amazonaws:aws-lambda-java-runtime-interface-client (#2462) Bump com.amazonaws:aws-lambda-java-runtime-interface-client from 2.9.0 to 2.10.1. Reviewed and approved by @phipag. Review performed by Claude. --- examples/powertools-examples-cloudformation/pom.xml | 2 +- examples/powertools-examples-core-utilities/sam-graalvm/pom.xml | 2 +- examples/powertools-examples-idempotency/sam-graalvm/pom.xml | 2 +- examples/powertools-examples-parameters/sam-graalvm/pom.xml | 2 +- examples/powertools-examples-serialization/sam-graalvm/pom.xml | 2 +- powertools-e2e-tests/handlers/pom.xml | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/examples/powertools-examples-cloudformation/pom.xml b/examples/powertools-examples-cloudformation/pom.xml index e8b0a5857..7fe9749a3 100644 --- a/examples/powertools-examples-cloudformation/pom.xml +++ b/examples/powertools-examples-cloudformation/pom.xml @@ -77,7 +77,7 @@ com.amazonaws aws-lambda-java-runtime-interface-client - 2.9.0 + 2.10.1 diff --git a/examples/powertools-examples-core-utilities/sam-graalvm/pom.xml b/examples/powertools-examples-core-utilities/sam-graalvm/pom.xml index 0dfd0a1ea..65bb86f01 100644 --- a/examples/powertools-examples-core-utilities/sam-graalvm/pom.xml +++ b/examples/powertools-examples-core-utilities/sam-graalvm/pom.xml @@ -49,7 +49,7 @@ com.amazonaws aws-lambda-java-runtime-interface-client - 2.9.0 + 2.10.1 org.apache.logging.log4j diff --git a/examples/powertools-examples-idempotency/sam-graalvm/pom.xml b/examples/powertools-examples-idempotency/sam-graalvm/pom.xml index 327a11450..1c07de40b 100644 --- a/examples/powertools-examples-idempotency/sam-graalvm/pom.xml +++ b/examples/powertools-examples-idempotency/sam-graalvm/pom.xml @@ -43,7 +43,7 @@ com.amazonaws aws-lambda-java-runtime-interface-client - 2.9.0 + 2.10.1 diff --git a/examples/powertools-examples-parameters/sam-graalvm/pom.xml b/examples/powertools-examples-parameters/sam-graalvm/pom.xml index 4a14e41d1..4f4d9493b 100644 --- a/examples/powertools-examples-parameters/sam-graalvm/pom.xml +++ b/examples/powertools-examples-parameters/sam-graalvm/pom.xml @@ -49,7 +49,7 @@ com.amazonaws aws-lambda-java-runtime-interface-client - 2.9.0 + 2.10.1 org.apache.logging.log4j diff --git a/examples/powertools-examples-serialization/sam-graalvm/pom.xml b/examples/powertools-examples-serialization/sam-graalvm/pom.xml index 8683f08ef..e2744223b 100644 --- a/examples/powertools-examples-serialization/sam-graalvm/pom.xml +++ b/examples/powertools-examples-serialization/sam-graalvm/pom.xml @@ -36,7 +36,7 @@ com.amazonaws aws-lambda-java-runtime-interface-client - 2.9.0 + 2.10.1 diff --git a/powertools-e2e-tests/handlers/pom.xml b/powertools-e2e-tests/handlers/pom.xml index 72471d2c6..1272d4c18 100644 --- a/powertools-e2e-tests/handlers/pom.xml +++ b/powertools-e2e-tests/handlers/pom.xml @@ -137,7 +137,7 @@ com.amazonaws aws-lambda-java-runtime-interface-client - 2.9.0 + 2.10.1 From 8c09de20b7bb4dc8b245c251a4241879111b6ac3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 9 Apr 2026 17:35:27 +0200 Subject: [PATCH 158/202] chore: bump org.apache.maven.plugins:maven-shade-plugin (#2461) Bump org.apache.maven.plugins:maven-shade-plugin from 3.6.1 to 3.6.2. Reviewed and approved by @phipag. Review performed by Claude. --- examples/powertools-examples-batch/pom.xml | 2 +- examples/powertools-examples-cloudformation/pom.xml | 2 +- examples/powertools-examples-core-utilities/cdk/app/pom.xml | 2 +- examples/powertools-examples-core-utilities/sam-graalvm/pom.xml | 2 +- examples/powertools-examples-core-utilities/sam/pom.xml | 2 +- examples/powertools-examples-core-utilities/serverless/pom.xml | 2 +- examples/powertools-examples-core-utilities/terraform/pom.xml | 2 +- examples/powertools-examples-idempotency/sam-graalvm/pom.xml | 2 +- examples/powertools-examples-idempotency/sam/pom.xml | 2 +- examples/powertools-examples-kafka/pom.xml | 2 +- examples/powertools-examples-parameters/sam-graalvm/pom.xml | 2 +- powertools-e2e-tests/handlers/pom.xml | 2 +- 12 files changed, 12 insertions(+), 12 deletions(-) diff --git a/examples/powertools-examples-batch/pom.xml b/examples/powertools-examples-batch/pom.xml index a82dbedae..d6acd6c4d 100644 --- a/examples/powertools-examples-batch/pom.xml +++ b/examples/powertools-examples-batch/pom.xml @@ -120,7 +120,7 @@ org.apache.maven.plugins maven-shade-plugin - 3.6.1 + 3.6.2 package diff --git a/examples/powertools-examples-cloudformation/pom.xml b/examples/powertools-examples-cloudformation/pom.xml index 7fe9749a3..7598528bd 100644 --- a/examples/powertools-examples-cloudformation/pom.xml +++ b/examples/powertools-examples-cloudformation/pom.xml @@ -116,7 +116,7 @@ org.apache.maven.plugins maven-shade-plugin - 3.6.1 + 3.6.2 package diff --git a/examples/powertools-examples-core-utilities/cdk/app/pom.xml b/examples/powertools-examples-core-utilities/cdk/app/pom.xml index 135e7ed91..93286d3f2 100644 --- a/examples/powertools-examples-core-utilities/cdk/app/pom.xml +++ b/examples/powertools-examples-core-utilities/cdk/app/pom.xml @@ -104,7 +104,7 @@ org.apache.maven.plugins maven-shade-plugin - 3.6.1 + 3.6.2 package diff --git a/examples/powertools-examples-core-utilities/sam-graalvm/pom.xml b/examples/powertools-examples-core-utilities/sam-graalvm/pom.xml index 65bb86f01..d707a821a 100644 --- a/examples/powertools-examples-core-utilities/sam-graalvm/pom.xml +++ b/examples/powertools-examples-core-utilities/sam-graalvm/pom.xml @@ -116,7 +116,7 @@ org.apache.maven.plugins maven-shade-plugin - 3.6.1 + 3.6.2 package diff --git a/examples/powertools-examples-core-utilities/sam/pom.xml b/examples/powertools-examples-core-utilities/sam/pom.xml index 7b5d1d87d..917215c21 100644 --- a/examples/powertools-examples-core-utilities/sam/pom.xml +++ b/examples/powertools-examples-core-utilities/sam/pom.xml @@ -90,7 +90,7 @@ org.apache.maven.plugins maven-shade-plugin - 3.6.1 + 3.6.2 package diff --git a/examples/powertools-examples-core-utilities/serverless/pom.xml b/examples/powertools-examples-core-utilities/serverless/pom.xml index 81aebb078..8e5ff0c9c 100644 --- a/examples/powertools-examples-core-utilities/serverless/pom.xml +++ b/examples/powertools-examples-core-utilities/serverless/pom.xml @@ -91,7 +91,7 @@ org.apache.maven.plugins maven-shade-plugin - 3.6.1 + 3.6.2 package diff --git a/examples/powertools-examples-core-utilities/terraform/pom.xml b/examples/powertools-examples-core-utilities/terraform/pom.xml index 92e6b709e..461737a7a 100644 --- a/examples/powertools-examples-core-utilities/terraform/pom.xml +++ b/examples/powertools-examples-core-utilities/terraform/pom.xml @@ -91,7 +91,7 @@ org.apache.maven.plugins maven-shade-plugin - 3.6.1 + 3.6.2 package diff --git a/examples/powertools-examples-idempotency/sam-graalvm/pom.xml b/examples/powertools-examples-idempotency/sam-graalvm/pom.xml index 1c07de40b..eeb32cae0 100644 --- a/examples/powertools-examples-idempotency/sam-graalvm/pom.xml +++ b/examples/powertools-examples-idempotency/sam-graalvm/pom.xml @@ -96,7 +96,7 @@ org.apache.maven.plugins maven-shade-plugin - 3.6.1 + 3.6.2 package diff --git a/examples/powertools-examples-idempotency/sam/pom.xml b/examples/powertools-examples-idempotency/sam/pom.xml index a206b6885..faf502deb 100644 --- a/examples/powertools-examples-idempotency/sam/pom.xml +++ b/examples/powertools-examples-idempotency/sam/pom.xml @@ -107,7 +107,7 @@ org.apache.maven.plugins maven-shade-plugin - 3.6.1 + 3.6.2 package diff --git a/examples/powertools-examples-kafka/pom.xml b/examples/powertools-examples-kafka/pom.xml index ba29bcfb7..0571c9dfe 100644 --- a/examples/powertools-examples-kafka/pom.xml +++ b/examples/powertools-examples-kafka/pom.xml @@ -64,7 +64,7 @@ org.apache.maven.plugins maven-shade-plugin - 3.6.1 + 3.6.2 package diff --git a/examples/powertools-examples-parameters/sam-graalvm/pom.xml b/examples/powertools-examples-parameters/sam-graalvm/pom.xml index 4f4d9493b..bfd4f6191 100644 --- a/examples/powertools-examples-parameters/sam-graalvm/pom.xml +++ b/examples/powertools-examples-parameters/sam-graalvm/pom.xml @@ -132,7 +132,7 @@ org.apache.maven.plugins maven-shade-plugin - 3.6.1 + 3.6.2 package diff --git a/powertools-e2e-tests/handlers/pom.xml b/powertools-e2e-tests/handlers/pom.xml index 1272d4c18..0a3a76031 100644 --- a/powertools-e2e-tests/handlers/pom.xml +++ b/powertools-e2e-tests/handlers/pom.xml @@ -16,7 +16,7 @@ 1.4.0 1.3.1 3.16.1 - 3.6.1 + 3.6.2 1.14.1 3.14.1 2.42.29 From bc845f69e648ce851faca012fca9a9917f1d8bde Mon Sep 17 00:00:00 2001 From: Philipp Page Date: Thu, 9 Apr 2026 17:38:08 +0200 Subject: [PATCH 159/202] chore(e2e): widen CloudWatch query window in MetricsE2ET to fix flaky test (#2460) * fix: widen CloudWatch query window in MetricsE2ET to fix flaky test Pad the CloudWatch query time window by -1min/+2min for standard resolution metric queries to account for CloudWatch eventual consistency. Metric timestamps can shift by up to a minute during batch processing, causing MetricDataNotFoundException when using a tight 1-minute window. Closes #2440 Co-Authored-By: Claude Opus 4.6 * fix: also pad high-resolution metric query window The high-res metric query (period=1s) also fails with the original 1-minute window due to CloudWatch eventual consistency. Apply the same padded window and sum all returned data points, since only the high-resolution metric appears at 1-second granularity. Co-Authored-By: Claude Opus 4.6 * fix: assert high-res metric value is present instead of summing With the padded window, both standard (4) and high-res (8) product metrics appear as separate 1-second buckets, so the sum is 12 not 8. Instead, assert that the high-res value (8.0) is contained in the returned data points. Co-Authored-By: Claude Opus 4.6 --------- Co-authored-by: Claude Opus 4.6 --- .../amazon/lambda/powertools/MetricsE2ET.java | 31 ++++++++++--------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/powertools-e2e-tests/src/test/java/software/amazon/lambda/powertools/MetricsE2ET.java b/powertools-e2e-tests/src/test/java/software/amazon/lambda/powertools/MetricsE2ET.java index 35f8b5ba3..ceb4b8c57 100644 --- a/powertools-e2e-tests/src/test/java/software/amazon/lambda/powertools/MetricsE2ET.java +++ b/powertools-e2e-tests/src/test/java/software/amazon/lambda/powertools/MetricsE2ET.java @@ -18,7 +18,6 @@ import static software.amazon.lambda.powertools.testutils.Infrastructure.FUNCTION_NAME_OUTPUT; import static software.amazon.lambda.powertools.testutils.lambda.LambdaInvoker.invokeFunction; -import java.time.Clock; import java.time.Instant; import java.time.temporal.ChronoUnit; import java.util.Collections; @@ -74,7 +73,6 @@ static void tearDown() { void test_recordMetrics() { // GIVEN - Instant currentTimeTruncatedToMinutes = Instant.now(Clock.systemUTC()).truncatedTo(ChronoUnit.MINUTES); String event1 = "{ \"metrics\": {\"orders\": 1, \"products\": 4}, \"dimensions\": { \"Environment\": \"test\"}, \"highResolution\": \"false\"}"; String event2 = "{ \"metrics\": {\"orders\": 1, \"products\": 8}, \"dimensions\": { \"Environment\": \"test\"}, \"highResolution\": \"true\"}"; @@ -84,15 +82,20 @@ void test_recordMetrics() { invokeFunction(functionName, event2); // THEN + // Pad the query window to address CloudWatch eventual consistency: + // metric timestamps can shift by up to a minute during batch processing. + Instant paddedStart = invocationResult.getStart().minus(1, ChronoUnit.MINUTES); + Instant paddedEnd = invocationResult.getEnd().plus(2, ChronoUnit.MINUTES); + MetricsFetcher metricsFetcher = new MetricsFetcher(); - List coldStart = metricsFetcher.fetchMetrics(invocationResult.getStart(), invocationResult.getEnd(), 60, + List coldStart = metricsFetcher.fetchMetrics(paddedStart, paddedEnd, 60, NAMESPACE, "ColdStart", Stream.of(new String[][] { { "FunctionName", functionName }, { "Service", SERVICE } }).collect(Collectors.toMap(data -> data[0], data -> data[1]))); assertThat(coldStart.get(0)).isEqualTo(1); List orderMetrics = RetryUtils.withRetry(() -> { - List metrics = metricsFetcher.fetchMetrics(invocationResult.getStart(), invocationResult.getEnd(), + List metrics = metricsFetcher.fetchMetrics(paddedStart, paddedEnd, 60, NAMESPACE, "orders", Collections.singletonMap("Environment", "test")); if (metrics.get(0) != 2.0) { throw new DataNotReadyException("Expected 2.0 orders but got " + metrics.get(0)); @@ -100,30 +103,28 @@ void test_recordMetrics() { return metrics; }, "orderMetricsRetry", DataNotReadyException.class).get(); assertThat(orderMetrics.get(0)).isEqualTo(2); - List productMetrics = metricsFetcher.fetchMetrics(invocationResult.getStart(), - invocationResult.getEnd(), 60, NAMESPACE, + List productMetrics = metricsFetcher.fetchMetrics(paddedStart, + paddedEnd, 60, NAMESPACE, "products", Collections.singletonMap("Environment", "test")); // When searching across a 1 minute time period with a period of 60 we find both metrics and the sum is 12 assertThat(productMetrics.get(0)).isEqualTo(12); - orderMetrics = metricsFetcher.fetchMetrics(invocationResult.getStart(), invocationResult.getEnd(), 60, + orderMetrics = metricsFetcher.fetchMetrics(paddedStart, paddedEnd, 60, NAMESPACE, "orders", Collections.singletonMap("Service", SERVICE)); assertThat(orderMetrics.get(0)).isEqualTo(2); - productMetrics = metricsFetcher.fetchMetrics(invocationResult.getStart(), invocationResult.getEnd(), 60, + productMetrics = metricsFetcher.fetchMetrics(paddedStart, paddedEnd, 60, NAMESPACE, "products", Collections.singletonMap("Service", SERVICE)); assertThat(productMetrics.get(0)).isEqualTo(12); - Instant searchStartTime = currentTimeTruncatedToMinutes.plusSeconds(15); - Instant searchEndTime = currentTimeTruncatedToMinutes.plusSeconds(45); - - List productMetricDataResult = metricsFetcher.fetchMetrics(searchStartTime, searchEndTime, 1, NAMESPACE, + List productMetricDataResult = metricsFetcher.fetchMetrics(paddedStart, + paddedEnd, 1, NAMESPACE, "products", Collections.singletonMap("Environment", "test")); - // We are searching across the time period the metric was created but with a period of 1 second. Only the high - // resolution metric will be available at this point - assertThat(productMetricDataResult.get(0)).isEqualTo(8); + // With a period of 1 second and a padded window, both standard (4) and high resolution (8) + // metrics may appear as separate 1-second buckets. Verify the high resolution value is present. + assertThat(productMetricDataResult).contains(8.0); } } From 2db380f2ec75e435aec15d4a292048dea777167b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 13 Apr 2026 17:23:34 +0200 Subject: [PATCH 160/202] chore: bump actions/upload-artifact from 7.0.0 to 7.0.1 (#2467) Bump actions/upload-artifact from 7.0.0 to 7.0.1. Reviewed and approved by @phipag. Review performed by Claude. --- .github/workflows/release.yml | 2 +- .github/workflows/security-scorecard.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index b8b016433..ba7d018d0 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -113,7 +113,7 @@ jobs: snapshot: ${{ inputs.snapshot}} - id: upload_source name: Upload artifacts - uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: if-no-files-found: error name: source diff --git a/.github/workflows/security-scorecard.yml b/.github/workflows/security-scorecard.yml index 7e535fe7b..5492a9339 100644 --- a/.github/workflows/security-scorecard.yml +++ b/.github/workflows/security-scorecard.yml @@ -47,7 +47,7 @@ jobs: publish_results: true repo_token: ${{ secrets.SCORECARD_TOKEN }} - name: Upload Results - uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: SARIF file path: results.sarif From b689f125af10a99fd7758290b65f255a0a1c90e7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 13 Apr 2026 17:23:51 +0200 Subject: [PATCH 161/202] chore: bump release-drafter/release-drafter from 7.1.1 to 7.2.0 (#2466) Bump release-drafter/release-drafter from 7.1.1 to 7.2.0. Reviewed and approved by @phipag. Review performed by Claude. --- .github/workflows/release-drafter.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release-drafter.yml b/.github/workflows/release-drafter.yml index b492f2d86..f0104f177 100644 --- a/.github/workflows/release-drafter.yml +++ b/.github/workflows/release-drafter.yml @@ -23,6 +23,6 @@ jobs: contents: write # required for creating draft releases steps: - name: Relase Drafter - uses: release-drafter/release-drafter@139054aeaa9adc52ab36ddf67437541f039b88e2 + uses: release-drafter/release-drafter@5de93583980a40bd78603b6dfdcda5b4df377b32 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} From 2d157fc03e29f1ca6c19df41e0076b95126640d7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 13 Apr 2026 17:24:08 +0200 Subject: [PATCH 162/202] chore: bump sam/build-java25 (#2465) Bump sam/build-java25 Docker digest in e2e tests. Reviewed and approved by @phipag. Review performed by Claude. --- powertools-e2e-tests/src/test/resources/docker/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/powertools-e2e-tests/src/test/resources/docker/Dockerfile b/powertools-e2e-tests/src/test/resources/docker/Dockerfile index ca209af17..d7cc856bc 100644 --- a/powertools-e2e-tests/src/test/resources/docker/Dockerfile +++ b/powertools-e2e-tests/src/test/resources/docker/Dockerfile @@ -1,5 +1,5 @@ # Use the official AWS SAM base image for Java 25 -FROM public.ecr.aws/sam/build-java25@sha256:badfeb1beb0ae397f9b170a5139c49bff9bd0912c8debdb8c4c17a53e70b6195 +FROM public.ecr.aws/sam/build-java25@sha256:9ddb7b5954969c5d734b2dcd74ffd68b93816adc56a12209f6b8620ac107c899 # Install GraalVM dependencies RUN curl -4 -L https://download.oracle.com/graalvm/25/latest/graalvm-jdk-25_linux-x64_bin.tar.gz | tar -xvz From ab50f56028cc68bc8e6a2d59b4f46353b5309083 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 13 Apr 2026 17:24:25 +0200 Subject: [PATCH 163/202] chore: bump org.codehaus.mojo:exec-maven-plugin from 3.6.2 to 3.6.3 (#2464) Bump org.codehaus.mojo:exec-maven-plugin from 3.6.2 to 3.6.3. Reviewed and approved by @phipag. Review performed by Claude. --- examples/powertools-examples-core-utilities/cdk/infra/pom.xml | 2 +- pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/powertools-examples-core-utilities/cdk/infra/pom.xml b/examples/powertools-examples-core-utilities/cdk/infra/pom.xml index a3543464d..12faaeb91 100644 --- a/examples/powertools-examples-core-utilities/cdk/infra/pom.xml +++ b/examples/powertools-examples-core-utilities/cdk/infra/pom.xml @@ -25,7 +25,7 @@ org.codehaus.mojo exec-maven-plugin - 3.6.2 + 3.6.3 cdk.CdkApp diff --git a/pom.xml b/pom.xml index 1bf75bb8d..00b5da84a 100644 --- a/pom.xml +++ b/pom.xml @@ -450,7 +450,7 @@ org.codehaus.mojo exec-maven-plugin - 3.6.2 + 3.6.3 org.graalvm.buildtools From 5f4b010bc4b13d5f85c02b8aabecd528ad297cc4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 13 Apr 2026 17:24:43 +0200 Subject: [PATCH 164/202] chore: bump aws.sdk.version from 2.42.29 to 2.42.32 (#2463) Bump aws.sdk.version from 2.42.29 to 2.42.32. Reviewed and approved by @phipag. Review performed by Claude. --- examples/powertools-examples-cloudformation/pom.xml | 2 +- pom.xml | 2 +- powertools-e2e-tests/handlers/pom.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/powertools-examples-cloudformation/pom.xml b/examples/powertools-examples-cloudformation/pom.xml index 7598528bd..81ee8d962 100644 --- a/examples/powertools-examples-cloudformation/pom.xml +++ b/examples/powertools-examples-cloudformation/pom.xml @@ -14,7 +14,7 @@ 11 1.4.0 3.16.1 - 2.42.29 + 2.42.32 1.9.20.1 diff --git a/pom.xml b/pom.xml index 00b5da84a..2fb224475 100644 --- a/pom.xml +++ b/pom.xml @@ -86,7 +86,7 @@ 2.25.4 2.0.17 2.21.1 - 2.42.29 + 2.42.32 2.21.0 2.2.0 UTF-8 diff --git a/powertools-e2e-tests/handlers/pom.xml b/powertools-e2e-tests/handlers/pom.xml index 0a3a76031..0d2f80902 100644 --- a/powertools-e2e-tests/handlers/pom.xml +++ b/powertools-e2e-tests/handlers/pom.xml @@ -19,7 +19,7 @@ 3.6.2 1.14.1 3.14.1 - 2.42.29 + 2.42.32 1.9.20.1 true From 28802fdb85963f29a7303071f81e37519f7489b7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 14 Apr 2026 17:57:43 +0200 Subject: [PATCH 165/202] chore: bump org.apache.kafka:kafka-clients (#2468) Bump org.apache.kafka:kafka-clients from 4.0.0 to 4.0.2 in examples/powertools-examples-kafka/tools. Patch-level update with security fixes (4 CVEs) and bug fixes. No breaking changes. Reviewed and approved by @phipag. Review performed by Claude. --- examples/powertools-examples-kafka/tools/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/powertools-examples-kafka/tools/pom.xml b/examples/powertools-examples-kafka/tools/pom.xml index 7fb12f136..bcb3d84d5 100644 --- a/examples/powertools-examples-kafka/tools/pom.xml +++ b/examples/powertools-examples-kafka/tools/pom.xml @@ -13,7 +13,7 @@ 11 1.12.1 4.31.0 - 4.0.0 + 4.0.2 From f9596a54c4a459d2c1afe1c26b4c05cecc4c9cb0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 15 Apr 2026 13:32:26 +0200 Subject: [PATCH 166/202] chore: bump org.junit.jupiter:junit-jupiter from 5.14.1 to 5.14.3 (#2470) Bump org.junit.jupiter:junit-jupiter from 5.14.1 to 5.14.3 in examples CDK pom. Patch-level update with 2 bug fixes, no breaking changes. Reviewed and approved by @phipag. Review performed by Claude. --- examples/powertools-examples-core-utilities/cdk/infra/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/powertools-examples-core-utilities/cdk/infra/pom.xml b/examples/powertools-examples-core-utilities/cdk/infra/pom.xml index 12faaeb91..2231d945a 100644 --- a/examples/powertools-examples-core-utilities/cdk/infra/pom.xml +++ b/examples/powertools-examples-core-utilities/cdk/infra/pom.xml @@ -9,7 +9,7 @@ UTF-8 2.248.0 [10.0.0,11.0.0) - 5.14.1 + 5.14.3 From 0d1c06459e23a3097c62edcd628f74355aee9b3b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 15 Apr 2026 13:32:45 +0200 Subject: [PATCH 167/202] chore: bump aws.sdk.version from 2.42.32 to 2.42.34 (#2469) Bump aws.sdk.version from 2.42.32 to 2.42.34. Patch-level update with DynamoDB Enhanced Client bug fix and Netty connection hygiene improvement, no breaking changes. Reviewed and approved by @phipag. Review performed by Claude. --- examples/powertools-examples-cloudformation/pom.xml | 2 +- pom.xml | 2 +- powertools-e2e-tests/handlers/pom.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/powertools-examples-cloudformation/pom.xml b/examples/powertools-examples-cloudformation/pom.xml index 81ee8d962..9a4d3e9d8 100644 --- a/examples/powertools-examples-cloudformation/pom.xml +++ b/examples/powertools-examples-cloudformation/pom.xml @@ -14,7 +14,7 @@ 11 1.4.0 3.16.1 - 2.42.32 + 2.42.34 1.9.20.1 diff --git a/pom.xml b/pom.xml index 2fb224475..90c41bd36 100644 --- a/pom.xml +++ b/pom.xml @@ -86,7 +86,7 @@ 2.25.4 2.0.17 2.21.1 - 2.42.32 + 2.42.34 2.21.0 2.2.0 UTF-8 diff --git a/powertools-e2e-tests/handlers/pom.xml b/powertools-e2e-tests/handlers/pom.xml index 0d2f80902..b93fe597c 100644 --- a/powertools-e2e-tests/handlers/pom.xml +++ b/powertools-e2e-tests/handlers/pom.xml @@ -19,7 +19,7 @@ 3.6.2 1.14.1 3.14.1 - 2.42.32 + 2.42.34 1.9.20.1 true From 83298c9fbdf0ce41a57d7ffb62dc575e247149cb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 17 Apr 2026 11:42:36 +0200 Subject: [PATCH 168/202] chore: bump github/codeql-action from 4.35.1 to 4.35.2 (#2474) Bump github/codeql-action from 4.35.1 to 4.35.2. Reviewed and approved by @phipag. Review performed by Claude. --- .github/workflows/security-scorecard.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/security-scorecard.yml b/.github/workflows/security-scorecard.yml index 5492a9339..bf06629f4 100644 --- a/.github/workflows/security-scorecard.yml +++ b/.github/workflows/security-scorecard.yml @@ -53,6 +53,6 @@ jobs: path: results.sarif retention-days: 5 - name: Upload to Code-Scanning - uses: github/codeql-action/upload-sarif@c10b8064de6f491fea524254123dbe5e09572f13 # v3.29.5 + uses: github/codeql-action/upload-sarif@95e58e9a2cdfd71adc6e0353d5c52f41a045d225 # v3.29.5 with: sarif_file: results.sarif From 888497df556fd97543b2b47c90763488cd0d2356 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 17 Apr 2026 11:42:54 +0200 Subject: [PATCH 169/202] chore: bump aws.sdk.version from 2.41.11 to 2.42.34 (#2473) Bump aws.sdk.version from 2.41.11 to 2.42.34 in batch example module. Reviewed and approved by @phipag. Review performed by Claude. --- examples/powertools-examples-batch/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/powertools-examples-batch/pom.xml b/examples/powertools-examples-batch/pom.xml index d6acd6c4d..d566ac351 100644 --- a/examples/powertools-examples-batch/pom.xml +++ b/examples/powertools-examples-batch/pom.xml @@ -14,7 +14,7 @@ 11 11 1.9.20.1 - 2.41.11 + 2.42.34 From 865ec5db68fb482f0779576de4f96ab45887153c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 17 Apr 2026 11:43:11 +0200 Subject: [PATCH 170/202] chore: bump software.amazon.awscdk:aws-cdk-lib from 2.248.0 to 2.250.0 (#2472) Bump software.amazon.awscdk:aws-cdk-lib from 2.248.0 to 2.250.0. Reviewed and approved by @phipag. Review performed by Claude. --- examples/powertools-examples-core-utilities/cdk/infra/pom.xml | 2 +- powertools-e2e-tests/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/powertools-examples-core-utilities/cdk/infra/pom.xml b/examples/powertools-examples-core-utilities/cdk/infra/pom.xml index 2231d945a..9893c5fd6 100644 --- a/examples/powertools-examples-core-utilities/cdk/infra/pom.xml +++ b/examples/powertools-examples-core-utilities/cdk/infra/pom.xml @@ -7,7 +7,7 @@ 2.10.0 UTF-8 - 2.248.0 + 2.250.0 [10.0.0,11.0.0) 5.14.3 diff --git a/powertools-e2e-tests/pom.xml b/powertools-e2e-tests/pom.xml index 92f49c4e7..f8c2ffcc9 100644 --- a/powertools-e2e-tests/pom.xml +++ b/powertools-e2e-tests/pom.xml @@ -31,7 +31,7 @@ 11 11 10.6.0 - 2.248.0 + 2.250.0 From 503cd76c64d88f863527c3e8e1ed297dbf0c4f8e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 17 Apr 2026 14:36:31 +0200 Subject: [PATCH 171/202] chore: bump org.apache.maven.plugins:maven-surefire-plugin (#2476) Bump maven-surefire-plugin from 3.5.4 to 3.5.5. Patch release with bug fixes and minor features, no breaking changes. Reviewed and approved by @phipag. Review performed by Claude. --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 90c41bd36..31442af58 100644 --- a/pom.xml +++ b/pom.xml @@ -102,7 +102,7 @@ 3.4.0 3.2.1 1.14.1 - 3.5.4 + 3.5.5 0.8.14 1.7.0 3.12.0 From 60cde355470942c7a28ddd3f3ccc5413b2026dc5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 17 Apr 2026 14:36:49 +0200 Subject: [PATCH 172/202] chore: bump aws.sdk.version from 2.42.34 to 2.42.35 (#2475) Bump aws.sdk.version from 2.42.34 to 2.42.35. Patch release with bug fixes and new service features, no breaking changes. Reviewed and approved by @phipag. Review performed by Claude. --- examples/powertools-examples-cloudformation/pom.xml | 2 +- pom.xml | 2 +- powertools-e2e-tests/handlers/pom.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/powertools-examples-cloudformation/pom.xml b/examples/powertools-examples-cloudformation/pom.xml index 9a4d3e9d8..4e45417d3 100644 --- a/examples/powertools-examples-cloudformation/pom.xml +++ b/examples/powertools-examples-cloudformation/pom.xml @@ -14,7 +14,7 @@ 11 1.4.0 3.16.1 - 2.42.34 + 2.42.35 1.9.20.1 diff --git a/pom.xml b/pom.xml index 31442af58..7d8fdc64c 100644 --- a/pom.xml +++ b/pom.xml @@ -86,7 +86,7 @@ 2.25.4 2.0.17 2.21.1 - 2.42.34 + 2.42.35 2.21.0 2.2.0 UTF-8 diff --git a/powertools-e2e-tests/handlers/pom.xml b/powertools-e2e-tests/handlers/pom.xml index b93fe597c..0b030ab24 100644 --- a/powertools-e2e-tests/handlers/pom.xml +++ b/powertools-e2e-tests/handlers/pom.xml @@ -19,7 +19,7 @@ 3.6.2 1.14.1 3.14.1 - 2.42.34 + 2.42.35 1.9.20.1 true From 69723c642ce346ea031a5baf676cadb8d44186b2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 21 Apr 2026 11:43:48 +0200 Subject: [PATCH 173/202] chore: bump tj-actions/changed-files from 47.0.5 to 47.0.6 (#2479) Reviewed and approved by @phipag. Review performed by Claude (Opus 4.7) via /dependabot-review. Patch bump; SHA verified; no functional changes. --- .github/workflows/check-build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/check-build.yml b/.github/workflows/check-build.yml index eac133b63..ecc47feb6 100644 --- a/.github/workflows/check-build.yml +++ b/.github/workflows/check-build.yml @@ -101,7 +101,7 @@ jobs: fetch-depth: 0 - name: Get changed files id: changed-files - uses: tj-actions/changed-files@22103cc46bda19c2b464ffe86db46df6922fd323 # v47.0.5 + uses: tj-actions/changed-files@9426d40962ed5378910ee2e21d5f8c6fcbf2dd96 # v47.0.6 with: files: | powertools-*/** From 295e4dc952c61045fca61e5bc8fccb1b9d34e742 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 21 Apr 2026 11:44:06 +0200 Subject: [PATCH 174/202] chore: bump org.apache.maven.plugins:maven-compiler-plugin (#2478) Reviewed and approved by @phipag. Review performed by Claude (Opus 4.7) via /dependabot-review. Minor bump; no breaking changes affect this repo. --- examples/powertools-examples-core-utilities/cdk/infra/pom.xml | 2 +- pom.xml | 2 +- powertools-e2e-tests/handlers/pom.xml | 2 +- powertools-e2e-tests/pom.xml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/examples/powertools-examples-core-utilities/cdk/infra/pom.xml b/examples/powertools-examples-core-utilities/cdk/infra/pom.xml index 9893c5fd6..73180ab67 100644 --- a/examples/powertools-examples-core-utilities/cdk/infra/pom.xml +++ b/examples/powertools-examples-core-utilities/cdk/infra/pom.xml @@ -16,7 +16,7 @@ org.apache.maven.plugins maven-compiler-plugin - 3.14.1 + 3.15.0 11 11 diff --git a/pom.xml b/pom.xml index 7d8fdc64c..528339459 100644 --- a/pom.xml +++ b/pom.xml @@ -93,7 +93,7 @@ 1.4.0 3.16.1 1.3.1 - 3.14.1 + 3.15.0 1.9.7 1.13.1 0.8.11 diff --git a/powertools-e2e-tests/handlers/pom.xml b/powertools-e2e-tests/handlers/pom.xml index 0b030ab24..4a2acb298 100644 --- a/powertools-e2e-tests/handlers/pom.xml +++ b/powertools-e2e-tests/handlers/pom.xml @@ -18,7 +18,7 @@ 3.16.1 3.6.2 1.14.1 - 3.14.1 + 3.15.0 2.42.35 1.9.20.1 true diff --git a/powertools-e2e-tests/pom.xml b/powertools-e2e-tests/pom.xml index f8c2ffcc9..13e62c67e 100644 --- a/powertools-e2e-tests/pom.xml +++ b/powertools-e2e-tests/pom.xml @@ -197,7 +197,7 @@ org.apache.maven.plugins maven-compiler-plugin - 3.14.1 + 3.15.0 ${maven.compiler.source} ${maven.compiler.target} From 8565ca4a0766a6b28dcf9dafe8ad5fd0a0e7dcf8 Mon Sep 17 00:00:00 2001 From: Pratap Chandra Deo <61131823+Pratapchandradeo@users.noreply.github.com> Date: Tue, 21 Apr 2026 19:24:32 +0530 Subject: [PATCH 175/202] feat(logging): add automatic TenantId logging to Logger default properties (#2471) * feat: add automatic TenantId logging to Logger default properties - Add TENANT_ID to PowertoolsLoggedFields enum with null-safety checks - Create TENANT_ID_RESOLVER in Log4j2 PowertoolsResolver with isResolvable check - Register TENANT_ID resolver in eventResolverMap for Log4j2 support - Add TENANT_ID_ATTR_NAME constant to LambdaEcsEncoder (ECS format: tenant.id) - Add conditional null-safe serialization of tenant_id in Logback ECS encoder - Update LambdaJsonLayout.json to include tenant_id field for Log4j2 JSON - Update LambdaEcsLayout.json to include tenant.id field for Log4j2 ECS - Update LambdaJsonEncoder JavaDoc to include tenant_id in listed fields - Add getTenantId() override in TestLambdaContext test stub - Update test assertions in LambdaJsonEncoderTest to verify tenant_id in output Fixes: #2348 References: #2358 This implementation follows AWS Lambda Tenant Isolation feature requirements and applies null-safety patterns consistent with correlation_id handling. * chnges done as for the comment * feat: add null-safe tenant_id logging for Lambda Tenant Isolation * fix: update tests for default tenant_id logging - Update LambdaLoggingAspectTest expected MDC size and tenant_id assertions - Update LambdaEcsEncoderTest expected ECS output to include tenant.id - Make ECS exception stack assertion OS-safe for Windows line endings * Updated the failing tests to match the new tenant field behavior. - Log4j JSON/ECS tests now check the important fields separately instead of relying on one long exact substring. - Fixed the KeyBuffer warning assertion to be less brittle across environments. I also ran the logging modules locally and they pass: `mvn clean test -pl powertools-logging,powertools-logging-log4j,powertools-logging-logback -am` --- .../common/stubs/TestLambdaContext.java | 5 +++ .../json/resolver/PowertoolsResolver.java | 19 ++++++++ .../src/main/resources/LambdaEcsLayout.json | 6 ++- .../src/main/resources/LambdaJsonLayout.json | 6 ++- .../PowerToolsResolverFactoryTest.java | 8 +++- .../logging/logback/LambdaEcsEncoder.java | 8 ++++ .../logging/logback/LambdaJsonEncoder.java | 5 ++- .../internal/LambdaEcsEncoderTest.java | 9 ++-- .../internal/LambdaJsonEncoderTest.java | 43 ++++++++++++++++--- .../internal/PowertoolsLoggedFields.java | 7 ++- .../logging/internal/KeyBufferTest.java | 6 +-- .../internal/LambdaLoggingAspectTest.java | 5 ++- 12 files changed, 109 insertions(+), 18 deletions(-) diff --git a/powertools-common/src/test/java/software/amazon/lambda/powertools/common/stubs/TestLambdaContext.java b/powertools-common/src/test/java/software/amazon/lambda/powertools/common/stubs/TestLambdaContext.java index 6b66b66b7..f54db723b 100644 --- a/powertools-common/src/test/java/software/amazon/lambda/powertools/common/stubs/TestLambdaContext.java +++ b/powertools-common/src/test/java/software/amazon/lambda/powertools/common/stubs/TestLambdaContext.java @@ -74,4 +74,9 @@ public int getMemoryLimitInMB() { public LambdaLogger getLogger() { return null; } + + @Override + public String getTenantId() { + return "test-tenant"; + } } diff --git a/powertools-logging/powertools-logging-log4j/src/main/java/org/apache/logging/log4j/layout/template/json/resolver/PowertoolsResolver.java b/powertools-logging/powertools-logging-log4j/src/main/java/org/apache/logging/log4j/layout/template/json/resolver/PowertoolsResolver.java index cef5b86ee..a3283e38a 100644 --- a/powertools-logging/powertools-logging-log4j/src/main/java/org/apache/logging/log4j/layout/template/json/resolver/PowertoolsResolver.java +++ b/powertools-logging/powertools-logging-log4j/src/main/java/org/apache/logging/log4j/layout/template/json/resolver/PowertoolsResolver.java @@ -25,6 +25,7 @@ import static software.amazon.lambda.powertools.logging.internal.PowertoolsLoggedFields.FUNCTION_VERSION; import static software.amazon.lambda.powertools.logging.internal.PowertoolsLoggedFields.SAMPLING_RATE; import static software.amazon.lambda.powertools.logging.internal.PowertoolsLoggedFields.SERVICE; +import static software.amazon.lambda.powertools.logging.internal.PowertoolsLoggedFields.TENANT_ID; import java.io.IOException; import java.util.Collections; @@ -186,6 +187,23 @@ public void resolve(LogEvent logEvent, JsonWriter jsonWriter) { } }; + private static final EventResolver TENANT_ID_RESOLVER = new EventResolver() { + @Override + public boolean isResolvable(LogEvent logEvent) { + final String tenantId = + logEvent.getContextData().getValue(PowertoolsLoggedFields.TENANT_ID.getName()); + return null != tenantId && !tenantId.isEmpty(); + } + + @Override + public void resolve(LogEvent logEvent, JsonWriter jsonWriter) { + final String tenantId = + logEvent.getContextData().getValue(PowertoolsLoggedFields.TENANT_ID.getName()); + jsonWriter.writeString(tenantId); + } + }; + + @SuppressWarnings("java:S106") private static final EventResolver NON_POWERTOOLS_FIELD_RESOLVER = (LogEvent logEvent, JsonWriter jsonWriter) -> { @@ -233,6 +251,7 @@ public void resolve(LogEvent logEvent, JsonWriter jsonWriter) { { FUNCTION_TRACE_ID.getName(), XRAY_TRACE_RESOLVER }, { CORRELATION_ID.getName(), CORRELATION_ID_RESOLVER }, { SAMPLING_RATE.getName(), SAMPLING_RATE_RESOLVER }, + { TENANT_ID.getName(), TENANT_ID_RESOLVER }, { "region", REGION_RESOLVER }, { "account_id", ACCOUNT_ID_RESOLVER } }).collect(Collectors.toMap(data -> (String) data[0], data -> (EventResolver) data[1]))); diff --git a/powertools-logging/powertools-logging-log4j/src/main/resources/LambdaEcsLayout.json b/powertools-logging/powertools-logging-log4j/src/main/resources/LambdaEcsLayout.json index 58b30f60e..24dbaa0ba 100644 --- a/powertools-logging/powertools-logging-log4j/src/main/resources/LambdaEcsLayout.json +++ b/powertools-logging/powertools-logging-log4j/src/main/resources/LambdaEcsLayout.json @@ -87,7 +87,11 @@ "$resolver": "powertools", "field": "correlation_id" }, + "tenant.id": { + "$resolver": "powertools", + "field": "tenant_id" + }, "": { "$resolver": "powertools" } -} +} \ No newline at end of file diff --git a/powertools-logging/powertools-logging-log4j/src/main/resources/LambdaJsonLayout.json b/powertools-logging/powertools-logging-log4j/src/main/resources/LambdaJsonLayout.json index 793006502..1e9b5f4db 100644 --- a/powertools-logging/powertools-logging-log4j/src/main/resources/LambdaJsonLayout.json +++ b/powertools-logging/powertools-logging-log4j/src/main/resources/LambdaJsonLayout.json @@ -69,7 +69,11 @@ "$resolver": "powertools", "field": "correlation_id" }, + "tenant_id": { + "$resolver": "powertools", + "field": "tenant_id" + }, "": { "$resolver": "powertools" } -} +} \ No newline at end of file diff --git a/powertools-logging/powertools-logging-log4j/src/test/java/org/apache/logging/log4j/layout/template/json/resolver/PowerToolsResolverFactoryTest.java b/powertools-logging/powertools-logging-log4j/src/test/java/org/apache/logging/log4j/layout/template/json/resolver/PowerToolsResolverFactoryTest.java index 46b5b65d4..7ff7abaaa 100644 --- a/powertools-logging/powertools-logging-log4j/src/test/java/org/apache/logging/log4j/layout/template/json/resolver/PowerToolsResolverFactoryTest.java +++ b/powertools-logging/powertools-logging-log4j/src/test/java/org/apache/logging/log4j/layout/template/json/resolver/PowerToolsResolverFactoryTest.java @@ -79,7 +79,9 @@ void shouldLogInJsonFormat() { File logFile = new File("target/logfile.json"); assertThat(contentOf(logFile)).contains( "{\"level\":\"DEBUG\",\"message\":\"Test debug event\",\"cold_start\":true,\"function_arn\":\"arn:aws:lambda:us-east-1:123456789012:function:test\",\"function_memory_size\":128,\"function_name\":\"test-function\",\"function_request_id\":\"test-request-id\",\"function_version\":\"1\",\"service\":\"testLog4j\",\"timestamp\":") - .contains("\"xray_trace_id\":\"1-63441c4a-abcdef012345678912345678\",\"myKey\":\"myValue\"}\n"); + .contains("\"xray_trace_id\":\"1-63441c4a-abcdef012345678912345678\"") + .contains("\"tenant_id\":\"test-tenant\"") + .contains("\"myKey\":\"myValue\""); } @Test @@ -89,7 +91,9 @@ void shouldLogInEcsFormat() { File logFile = new File("target/ecslogfile.json"); assertThat(contentOf(logFile)).contains( - "\"ecs.version\":\"1.2.0\",\"log.level\":\"DEBUG\",\"message\":\"Test debug event\",\"service.name\":\"testLog4j\",\"service.version\":\"1\",\"log.logger\":\"software.amazon.lambda.powertools.logging.internal.handler.PowertoolsLogEnabled\",\"process.thread.name\":\"main\",\"cloud.provider\":\"aws\",\"cloud.service.name\":\"lambda\",\"cloud.region\":\"eu-central-1\",\"cloud.account.id\":\"123456789012\",\"faas.id\":\"arn:aws:lambda:us-east-1:123456789012:function:test\",\"faas.name\":\"test-function\",\"faas.version\":\"1\",\"faas.memory\":128,\"faas.execution\":\"test-request-id\",\"faas.coldstart\":true,\"trace.id\":\"1-63441c4a-abcdef012345678912345678\",\"myKey\":\"myValue\"}\n"); + "\"ecs.version\":\"1.2.0\",\"log.level\":\"DEBUG\",\"message\":\"Test debug event\",\"service.name\":\"testLog4j\",\"service.version\":\"1\",\"log.logger\":\"software.amazon.lambda.powertools.logging.internal.handler.PowertoolsLogEnabled\",\"process.thread.name\":\"main\",\"cloud.provider\":\"aws\",\"cloud.service.name\":\"lambda\",\"cloud.region\":\"eu-central-1\",\"cloud.account.id\":\"123456789012\",\"faas.id\":\"arn:aws:lambda:us-east-1:123456789012:function:test\",\"faas.name\":\"test-function\",\"faas.version\":\"1\",\"faas.memory\":128,\"faas.execution\":\"test-request-id\",\"faas.coldstart\":true,\"trace.id\":\"1-63441c4a-abcdef012345678912345678\"") + .contains("\"tenant.id\":\"test-tenant\"") + .contains("\"myKey\":\"myValue\""); } } diff --git a/powertools-logging/powertools-logging-logback/src/main/java/software/amazon/lambda/powertools/logging/logback/LambdaEcsEncoder.java b/powertools-logging/powertools-logging-logback/src/main/java/software/amazon/lambda/powertools/logging/logback/LambdaEcsEncoder.java index b934f378d..629224011 100644 --- a/powertools-logging/powertools-logging-logback/src/main/java/software/amazon/lambda/powertools/logging/logback/LambdaEcsEncoder.java +++ b/powertools-logging/powertools-logging-logback/src/main/java/software/amazon/lambda/powertools/logging/logback/LambdaEcsEncoder.java @@ -24,6 +24,7 @@ import static software.amazon.lambda.powertools.logging.internal.PowertoolsLoggedFields.FUNCTION_TRACE_ID; import static software.amazon.lambda.powertools.logging.internal.PowertoolsLoggedFields.FUNCTION_VERSION; import static software.amazon.lambda.powertools.logging.logback.JsonUtils.*; +import static software.amazon.lambda.powertools.logging.internal.PowertoolsLoggedFields.TENANT_ID; import ch.qos.logback.classic.pattern.ThrowableHandlingConverter; import ch.qos.logback.classic.pattern.ThrowableProxyConverter; @@ -72,6 +73,7 @@ public class LambdaEcsEncoder extends EncoderBase { protected static final String FUNCTION_MEMORY_ATTR_NAME = "faas.memory"; protected static final String FUNCTION_TRACE_ID_ATTR_NAME = "trace.id"; protected static final String CORRELATION_ID_ATTR_NAME = "correlation.id"; + protected static final String TENANT_ID_ATTR_NAME = "tenant.id"; protected static final String ECS_VERSION = "1.2.0"; protected static final String CLOUD_PROVIDER = "aws"; @@ -169,6 +171,12 @@ private void serializeFunctionInfo(JsonSerializer serializer, String arn, Map sortedMap, JsonSerializ if (includePowertoolsInfo) { for (Map.Entry entry : sortedMap.entrySet()) { if (PowertoolsLoggedFields.stringValues().contains(entry.getKey()) - && !(entry.getKey().equals(PowertoolsLoggedFields.SAMPLING_RATE.getName()) && entry.getValue().equals("0.0"))) { + && !(entry.getKey().equals(PowertoolsLoggedFields.SAMPLING_RATE.getName()) && "0.0".equals(entry.getValue())) + && !(entry.getKey().equals(PowertoolsLoggedFields.TENANT_ID.getName()) + && (entry.getValue() == null || entry.getValue().isEmpty()))) { serializeMDCEntry(entry, serializer); } } @@ -236,6 +238,7 @@ public void setIncludeThreadInfo(boolean includeThreadInfo) { *
  • xray_trace_id
  • *
  • sampling_rate
  • *
  • service
  • + *
  • tenant_id
  • * *
    * We strongly recommend to keep these information. diff --git a/powertools-logging/powertools-logging-logback/src/test/java/software/amazon/lambda/powertools/logging/internal/LambdaEcsEncoderTest.java b/powertools-logging/powertools-logging-logback/src/test/java/software/amazon/lambda/powertools/logging/internal/LambdaEcsEncoderTest.java index 2d5cb0a00..12887d608 100644 --- a/powertools-logging/powertools-logging-logback/src/test/java/software/amazon/lambda/powertools/logging/internal/LambdaEcsEncoderTest.java +++ b/powertools-logging/powertools-logging-logback/src/test/java/software/amazon/lambda/powertools/logging/internal/LambdaEcsEncoderTest.java @@ -88,7 +88,7 @@ void shouldLogInEcsFormat() { File logFile = new File("target/ecslogfile.json"); assertThat(contentOf(logFile)).contains( - "\"ecs.version\":\"1.2.0\",\"log.level\":\"DEBUG\",\"message\":\"Test debug event\",\"service.name\":\"testLogback\",\"service.version\":\"1\",\"log.logger\":\"software.amazon.lambda.powertools.logging.internal.handler.PowertoolsLogEnabled\",\"process.thread.name\":\"main\",\"cloud.provider\":\"aws\",\"cloud.service.name\":\"lambda\",\"cloud.region\":\"us-east-1\",\"cloud.account.id\":\"123456789012\",\"faas.id\":\"arn:aws:lambda:us-east-1:123456789012:function:test\",\"faas.name\":\"test-function\",\"faas.version\":\"1\",\"faas.memory\":\"128\",\"faas.execution\":\"test-request-id\",\"faas.coldstart\":\"true\",\"trace.id\":\"1-63441c4a-abcdef012345678912345678\",\"myKey\":\"myValue\"}\n"); + "\"ecs.version\":\"1.2.0\",\"log.level\":\"DEBUG\",\"message\":\"Test debug event\",\"service.name\":\"testLogback\",\"service.version\":\"1\",\"log.logger\":\"software.amazon.lambda.powertools.logging.internal.handler.PowertoolsLogEnabled\",\"process.thread.name\":\"main\",\"cloud.provider\":\"aws\",\"cloud.service.name\":\"lambda\",\"cloud.region\":\"us-east-1\",\"cloud.account.id\":\"123456789012\",\"faas.id\":\"arn:aws:lambda:us-east-1:123456789012:function:test\",\"faas.name\":\"test-function\",\"faas.version\":\"1\",\"faas.memory\":\"128\",\"faas.execution\":\"test-request-id\",\"faas.coldstart\":\"true\",\"trace.id\":\"1-63441c4a-abcdef012345678912345678\",\"tenant.id\":\"test-tenant\",\"myKey\":\"myValue\"}\n"); } private final LoggingEvent loggingEvent = new LoggingEvent("fqcn", logger, Level.INFO, "message", null, null); @@ -165,8 +165,11 @@ void shouldLogException() { result = new String(encoded, StandardCharsets.UTF_8); // THEN (stack is logged with root cause first) - assertThat(result).contains( - "\"message\":\"Error\",\"error.message\":\"Unexpected value\",\"error.type\":\"java.lang.IllegalStateException\",\"error.stack_trace\":\"java.lang.IllegalStateException: Unexpected value\\n"); + assertThat(result) + .contains("\"message\":\"Error\",\"error.message\":\"Unexpected value\",\"error.type\":\"java.lang.IllegalStateException\"") + .containsAnyOf( + "\"error.stack_trace\":\"java.lang.IllegalStateException: Unexpected value\\n", + "\"error.stack_trace\":\"java.lang.IllegalStateException: Unexpected value\\r\\n"); } private void setMDC() { diff --git a/powertools-logging/powertools-logging-logback/src/test/java/software/amazon/lambda/powertools/logging/internal/LambdaJsonEncoderTest.java b/powertools-logging/powertools-logging-logback/src/test/java/software/amazon/lambda/powertools/logging/internal/LambdaJsonEncoderTest.java index ca256ad5d..75ef79369 100644 --- a/powertools-logging/powertools-logging-logback/src/test/java/software/amazon/lambda/powertools/logging/internal/LambdaJsonEncoderTest.java +++ b/powertools-logging/powertools-logging-logback/src/test/java/software/amazon/lambda/powertools/logging/internal/LambdaJsonEncoderTest.java @@ -111,8 +111,8 @@ void shouldLogInJsonFormat() { // THEN File logFile = new File("target/logfile.json"); assertThat(contentOf(logFile)).contains( - "{\"level\":\"DEBUG\",\"message\":\"Test debug event\",\"cold_start\":true,\"function_arn\":\"arn:aws:lambda:us-east-1:123456789012:function:test\",\"function_memory_size\":128,\"function_name\":\"test-function\",\"function_request_id\":\"test-request-id\",\"function_version\":1,\"service\":\"testLogback\",\"xray_trace_id\":\"1-63441c4a-abcdef012345678912345678\",\"myKey\":\"myValue\",\"timestamp\":"); - } + "{\"level\":\"DEBUG\",\"message\":\"Test debug event\",\"cold_start\":true,\"function_arn\":\"arn:aws:lambda:us-east-1:123456789012:function:test\",\"function_memory_size\":128,\"function_name\":\"test-function\",\"function_request_id\":\"test-request-id\",\"function_version\":1,\"service\":\"testLogback\",\"tenant_id\":\"test-tenant\",\"xray_trace_id\":\"1-63441c4a-abcdef012345678912345678\",\"myKey\":\"myValue\",\"timestamp\":\""); + } @Test void shouldLogArgumentsAsJsonWhenUsingRawJson() { @@ -196,6 +196,7 @@ void shouldNotLogPowertoolsInfo() { MDC.put(PowertoolsLoggedFields.FUNCTION_COLD_START.getName(), "false"); MDC.put(PowertoolsLoggedFields.SAMPLING_RATE.getName(), "0.2"); MDC.put(PowertoolsLoggedFields.SERVICE.getName(), "Service"); + MDC.put(PowertoolsLoggedFields.TENANT_ID.getName(), "test-tenant"); // WHEN byte[] encoded = encoder.encode(loggingEvent); @@ -203,7 +204,8 @@ void shouldNotLogPowertoolsInfo() { // THEN assertThat(result).contains( - "{\"level\":\"INFO\",\"message\":\"message\",\"cold_start\":false,\"function_arn\":\"arn:aws:lambda:us-east-1:123456789012:function:test\",\"function_memory_size\":128,\"function_name\":\"test-function\",\"function_request_id\":\"test-request-id\",\"function_version\":1,\"sampling_rate\":0.2,\"service\":\"Service\",\"timestamp\":"); + "{\"level\":\"INFO\",\"message\":\"message\",\"cold_start\":false,\"function_arn\":\"arn:aws:lambda:us-east-1:123456789012:function:test\",\"function_memory_size\":128,\"function_name\":\"test-function\",\"function_request_id\":\"test-request-id\",\"function_version\":1,\"sampling_rate\":0.2,\"service\":\"Service\",\"tenant_id\":\"test-tenant\",\"timestamp\":\"" + ); // WHEN (powertoolsInfo = false) encoder.setIncludePowertoolsInfo(false); @@ -212,7 +214,7 @@ void shouldNotLogPowertoolsInfo() { // THEN (no powertools info in logs) assertThat(result).doesNotContain("cold_start", "function_arn", "function_memory_size", "function_name", - "function_request_id", "function_version", "sampling_rate", "service"); + "function_request_id", "function_version", "sampling_rate", "service", "tenant_id"); } @Test @@ -441,7 +443,9 @@ void shouldLogException() { // THEN (stack is logged with root cause first) assertThat(result).contains("\"message\":\"Unexpected value\"") .contains("\"name\":\"java.lang.IllegalStateException\"") - .contains("\"stack\":\"java.lang.IllegalStateException: Unexpected value\\n"); + .containsAnyOf( + "\"stack\":\"java.lang.IllegalStateException: Unexpected value\\n", + "\"stack\":\"java.lang.IllegalStateException: Unexpected value\\r\\n"); } @Test @@ -481,4 +485,33 @@ void shouldLogKeyValuePairs() { ; } + @Test + void shouldNotLogTenantIdWhenNull() { + // GIVEN + LambdaJsonEncoder encoder = new LambdaJsonEncoder(); + MDC.put(PowertoolsLoggedFields.TENANT_ID.getName(), null); + + // WHEN + byte[] encoded = encoder.encode(loggingEvent); + String result = new String(encoded, StandardCharsets.UTF_8); + + // THEN + assertThat(result).doesNotContain("tenant_id"); + } + + @Test + void shouldNotLogTenantIdWhenEmpty() { + // GIVEN + LambdaJsonEncoder encoder = new LambdaJsonEncoder(); + MDC.put(PowertoolsLoggedFields.TENANT_ID.getName(), ""); + + // WHEN + byte[] encoded = encoder.encode(loggingEvent); + String result = new String(encoded, StandardCharsets.UTF_8); + + // THEN + assertThat(result).doesNotContain("tenant_id"); + } + + } diff --git a/powertools-logging/src/main/java/software/amazon/lambda/powertools/logging/internal/PowertoolsLoggedFields.java b/powertools-logging/src/main/java/software/amazon/lambda/powertools/logging/internal/PowertoolsLoggedFields.java index 2545396d2..ad47608a8 100644 --- a/powertools-logging/src/main/java/software/amazon/lambda/powertools/logging/internal/PowertoolsLoggedFields.java +++ b/powertools-logging/src/main/java/software/amazon/lambda/powertools/logging/internal/PowertoolsLoggedFields.java @@ -35,7 +35,8 @@ public enum PowertoolsLoggedFields { FUNCTION_TRACE_ID("xray_trace_id"), SAMPLING_RATE("sampling_rate"), CORRELATION_ID("correlation_id"), - SERVICE("service"); + SERVICE("service"), + TENANT_ID("tenant_id"); private final String name; @@ -55,6 +56,10 @@ public static Map setValuesFromLambdaContext(Context context) { hashMap.put(FUNCTION_ARN.name, context.getInvokedFunctionArn()); hashMap.put(FUNCTION_MEMORY_SIZE.name, String.valueOf(context.getMemoryLimitInMB())); hashMap.put(FUNCTION_REQUEST_ID.name, String.valueOf(context.getAwsRequestId())); + String tenantId = context.getTenantId(); + if (tenantId != null && !tenantId.isEmpty()) { + hashMap.put(TENANT_ID.name, tenantId); + } return hashMap; } diff --git a/powertools-logging/src/test/java/software/amazon/lambda/powertools/logging/internal/KeyBufferTest.java b/powertools-logging/src/test/java/software/amazon/lambda/powertools/logging/internal/KeyBufferTest.java index fac85e230..9656c58d2 100644 --- a/powertools-logging/src/test/java/software/amazon/lambda/powertools/logging/internal/KeyBufferTest.java +++ b/powertools-logging/src/test/java/software/amazon/lambda/powertools/logging/internal/KeyBufferTest.java @@ -351,9 +351,9 @@ void shouldUseDefaultWarningLoggerWhenNotProvided() { defaultBuffer.removeAll("key1"); // Assert System.err received the warning - assertThat(errCapture) - .hasToString( - "WARN [KeyBuffer] - Some logs are not displayed because they were evicted from the buffer. Increase buffer size to store more logs in the buffer.\n"); + assertThat(errCapture.toString()) + .contains( + "WARN [KeyBuffer] - Some logs are not displayed because they were evicted from the buffer. Increase buffer size to store more logs in the buffer."); } finally { System.setErr(originalErr); } diff --git a/powertools-logging/src/test/java/software/amazon/lambda/powertools/logging/internal/LambdaLoggingAspectTest.java b/powertools-logging/src/test/java/software/amazon/lambda/powertools/logging/internal/LambdaLoggingAspectTest.java index ca47f9097..158bffb94 100644 --- a/powertools-logging/src/test/java/software/amazon/lambda/powertools/logging/internal/LambdaLoggingAspectTest.java +++ b/powertools-logging/src/test/java/software/amazon/lambda/powertools/logging/internal/LambdaLoggingAspectTest.java @@ -26,6 +26,7 @@ import static software.amazon.lambda.powertools.logging.internal.PowertoolsLoggedFields.FUNCTION_TRACE_ID; import static software.amazon.lambda.powertools.logging.internal.PowertoolsLoggedFields.FUNCTION_VERSION; import static software.amazon.lambda.powertools.logging.internal.PowertoolsLoggedFields.SERVICE; +import static software.amazon.lambda.powertools.logging.internal.PowertoolsLoggedFields.TENANT_ID; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; @@ -88,7 +89,7 @@ class LambdaLoggingAspectTest { - private static final int EXPECTED_CONTEXT_SIZE = 8; + private static final int EXPECTED_CONTEXT_SIZE = 9; private RequestStreamHandler requestStreamHandler; private RequestHandler requestHandler; @@ -148,6 +149,7 @@ void shouldSetLambdaContextWhenEnabled() { .containsEntry(FUNCTION_VERSION.getName(), "1") .containsEntry(FUNCTION_NAME.getName(), "test-function") .containsEntry(FUNCTION_REQUEST_ID.getName(), "test-request-id") + .containsEntry(TENANT_ID.getName(), "test-tenant") .containsKey(FUNCTION_COLD_START.getName()) .containsKey(SERVICE.getName()); } @@ -166,6 +168,7 @@ void shouldSetLambdaContextForStreamHandlerWhenEnabled() throws IOException { .containsEntry(FUNCTION_VERSION.getName(), "1") .containsEntry(FUNCTION_NAME.getName(), "test-function") .containsEntry(FUNCTION_REQUEST_ID.getName(), "test-request-id") + .containsEntry(TENANT_ID.getName(), "test-tenant") .containsKey(FUNCTION_COLD_START.getName()) .containsKey(SERVICE.getName()); } From 92fa19e8a5acf957d5eba81cac2277ede04780ff Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 21 Apr 2026 17:52:33 +0200 Subject: [PATCH 176/202] chore: bump com.fasterxml.jackson:jackson-bom from 2.21.1 to 2.21.2 (#2480) chore: bump com.fasterxml.jackson:jackson-bom from 2.21.1 to 2.21.2 Reviewed and approved by @phipag. Review performed by Claude (Opus 4.7). --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 528339459..b93d41cc5 100644 --- a/pom.xml +++ b/pom.xml @@ -85,7 +85,7 @@ 3.1.2 2.25.4 2.0.17 - 2.21.1 + 2.21.2 2.42.35 2.21.0 2.2.0 From cd22a08943585e150a80479eb2a7654db5b49582 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 22 Apr 2026 18:55:43 +0200 Subject: [PATCH 177/202] chore: bump org.apache.maven.plugins:maven-source-plugin (#2482) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bump maven-source-plugin 3.3.1 → 3.4.0. Reviewed and approved by @phipag. Review performed by Claude (dependabot-review skill). --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index b93d41cc5..ca54df4ce 100644 --- a/pom.xml +++ b/pom.xml @@ -106,7 +106,7 @@ 0.8.14 1.7.0 3.12.0 - 3.3.1 + 3.4.0 3.2.8 5.14.0 4.1.2 From a5492eda3993f0fdd6421151b056e26a44f4ae66 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 22 Apr 2026 18:56:04 +0200 Subject: [PATCH 178/202] chore: bump aws.sdk.version from 2.42.35 to 2.42.38 (#2481) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bump aws.sdk.version 2.42.35 → 2.42.38. Reviewed and approved by @phipag. Review performed by Claude (dependabot-review skill). --- examples/powertools-examples-cloudformation/pom.xml | 2 +- pom.xml | 2 +- powertools-e2e-tests/handlers/pom.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/powertools-examples-cloudformation/pom.xml b/examples/powertools-examples-cloudformation/pom.xml index 4e45417d3..6ac23f83a 100644 --- a/examples/powertools-examples-cloudformation/pom.xml +++ b/examples/powertools-examples-cloudformation/pom.xml @@ -14,7 +14,7 @@ 11 1.4.0 3.16.1 - 2.42.35 + 2.42.38 1.9.20.1 diff --git a/pom.xml b/pom.xml index ca54df4ce..26413ac98 100644 --- a/pom.xml +++ b/pom.xml @@ -86,7 +86,7 @@ 2.25.4 2.0.17 2.21.2 - 2.42.35 + 2.42.38 2.21.0 2.2.0 UTF-8 diff --git a/powertools-e2e-tests/handlers/pom.xml b/powertools-e2e-tests/handlers/pom.xml index 4a2acb298..5d5f6dac6 100644 --- a/powertools-e2e-tests/handlers/pom.xml +++ b/powertools-e2e-tests/handlers/pom.xml @@ -19,7 +19,7 @@ 3.6.2 1.14.1 3.15.0 - 2.42.35 + 2.42.38 1.9.20.1 true From dd3bb6d8ce9a999ed3f7d204f817787a55f95f05 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 26 Apr 2026 14:01:12 +0200 Subject: [PATCH 179/202] chore: bump gitpython from 3.1.44 to 3.1.47 in /docs (#2486) Reviewed and approved by @phipag. Review performed by Claude (Opus 4.7) via the dependabot-review workflow. --- docs/requirements.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/requirements.txt b/docs/requirements.txt index ab4b1d48f..769be81da 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -22,9 +22,9 @@ gitdb==4.0.12 \ --hash=sha256:5ef71f855d191a3326fcfbc0d5da835f26b13fbcba60c32c21091c349ffdb571 \ --hash=sha256:67073e15955400952c6565cc3e707c554a4eea2e428946f7a4c162fab9bd9bcf # via gitpython -gitpython==3.1.44 \ - --hash=sha256:9e0e10cda9bed1ee64bc9a6de50e7e38a9c9943241cd7f585f6df3ed28011110 \ - --hash=sha256:c87e30b26253bf5418b01b0660f818967f3c503193838337fe5e573331249269 +gitpython==3.1.47 \ + --hash=sha256:489f590edfd6d20571b2c0e72c6a6ac6915ee8b8cd04572330e3842207a78905 \ + --hash=sha256:dba27f922bd2b42cb54c87a8ab3cb6beb6bf07f3d564e21ac848913a05a8a3cd # via mkdocs-git-revision-date-plugin hjson==3.1.0 \ --hash=sha256:55af475a27cf83a7969c808399d7bccdec8fb836a07ddbd574587593b9cdcf75 \ From 5052b66afcbe1598a35eb9c9921e7e7fcf620f7b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 26 Apr 2026 14:01:30 +0200 Subject: [PATCH 180/202] chore: bump aws.sdk.version from 2.42.38 to 2.42.40 (#2483) Reviewed and approved by @phipag. Review performed by Claude (Opus 4.7) via the dependabot-review workflow. --- examples/powertools-examples-cloudformation/pom.xml | 2 +- pom.xml | 2 +- powertools-e2e-tests/handlers/pom.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/powertools-examples-cloudformation/pom.xml b/examples/powertools-examples-cloudformation/pom.xml index 6ac23f83a..a38b79e5a 100644 --- a/examples/powertools-examples-cloudformation/pom.xml +++ b/examples/powertools-examples-cloudformation/pom.xml @@ -14,7 +14,7 @@ 11 1.4.0 3.16.1 - 2.42.38 + 2.42.40 1.9.20.1 diff --git a/pom.xml b/pom.xml index 26413ac98..cc30342e4 100644 --- a/pom.xml +++ b/pom.xml @@ -86,7 +86,7 @@ 2.25.4 2.0.17 2.21.2 - 2.42.38 + 2.42.40 2.21.0 2.2.0 UTF-8 diff --git a/powertools-e2e-tests/handlers/pom.xml b/powertools-e2e-tests/handlers/pom.xml index 5d5f6dac6..65b4d8964 100644 --- a/powertools-e2e-tests/handlers/pom.xml +++ b/powertools-e2e-tests/handlers/pom.xml @@ -19,7 +19,7 @@ 3.6.2 1.14.1 3.15.0 - 2.42.38 + 2.42.40 1.9.20.1 true From d02373d61073a8c8aca939508b4614b5faa351c4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 28 Apr 2026 15:30:20 +0200 Subject: [PATCH 181/202] chore: bump aws.sdk.version from 2.42.40 to 2.43.0 (#2487) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reviewed and approved by @phipag. Review performed by Claude (claude-opus-4-7) via the dependabot-review skill. AWS SDK v2 2.42.40 → 2.43.0 — routine minor bump with service-only feature additions; no breaking changes. --- examples/powertools-examples-cloudformation/pom.xml | 2 +- pom.xml | 2 +- powertools-e2e-tests/handlers/pom.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/powertools-examples-cloudformation/pom.xml b/examples/powertools-examples-cloudformation/pom.xml index a38b79e5a..29b4a45f3 100644 --- a/examples/powertools-examples-cloudformation/pom.xml +++ b/examples/powertools-examples-cloudformation/pom.xml @@ -14,7 +14,7 @@ 11 1.4.0 3.16.1 - 2.42.40 + 2.43.0 1.9.20.1 diff --git a/pom.xml b/pom.xml index cc30342e4..1e819c52f 100644 --- a/pom.xml +++ b/pom.xml @@ -86,7 +86,7 @@ 2.25.4 2.0.17 2.21.2 - 2.42.40 + 2.43.0 2.21.0 2.2.0 UTF-8 diff --git a/powertools-e2e-tests/handlers/pom.xml b/powertools-e2e-tests/handlers/pom.xml index 65b4d8964..eef2880b0 100644 --- a/powertools-e2e-tests/handlers/pom.xml +++ b/powertools-e2e-tests/handlers/pom.xml @@ -19,7 +19,7 @@ 3.6.2 1.14.1 3.15.0 - 2.42.40 + 2.43.0 1.9.20.1 true From 7bf79dd6e3ad3307035b3ca6be4641a016972aad Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 30 Apr 2026 08:59:04 +0200 Subject: [PATCH 182/202] chore: bump commons-io:commons-io from 2.21.0 to 2.22.0 (#2490) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reviewed and approved by @phipag. Dependabot review performed by Claude (Opus 4.7). commons-io 2.21.0 → 2.22.0, patch bump limited to powertools-e2e-tests. --- powertools-e2e-tests/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/powertools-e2e-tests/pom.xml b/powertools-e2e-tests/pom.xml index 13e62c67e..ac864ad9c 100644 --- a/powertools-e2e-tests/pom.xml +++ b/powertools-e2e-tests/pom.xml @@ -95,7 +95,7 @@ commons-io commons-io - 2.21.0 + 2.22.0 org.junit.jupiter From f68b182fea2bf6f43086be09761ef7c41108a19e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 30 Apr 2026 15:19:27 +0200 Subject: [PATCH 183/202] chore: bump release-drafter/release-drafter from 7.2.0 to 7.2.1 (#2492) Patch bump of release-drafter/release-drafter from 7.2.0 to 7.2.1. Reviewed and approved by @phipag. Review performed by Claude. --- .github/workflows/release-drafter.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release-drafter.yml b/.github/workflows/release-drafter.yml index f0104f177..e3bfaced7 100644 --- a/.github/workflows/release-drafter.yml +++ b/.github/workflows/release-drafter.yml @@ -23,6 +23,6 @@ jobs: contents: write # required for creating draft releases steps: - name: Relase Drafter - uses: release-drafter/release-drafter@5de93583980a40bd78603b6dfdcda5b4df377b32 + uses: release-drafter/release-drafter@563bf132657a13ded0b01fcb723c5a58cdd824e2 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} From 299218742bdd9b166d8f7933dfe79237e40b4198 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 30 Apr 2026 15:32:31 +0200 Subject: [PATCH 184/202] chore: bump aws.sdk.version from 2.43.0 to 2.43.1 (#2491) Reviewed and approved by @phipag. Review performed by Claude. Routine AWS SDK patch bump (2.43.0 to 2.43.1) with no breaking changes. --- examples/powertools-examples-cloudformation/pom.xml | 2 +- pom.xml | 2 +- powertools-e2e-tests/handlers/pom.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/powertools-examples-cloudformation/pom.xml b/examples/powertools-examples-cloudformation/pom.xml index 29b4a45f3..70d9ec178 100644 --- a/examples/powertools-examples-cloudformation/pom.xml +++ b/examples/powertools-examples-cloudformation/pom.xml @@ -14,7 +14,7 @@ 11 1.4.0 3.16.1 - 2.43.0 + 2.43.1 1.9.20.1 diff --git a/pom.xml b/pom.xml index 1e819c52f..c0f737cdf 100644 --- a/pom.xml +++ b/pom.xml @@ -86,7 +86,7 @@ 2.25.4 2.0.17 2.21.2 - 2.43.0 + 2.43.1 2.21.0 2.2.0 UTF-8 diff --git a/powertools-e2e-tests/handlers/pom.xml b/powertools-e2e-tests/handlers/pom.xml index eef2880b0..511212840 100644 --- a/powertools-e2e-tests/handlers/pom.xml +++ b/powertools-e2e-tests/handlers/pom.xml @@ -19,7 +19,7 @@ 3.6.2 1.14.1 3.15.0 - 2.43.0 + 2.43.1 1.9.20.1 true From a404db86792635c722d817e34594dd0daca07b51 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 9 May 2026 15:18:49 +0200 Subject: [PATCH 185/202] chore: bump gitpython from 3.1.47 to 3.1.50 in /docs (#2499) Reviewed and approved by @phipag. Review performed by Claude. Docs-only gitpython patch bumps including security fixes. --- docs/requirements.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/requirements.txt b/docs/requirements.txt index 769be81da..32300d31c 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -22,9 +22,9 @@ gitdb==4.0.12 \ --hash=sha256:5ef71f855d191a3326fcfbc0d5da835f26b13fbcba60c32c21091c349ffdb571 \ --hash=sha256:67073e15955400952c6565cc3e707c554a4eea2e428946f7a4c162fab9bd9bcf # via gitpython -gitpython==3.1.47 \ - --hash=sha256:489f590edfd6d20571b2c0e72c6a6ac6915ee8b8cd04572330e3842207a78905 \ - --hash=sha256:dba27f922bd2b42cb54c87a8ab3cb6beb6bf07f3d564e21ac848913a05a8a3cd +gitpython==3.1.50 \ + --hash=sha256:80da2d12504d52e1f998772dc5baf6e553f8d2fcfe1fcc226c9d9a2ee3372dcc \ + --hash=sha256:d352abe2908d07355014abdd21ddf798c2a961469239afec4962e9da884858f9 # via mkdocs-git-revision-date-plugin hjson==3.1.0 \ --hash=sha256:55af475a27cf83a7969c808399d7bccdec8fb836a07ddbd574587593b9cdcf75 \ From a6fdaa7fcb9407f08448a41cea8ea56778da8c76 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 9 May 2026 15:19:05 +0200 Subject: [PATCH 186/202] chore: bump release-drafter/release-drafter from 7.2.1 to 7.3.0 (#2498) Reviewed and approved by @phipag. Review performed by Claude. release-drafter minor bump with bug fixes. --- .github/workflows/release-drafter.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release-drafter.yml b/.github/workflows/release-drafter.yml index e3bfaced7..1e024ddee 100644 --- a/.github/workflows/release-drafter.yml +++ b/.github/workflows/release-drafter.yml @@ -23,6 +23,6 @@ jobs: contents: write # required for creating draft releases steps: - name: Relase Drafter - uses: release-drafter/release-drafter@563bf132657a13ded0b01fcb723c5a58cdd824e2 + uses: release-drafter/release-drafter@c2e2804cc59f45f57076a99af580d0fedb697927 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} From 43e87f6d4107832dd69bac71743a9a016fef26e6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 9 May 2026 15:19:22 +0200 Subject: [PATCH 187/202] chore: bump github/codeql-action from 4.35.2 to 4.35.4 (#2497) Reviewed and approved by @phipag. Review performed by Claude. codeql-action patch bump with CodeQL bundle updates. --- .github/workflows/security-scorecard.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/security-scorecard.yml b/.github/workflows/security-scorecard.yml index bf06629f4..2e156daf5 100644 --- a/.github/workflows/security-scorecard.yml +++ b/.github/workflows/security-scorecard.yml @@ -53,6 +53,6 @@ jobs: path: results.sarif retention-days: 5 - name: Upload to Code-Scanning - uses: github/codeql-action/upload-sarif@95e58e9a2cdfd71adc6e0353d5c52f41a045d225 # v3.29.5 + uses: github/codeql-action/upload-sarif@68bde559dea0fdcac2102bfdf6230c5f70eb485e # v3.29.5 with: sarif_file: results.sarif From 08c2ff77c0cb76d832a41a49c19b2098096d364c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 9 May 2026 15:19:37 +0200 Subject: [PATCH 188/202] chore: bump graalvm/setup-graalvm from 1.5.2 to 1.5.3 (#2496) Reviewed and approved by @phipag. Review performed by Claude. setup-graalvm patch bump, pure maintenance release. --- .github/workflows/check-build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/check-build.yml b/.github/workflows/check-build.yml index ecc47feb6..052153a04 100644 --- a/.github/workflows/check-build.yml +++ b/.github/workflows/check-build.yml @@ -107,7 +107,7 @@ jobs: powertools-*/** pom.xml - name: Setup GraalVM - uses: graalvm/setup-graalvm@60c26726de13f8b90771df4bc1641a52a3159994 # v1.5.2 + uses: graalvm/setup-graalvm@bef4b0e916c7dd079bf60fb95d49139f67e32c5f # v1.5.3 with: # Pinned to 21.0.8 due to unsafeAllocated enforcement in 21.0.10+. See #2416 java-version: "21.0.8" From edc4196c92440f3e5b9f0ef4ff19d1255762d72f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 9 May 2026 15:19:53 +0200 Subject: [PATCH 189/202] chore: bump aws-actions/configure-aws-credentials from 6.1.0 to 6.1.1 (#2495) Reviewed and approved by @phipag. Review performed by Claude. configure-aws-credentials patch bump, maintenance release. --- .github/workflows/build-docs.yml | 2 +- .github/workflows/check-e2e.yml | 4 ++-- .github/workflows/release.yml | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build-docs.yml b/.github/workflows/build-docs.yml index de30c582b..fc5f6811b 100644 --- a/.github/workflows/build-docs.yml +++ b/.github/workflows/build-docs.yml @@ -43,7 +43,7 @@ jobs: docker build -t squidfunk/mkdocs-material ./docs/ docker run --rm -t -v ${PWD}:/docs squidfunk/mkdocs-material build - name: Configure AWS credentials - uses: aws-actions/configure-aws-credentials@ec61189d14ec14c8efccab744f656cffd0e33f37 + uses: aws-actions/configure-aws-credentials@d979d5b3a71173a29b74b5b88418bfda9437d885 with: aws-region: us-east-1 role-to-assume: ${{ secrets.AWS_DOCS_ROLE_ARN }} diff --git a/.github/workflows/check-e2e.yml b/.github/workflows/check-e2e.yml index ad0012da9..49d79a734 100644 --- a/.github/workflows/check-e2e.yml +++ b/.github/workflows/check-e2e.yml @@ -116,7 +116,7 @@ jobs: - name: Build all modules run: mvn -B -DskipTests -ntp install --file pom.xml - name: Setup AWS credentials - uses: aws-actions/configure-aws-credentials@ec61189d14ec14c8efccab744f656cffd0e33f37 # v6.1.0 + uses: aws-actions/configure-aws-credentials@d979d5b3a71173a29b74b5b88418bfda9437d885 # v6.1.1 with: role-to-assume: ${{ secrets.AWS_IAM_ROLE }} aws-region: us-east-1 @@ -154,7 +154,7 @@ jobs: - name: Build all modules run: mvn -B -DskipTests -ntp install --file pom.xml - name: Setup AWS credentials - uses: aws-actions/configure-aws-credentials@ec61189d14ec14c8efccab744f656cffd0e33f37 # v6.1.0 + uses: aws-actions/configure-aws-credentials@d979d5b3a71173a29b74b5b88418bfda9437d885 # v6.1.1 with: role-to-assume: ${{ secrets.AWS_IAM_ROLE }} aws-region: us-east-1 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index ba7d018d0..e5e8db091 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -286,7 +286,7 @@ jobs: docker build -t squidfunk/mkdocs-material ./docs/ docker run --rm -t -v ${PWD}:/docs squidfunk/mkdocs-material build - name: Configure AWS credentials - uses: aws-actions/configure-aws-credentials@ec61189d14ec14c8efccab744f656cffd0e33f37 + uses: aws-actions/configure-aws-credentials@d979d5b3a71173a29b74b5b88418bfda9437d885 with: aws-region: us-east-1 role-to-assume: ${{ secrets.AWS_DOCS_ROLE_ARN }} From 931a1b026a709de3aa32b7f4aa546c4e8afad9b3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 9 May 2026 15:20:09 +0200 Subject: [PATCH 190/202] chore: bump aws.sdk.version from 2.43.1 to 2.43.2 (#2493) Reviewed and approved by @phipag. Review performed by Claude. Routine AWS SDK patch bump. --- examples/powertools-examples-cloudformation/pom.xml | 2 +- pom.xml | 2 +- powertools-e2e-tests/handlers/pom.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/powertools-examples-cloudformation/pom.xml b/examples/powertools-examples-cloudformation/pom.xml index 70d9ec178..46ed94e3a 100644 --- a/examples/powertools-examples-cloudformation/pom.xml +++ b/examples/powertools-examples-cloudformation/pom.xml @@ -14,7 +14,7 @@ 11 1.4.0 3.16.1 - 2.43.1 + 2.43.2 1.9.20.1 diff --git a/pom.xml b/pom.xml index c0f737cdf..f4e9f2c0c 100644 --- a/pom.xml +++ b/pom.xml @@ -86,7 +86,7 @@ 2.25.4 2.0.17 2.21.2 - 2.43.1 + 2.43.2 2.21.0 2.2.0 UTF-8 diff --git a/powertools-e2e-tests/handlers/pom.xml b/powertools-e2e-tests/handlers/pom.xml index 511212840..75f520443 100644 --- a/powertools-e2e-tests/handlers/pom.xml +++ b/powertools-e2e-tests/handlers/pom.xml @@ -19,7 +19,7 @@ 3.6.2 1.14.1 3.15.0 - 2.43.1 + 2.43.2 1.9.20.1 true From 34fcdfd1d849753af6e1f94dab4e3b37cdc0f435 Mon Sep 17 00:00:00 2001 From: Pratap Chandra Deo <61131823+Pratapchandradeo@users.noreply.github.com> Date: Tue, 12 May 2026 18:14:06 +0530 Subject: [PATCH 191/202] tech(idempotency): Replace DynamoDB Local with Mockito mocks in unit tests (#1932) (#2489) * tech(idempotency): Replace DynamoDB Local with Mockito mocks in unit tests (#1932) Replaced external DynamoDB Local dependency with self-contained Mockito mocks in powertools-idempotency-dynamodb module unit tests. Changes: - Rewrote DynamoDBPersistenceStoreTest with 12 Mockito-based tests - Removed DynamoDB Local dependency and Maven plugins from pom.xml - Deleted DynamoDBConfig test harness (no longer needed) - Deleted IdempotencyTest and IdempotencyFunction (redundant with e2e tests) - Added Mockito dependencies to pom.xml All tests pass (13/13). No production code changes. E2E tests remain unchanged. Related to #1932 * Fix SonarCloud restricted identifier warnings - Rename variable 'record' to 'dataRecord' (9 occurrences) - Resolves Java keyword conflict in test file * Use mockito-subclass for GraalVM native tests - Add mockito-subclass dependency in native profile - Remove skipNativeTests flag - Follows pattern from powertools-metrics module - All 61 tests pass in idempotency parent module * Strengthen test assertions for condition expression and returnValuesOnConditionCheckFailure - Add full condition expression validation in putRecord_shouldSendCorrectPutItemRequest - Add returnValuesOnConditionCheckFailure='ALL_OLD' assertion - Protects bugfix from #1285 and behavior from #1821 - Per code review feedback from @phipag --- .../powertools-idempotency-dynamodb/pom.xml | 85 +-- .../persistence/dynamodb/DynamoDBConfig.java | 65 --- .../DynamoDBPersistenceStoreTest.java | 551 +++++++++--------- .../persistence/dynamodb/IdempotencyTest.java | 52 -- .../handlers/IdempotencyFunction.java | 66 --- 5 files changed, 278 insertions(+), 541 deletions(-) delete mode 100644 powertools-idempotency/powertools-idempotency-dynamodb/src/test/java/software/amazon/lambda/powertools/idempotency/persistence/dynamodb/DynamoDBConfig.java delete mode 100644 powertools-idempotency/powertools-idempotency-dynamodb/src/test/java/software/amazon/lambda/powertools/idempotency/persistence/dynamodb/IdempotencyTest.java delete mode 100644 powertools-idempotency/powertools-idempotency-dynamodb/src/test/java/software/amazon/lambda/powertools/idempotency/persistence/dynamodb/handlers/IdempotencyFunction.java diff --git a/powertools-idempotency/powertools-idempotency-dynamodb/pom.xml b/powertools-idempotency/powertools-idempotency-dynamodb/pom.xml index 28f3a6bf6..cfcedec56 100644 --- a/powertools-idempotency/powertools-idempotency-dynamodb/pom.xml +++ b/powertools-idempotency/powertools-idempotency-dynamodb/pom.xml @@ -77,6 +77,16 @@ junit-jupiter-engine test + + org.mockito + mockito-core + test + + + org.mockito + mockito-junit-jupiter + test + org.slf4j slf4j-simple @@ -89,15 +99,6 @@ test-jar test - - - com.amazonaws - DynamoDBLocal - - - 2.2.0 - test - software.amazon.awssdk s3 @@ -118,6 +119,11 @@ aws-xray-recorder-sdk-aws-sdk-v2-instrumentor test + + org.mockito + mockito-subclass + test +
    @@ -149,57 +155,6 @@ - - - org.apache.maven.plugins - maven-dependency-plugin - - - copy-dynamodb-local - generate-test-resources - - copy-dependencies - - - test - false - - software.amazon.lambda - ${project.build.directory}/dynamodb-local - - - - - - - org.codehaus.mojo - exec-maven-plugin - - - start-dynamodb-local - process-test-classes - - exec - - - java - ${project.build.directory}/dynamodb-local - - -Djava.library.path=${project.build.directory}/dynamodb-local - -cp - ${project.build.directory}/dynamodb-local/* - com.amazonaws.services.dynamodbv2.local.main.ServerRunner - -inMemory - -port - 8000 - - true - true - - - - org.apache.maven.plugins maven-jar-plugin @@ -212,16 +167,6 @@
    - - - org.apache.maven.plugins - maven-surefire-plugin - - - http://localhost:8000 - - - dev.aspectj aspectj-maven-plugin diff --git a/powertools-idempotency/powertools-idempotency-dynamodb/src/test/java/software/amazon/lambda/powertools/idempotency/persistence/dynamodb/DynamoDBConfig.java b/powertools-idempotency/powertools-idempotency-dynamodb/src/test/java/software/amazon/lambda/powertools/idempotency/persistence/dynamodb/DynamoDBConfig.java deleted file mode 100644 index 9f6875689..000000000 --- a/powertools-idempotency/powertools-idempotency-dynamodb/src/test/java/software/amazon/lambda/powertools/idempotency/persistence/dynamodb/DynamoDBConfig.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright 2023 Amazon.com, Inc. or its affiliates. - * Licensed under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * 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. - * - */ - -package software.amazon.lambda.powertools.idempotency.persistence.dynamodb; - -import java.net.URI; - -import org.junit.jupiter.api.BeforeAll; - -import software.amazon.awssdk.auth.credentials.AwsBasicCredentials; -import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider; -import software.amazon.awssdk.http.urlconnection.UrlConnectionHttpClient; -import software.amazon.awssdk.regions.Region; -import software.amazon.awssdk.services.dynamodb.DynamoDbClient; -import software.amazon.awssdk.services.dynamodb.model.AttributeDefinition; -import software.amazon.awssdk.services.dynamodb.model.BillingMode; -import software.amazon.awssdk.services.dynamodb.model.CreateTableRequest; -import software.amazon.awssdk.services.dynamodb.model.KeySchemaElement; -import software.amazon.awssdk.services.dynamodb.model.KeyType; -import software.amazon.awssdk.services.dynamodb.model.ResourceInUseException; -import software.amazon.awssdk.services.dynamodb.model.ScalarAttributeType; - -class DynamoDBConfig { - protected static final String TABLE_NAME = "idempotency_table"; - protected static DynamoDbClient client; - - @BeforeAll - static void setupDynamo() { - String endpoint = System.getProperty("dynamodb.endpoint", "http://localhost:8000"); - - client = DynamoDbClient.builder() - .httpClient(UrlConnectionHttpClient.builder().build()) - .region(Region.EU_WEST_1) - .endpointOverride(URI.create(endpoint)) - .credentialsProvider(StaticCredentialsProvider.create( - AwsBasicCredentials.create("FAKE", "FAKE"))) - .build(); - - try { - client.createTable(CreateTableRequest.builder() - .tableName(TABLE_NAME) - .keySchema(KeySchemaElement.builder().keyType(KeyType.HASH).attributeName("id").build()) - .attributeDefinitions( - AttributeDefinition.builder().attributeName("id").attributeType(ScalarAttributeType.S) - .build()) - .billingMode(BillingMode.PAY_PER_REQUEST) - .build()); - } catch (ResourceInUseException e) { - // Table already exists, ignore - } catch (Exception e) { - throw new RuntimeException("Failed to create DynamoDB table", e); - } - } -} diff --git a/powertools-idempotency/powertools-idempotency-dynamodb/src/test/java/software/amazon/lambda/powertools/idempotency/persistence/dynamodb/DynamoDBPersistenceStoreTest.java b/powertools-idempotency/powertools-idempotency-dynamodb/src/test/java/software/amazon/lambda/powertools/idempotency/persistence/dynamodb/DynamoDBPersistenceStoreTest.java index b5c816286..de8b629fb 100644 --- a/powertools-idempotency/powertools-idempotency-dynamodb/src/test/java/software/amazon/lambda/powertools/idempotency/persistence/dynamodb/DynamoDBPersistenceStoreTest.java +++ b/powertools-idempotency/powertools-idempotency-dynamodb/src/test/java/software/amazon/lambda/powertools/idempotency/persistence/dynamodb/DynamoDBPersistenceStoreTest.java @@ -16,30 +16,30 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; import java.time.Instant; import java.time.temporal.ChronoUnit; -import java.util.Collections; import java.util.HashMap; import java.util.Map; +import java.util.OptionalLong; -import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junitpioneer.jupiter.SetEnvironmentVariable; +import org.mockito.ArgumentCaptor; -import software.amazon.awssdk.services.dynamodb.model.AttributeDefinition; +import software.amazon.awssdk.services.dynamodb.DynamoDbClient; import software.amazon.awssdk.services.dynamodb.model.AttributeValue; -import software.amazon.awssdk.services.dynamodb.model.BillingMode; -import software.amazon.awssdk.services.dynamodb.model.CreateTableRequest; +import software.amazon.awssdk.services.dynamodb.model.ConditionalCheckFailedException; import software.amazon.awssdk.services.dynamodb.model.DeleteItemRequest; -import software.amazon.awssdk.services.dynamodb.model.DeleteTableRequest; import software.amazon.awssdk.services.dynamodb.model.GetItemRequest; -import software.amazon.awssdk.services.dynamodb.model.KeySchemaElement; -import software.amazon.awssdk.services.dynamodb.model.KeyType; +import software.amazon.awssdk.services.dynamodb.model.GetItemResponse; import software.amazon.awssdk.services.dynamodb.model.PutItemRequest; -import software.amazon.awssdk.services.dynamodb.model.ScalarAttributeType; -import software.amazon.awssdk.services.dynamodb.model.ScanRequest; +import software.amazon.awssdk.services.dynamodb.model.UpdateItemRequest; import software.amazon.lambda.powertools.idempotency.Constants; import software.amazon.lambda.powertools.idempotency.IdempotencyConfig; import software.amazon.lambda.powertools.idempotency.exceptions.IdempotencyItemAlreadyExistsException; @@ -47,342 +47,317 @@ import software.amazon.lambda.powertools.idempotency.persistence.DataRecord; /** - * These test are using DynamoDBLocal and sqlite, see https://nickolasfisher.com/blog/Configuring-an-In-Memory-DynamoDB-instance-with-Java-for-Integration-Testing - * NOTE: on a Mac with Apple Chipset, you need to use the Oracle JDK x86 64-bit + * Unit tests for DynamoDBPersistenceStore using mocked DynamoDbClient. */ -class DynamoDBPersistenceStoreTest extends DynamoDBConfig { - protected static final String TABLE_NAME_CUSTOM = "idempotency_table_custom"; - private Map key; - private DynamoDBPersistenceStore dynamoDBPersistenceStore; +class DynamoDBPersistenceStoreTest { + private static final String TABLE_NAME = "idempotency_table"; + private DynamoDbClient mockClient; + private DynamoDBPersistenceStore persistenceStore; + + @BeforeEach + void setup() { + mockClient = mock(DynamoDbClient.class); + persistenceStore = DynamoDBPersistenceStore.builder() + .withTableName(TABLE_NAME) + .withDynamoDbClient(mockClient) + .build(); + } @Test - void putRecord_shouldCreateRecordInDynamoDB() throws IdempotencyItemAlreadyExistsException { + void putRecord_shouldSendCorrectPutItemRequest() throws IdempotencyItemAlreadyExistsException { + // GIVEN Instant now = Instant.now(); long expiry = now.plus(3600, ChronoUnit.SECONDS).getEpochSecond(); - dynamoDBPersistenceStore.putRecord(new DataRecord("key", DataRecord.Status.COMPLETED, expiry, null, null), now); - - key = Collections.singletonMap("id", AttributeValue.builder().s("key").build()); - Map item = client - .getItem(GetItemRequest.builder().tableName(TABLE_NAME).key(key).build()).item(); - assertThat(item).isNotNull(); - assertThat(item.get("status").s()).isEqualTo("COMPLETED"); - assertThat(item.get("expiration").n()).isEqualTo(String.valueOf(expiry)); - } + DataRecord dataRecord = new DataRecord("key", DataRecord.Status.COMPLETED, expiry, null, null); - @Test - void putRecord_shouldCreateRecordInDynamoDB_IfPreviousExpired() { - key = Collections.singletonMap("id", AttributeValue.builder().s("key").build()); + // WHEN + persistenceStore.putRecord(dataRecord, now); - // GIVEN: Insert a fake item with same id and expired - Map item = new HashMap<>(key); - Instant now = Instant.now(); - long expiry = now.minus(30, ChronoUnit.SECONDS).getEpochSecond(); - item.put("expiration", AttributeValue.builder().n(String.valueOf(expiry)).build()); - item.put("status", AttributeValue.builder().s(DataRecord.Status.COMPLETED.toString()).build()); - item.put("data", AttributeValue.builder().s("Fake Data").build()); - client.putItem(PutItemRequest.builder().tableName(TABLE_NAME).item(item).build()); - - // WHEN: call putRecord - long expiry2 = now.plus(3600, ChronoUnit.SECONDS).getEpochSecond(); - dynamoDBPersistenceStore.putRecord( - new DataRecord("key", - DataRecord.Status.INPROGRESS, - expiry2, - null, - null), - now); - - // THEN: an item is inserted - Map itemInDb = client - .getItem(GetItemRequest.builder().tableName(TABLE_NAME).key(key).build()).item(); - assertThat(itemInDb).isNotNull(); - assertThat(itemInDb.get("status").s()).isEqualTo("INPROGRESS"); - assertThat(itemInDb.get("expiration").n()).isEqualTo(String.valueOf(expiry2)); + // THEN + ArgumentCaptor captor = ArgumentCaptor.forClass(PutItemRequest.class); + verify(mockClient).putItem(captor.capture()); + + PutItemRequest request = captor.getValue(); + assertThat(request.tableName()).isEqualTo(TABLE_NAME); + assertThat(request.item()).containsEntry("id", AttributeValue.builder().s("key").build()); + assertThat(request.item().get("status").s()).isEqualTo("COMPLETED"); + assertThat(request.item().get("expiration").n()).isEqualTo(String.valueOf(expiry)); + + // Assert full condition expression (protects bugfix from #1285) + assertThat(request.conditionExpression()).isEqualTo( + "attribute_not_exists(#id) OR #expiry < :now OR " + + "(attribute_exists(#in_progress_expiry) AND #in_progress_expiry < :now_milliseconds AND #status = :inprogress)"); + + // Assert expression attribute names + assertThat(request.expressionAttributeNames()) + .containsEntry("#id", "id") + .containsEntry("#expiry", "expiration") + .containsEntry("#in_progress_expiry", "in_progress_expiration") + .containsEntry("#status", "status"); + + // Assert expression attribute values + assertThat(request.expressionAttributeValues().get(":now").n()) + .isEqualTo(String.valueOf(now.getEpochSecond())); + assertThat(request.expressionAttributeValues().get(":now_milliseconds").n()) + .isEqualTo(String.valueOf(now.toEpochMilli())); + assertThat(request.expressionAttributeValues().get(":inprogress").s()) + .isEqualTo("INPROGRESS"); } @Test - void putRecord_shouldCreateRecordInDynamoDB_IfLambdaWasInProgressAndTimedOut() { - key = Collections.singletonMap("id", AttributeValue.builder().s("key").build()); - - // GIVEN: Insert a fake item with same id and progress expired (Lambda timed out before and we allow a new - // execution) - Map item = new HashMap<>(key); + void putRecord_shouldIncludeInProgressExpiry_whenProvided() throws IdempotencyItemAlreadyExistsException { + // GIVEN Instant now = Instant.now(); - long expiry = now.plus(30, ChronoUnit.SECONDS).getEpochSecond(); - long progressExpiry = now.minus(30, ChronoUnit.SECONDS).toEpochMilli(); - item.put("expiration", AttributeValue.builder().n(String.valueOf(expiry)).build()); - item.put("status", AttributeValue.builder().s(DataRecord.Status.INPROGRESS.toString()).build()); - item.put("data", AttributeValue.builder().s("Fake Data").build()); - item.put("in_progress_expiration", AttributeValue.builder().n(String.valueOf(progressExpiry)).build()); - client.putItem(PutItemRequest.builder().tableName(TABLE_NAME).item(item).build()); - - // WHEN: call putRecord - long expiry2 = now.plus(3600, ChronoUnit.SECONDS).getEpochSecond(); - dynamoDBPersistenceStore.putRecord( - new DataRecord("key", - DataRecord.Status.INPROGRESS, - expiry2, - null, - null), - now); - - // THEN: an item is inserted - Map itemInDb = client - .getItem(GetItemRequest.builder().tableName(TABLE_NAME).key(key).build()).item(); - assertThat(itemInDb).isNotNull(); - assertThat(itemInDb.get("status").s()).isEqualTo("INPROGRESS"); - assertThat(itemInDb.get("expiration").n()).isEqualTo(String.valueOf(expiry2)); + long expiry = now.plus(3600, ChronoUnit.SECONDS).getEpochSecond(); + long inProgressExpiry = now.plus(300, ChronoUnit.SECONDS).toEpochMilli(); + DataRecord dataRecord = new DataRecord("key", DataRecord.Status.INPROGRESS, expiry, null, null, OptionalLong.of(inProgressExpiry)); + + // WHEN + persistenceStore.putRecord(dataRecord, now); + + // THEN + ArgumentCaptor captor = ArgumentCaptor.forClass(PutItemRequest.class); + verify(mockClient).putItem(captor.capture()); + + PutItemRequest request = captor.getValue(); + assertThat(request.item().get("in_progress_expiration").n()).isEqualTo(String.valueOf(inProgressExpiry)); } @Test - void putRecord_shouldThrowIdempotencyItemAlreadyExistsException_IfRecordAlreadyExist() { - key = Collections.singletonMap("id", AttributeValue.builder().s("key").build()); - - // GIVEN: Insert a fake item with same id - Map item = new HashMap<>(key); + void putRecord_shouldThrowIdempotencyItemAlreadyExistsException_whenConditionFails() { + // GIVEN Instant now = Instant.now(); - long expiry = now.plus(30, ChronoUnit.SECONDS).getEpochSecond(); - item.put("expiration", AttributeValue.builder().n(String.valueOf(expiry)).build()); // not expired - item.put("status", AttributeValue.builder().s(DataRecord.Status.COMPLETED.toString()).build()); - item.put("data", AttributeValue.builder().s("Fake Data").build()); - client.putItem(PutItemRequest.builder().tableName(TABLE_NAME).item(item).build()); - - // WHEN: call putRecord - long expiry2 = now.plus(3600, ChronoUnit.SECONDS).getEpochSecond(); - DataRecord recordToInsert = new DataRecord("key", - DataRecord.Status.INPROGRESS, - expiry2, - null, - null); - assertThatThrownBy(() -> dynamoDBPersistenceStore.putRecord(recordToInsert, now)) + long expiry = now.plus(3600, ChronoUnit.SECONDS).getEpochSecond(); + DataRecord dataRecord = new DataRecord("key", DataRecord.Status.INPROGRESS, expiry, null, null); + + Map existingItem = new HashMap<>(); + existingItem.put("id", AttributeValue.builder().s("key").build()); + existingItem.put("status", AttributeValue.builder().s("COMPLETED").build()); + existingItem.put("expiration", AttributeValue.builder().n(String.valueOf(expiry)).build()); + existingItem.put("data", AttributeValue.builder().s("Existing Data").build()); + + ConditionalCheckFailedException exception = ConditionalCheckFailedException.builder() + .item(existingItem) + .build(); + when(mockClient.putItem(any(PutItemRequest.class))).thenThrow(exception); + + // WHEN / THEN + assertThatThrownBy(() -> persistenceStore.putRecord(dataRecord, now)) .isInstanceOf(IdempotencyItemAlreadyExistsException.class) - // DataRecord should be present due to returnValuesOnConditionCheckFailure("ALL_OLD") - .matches(e -> ((IdempotencyItemAlreadyExistsException) e).getDataRecord().isPresent()); - - // THEN: item was not updated, retrieve the initial one - Map itemInDb = client - .getItem(GetItemRequest.builder().tableName(TABLE_NAME).key(key).build()).item(); - assertThat(itemInDb).isNotNull(); - assertThat(itemInDb.get("status").s()).isEqualTo("COMPLETED"); - assertThat(itemInDb.get("expiration").n()).isEqualTo(String.valueOf(expiry)); - assertThat(itemInDb.get("data").s()).isEqualTo("Fake Data"); + .matches(e -> ((IdempotencyItemAlreadyExistsException) e).getDataRecord().isPresent()) + .satisfies(e -> { + IdempotencyItemAlreadyExistsException ex = (IdempotencyItemAlreadyExistsException) e; + DataRecord existingRecord = ex.getDataRecord().get(); + assertThat(existingRecord.getIdempotencyKey()).isEqualTo("key"); + assertThat(existingRecord.getStatus()).isEqualTo(DataRecord.Status.COMPLETED); + assertThat(existingRecord.getResponseData()).isEqualTo("Existing Data"); + }); + + // Assert returnValuesOnConditionCheckFailure is ALL_OLD (protects behavior from #1821) + ArgumentCaptor captor = ArgumentCaptor.forClass(PutItemRequest.class); + verify(mockClient).putItem(captor.capture()); + PutItemRequest request = captor.getValue(); + assertThat(request.returnValuesOnConditionCheckFailureAsString()).isEqualTo("ALL_OLD"); } @Test - void putRecord_shouldBlockUpdate_IfRecordAlreadyExistAndProgressNotExpiredAfterLambdaTimedOut() { - key = Collections.singletonMap("id", AttributeValue.builder().s("key").build()); - - // GIVEN: Insert a fake item with same id - Map item = new HashMap<>(key); + void putRecord_shouldThrowWithoutDataRecord_whenConditionalCheckHasNoItem() { + // GIVEN Instant now = Instant.now(); - long expiry = now.plus(30, ChronoUnit.SECONDS).getEpochSecond(); // not expired - long progressExpiry = now.plus(30, ChronoUnit.SECONDS).toEpochMilli(); // not expired - item.put("expiration", AttributeValue.builder().n(String.valueOf(expiry)).build()); - item.put("status", AttributeValue.builder().s(DataRecord.Status.INPROGRESS.toString()).build()); - item.put("data", AttributeValue.builder().s("Fake Data").build()); - item.put("in_progress_expiration", AttributeValue.builder().n(String.valueOf(progressExpiry)).build()); - client.putItem(PutItemRequest.builder().tableName(TABLE_NAME).item(item).build()); - - // WHEN: call putRecord - long expiry2 = now.plus(3600, ChronoUnit.SECONDS).getEpochSecond(); - DataRecord recordToInsert = new DataRecord("key", - DataRecord.Status.INPROGRESS, - expiry2, - "Fake Data 2", - null); - assertThatThrownBy(() -> dynamoDBPersistenceStore.putRecord(recordToInsert, now)) + long expiry = now.plus(3600, ChronoUnit.SECONDS).getEpochSecond(); + DataRecord dataRecord = new DataRecord("key", DataRecord.Status.INPROGRESS, expiry, null, null); + + ConditionalCheckFailedException exception = ConditionalCheckFailedException.builder().build(); + when(mockClient.putItem(any(PutItemRequest.class))).thenThrow(exception); + + // WHEN / THEN + assertThatThrownBy(() -> persistenceStore.putRecord(dataRecord, now)) .isInstanceOf(IdempotencyItemAlreadyExistsException.class) - // DataRecord should be present due to returnValuesOnConditionCheckFailure("ALL_OLD") - .matches(e -> ((IdempotencyItemAlreadyExistsException) e).getDataRecord().isPresent()); - - // THEN: item was not updated, retrieve the initial one - Map itemInDb = client - .getItem(GetItemRequest.builder().tableName(TABLE_NAME).key(key).build()).item(); - assertThat(itemInDb).isNotNull(); - assertThat(itemInDb.get("status").s()).isEqualTo("INPROGRESS"); - assertThat(itemInDb.get("expiration").n()).isEqualTo(String.valueOf(expiry)); - assertThat(itemInDb.get("data").s()).isEqualTo("Fake Data"); + .matches(e -> !((IdempotencyItemAlreadyExistsException) e).getDataRecord().isPresent()); } @Test - void getRecord_shouldReturnExistingRecord() throws IdempotencyItemNotFoundException { - key = Collections.singletonMap("id", AttributeValue.builder().s("key").build()); - - // GIVEN: Insert a fake item with same id - Map item = new HashMap<>(key); - Instant now = Instant.now(); - long expiry = now.plus(30, ChronoUnit.SECONDS).getEpochSecond(); + void getRecord_shouldReturnDataRecord_whenItemExists() throws IdempotencyItemNotFoundException { + // GIVEN + long expiry = Instant.now().plus(3600, ChronoUnit.SECONDS).getEpochSecond(); + Map item = new HashMap<>(); + item.put("id", AttributeValue.builder().s("key").build()); + item.put("status", AttributeValue.builder().s("COMPLETED").build()); item.put("expiration", AttributeValue.builder().n(String.valueOf(expiry)).build()); - item.put("status", AttributeValue.builder().s(DataRecord.Status.COMPLETED.toString()).build()); - item.put("data", AttributeValue.builder().s("Fake Data").build()); - client.putItem(PutItemRequest.builder().tableName(TABLE_NAME).item(item).build()); + item.put("data", AttributeValue.builder().s("Response Data").build()); + + GetItemResponse response = GetItemResponse.builder() + .item(item) + .build(); + when(mockClient.getItem(any(GetItemRequest.class))).thenReturn(response); // WHEN - DataRecord dr = dynamoDBPersistenceStore.getRecord("key"); + DataRecord dataRecord = persistenceStore.getRecord("key"); // THEN - assertThat(dr.getIdempotencyKey()).isEqualTo("key"); - assertThat(dr.getStatus()).isEqualTo(DataRecord.Status.COMPLETED); - assertThat(dr.getResponseData()).isEqualTo("Fake Data"); - assertThat(dr.getExpiryTimestamp()).isEqualTo(expiry); + ArgumentCaptor captor = ArgumentCaptor.forClass(GetItemRequest.class); + verify(mockClient).getItem(captor.capture()); + + GetItemRequest request = captor.getValue(); + assertThat(request.tableName()).isEqualTo(TABLE_NAME); + assertThat(request.consistentRead()).isTrue(); + assertThat(request.key()).containsEntry("id", AttributeValue.builder().s("key").build()); + + assertThat(dataRecord.getIdempotencyKey()).isEqualTo("key"); + assertThat(dataRecord.getStatus()).isEqualTo(DataRecord.Status.COMPLETED); + assertThat(dataRecord.getExpiryTimestamp()).isEqualTo(expiry); + assertThat(dataRecord.getResponseData()).isEqualTo("Response Data"); } @Test - void getRecord_shouldThrowException_whenRecordIsAbsent() { - assertThatThrownBy(() -> dynamoDBPersistenceStore.getRecord("key")) + void getRecord_shouldThrowException_whenItemDoesNotExist() { + // GIVEN + GetItemResponse response = GetItemResponse.builder().build(); + when(mockClient.getItem(any(GetItemRequest.class))).thenReturn(response); + + // WHEN / THEN + assertThatThrownBy(() -> persistenceStore.getRecord("key")) .isInstanceOf(IdempotencyItemNotFoundException.class); } @Test - void updateRecord_shouldUpdateRecord() { - // GIVEN: Insert a fake item with same id - key = Collections.singletonMap("id", AttributeValue.builder().s("key").build()); - Map item = new HashMap<>(key); - Instant now = Instant.now(); - long expiry = now.plus(360, ChronoUnit.SECONDS).getEpochSecond(); - item.put("expiration", AttributeValue.builder().n(String.valueOf(expiry)).build()); - item.put("status", AttributeValue.builder().s(DataRecord.Status.INPROGRESS.toString()).build()); - client.putItem(PutItemRequest.builder().tableName(TABLE_NAME).item(item).build()); - // enable payload validation - dynamoDBPersistenceStore.configure(IdempotencyConfig.builder().withPayloadValidationJMESPath("path").build(), - null); + void updateRecord_shouldSendCorrectUpdateItemRequest() { + // GIVEN + long expiry = Instant.now().plus(3600, ChronoUnit.SECONDS).getEpochSecond(); + DataRecord dataRecord = new DataRecord("key", DataRecord.Status.COMPLETED, expiry, "Response", null); // WHEN - expiry = now.plus(3600, ChronoUnit.SECONDS).getEpochSecond(); - DataRecord dr = new DataRecord("key", DataRecord.Status.COMPLETED, expiry, "Fake result", "hash"); - dynamoDBPersistenceStore.updateRecord(dr); + persistenceStore.updateRecord(dataRecord); // THEN - Map itemInDb = client - .getItem(GetItemRequest.builder().tableName(TABLE_NAME).key(key).build()).item(); - assertThat(itemInDb.get("status").s()).isEqualTo("COMPLETED"); - assertThat(itemInDb.get("expiration").n()).isEqualTo(String.valueOf(expiry)); - assertThat(itemInDb.get("data").s()).isEqualTo("Fake result"); - assertThat(itemInDb.get("validation").s()).isEqualTo("hash"); + ArgumentCaptor captor = ArgumentCaptor.forClass(UpdateItemRequest.class); + verify(mockClient).updateItem(captor.capture()); + + UpdateItemRequest request = captor.getValue(); + assertThat(request.tableName()).isEqualTo(TABLE_NAME); + assertThat(request.key()).containsEntry("id", AttributeValue.builder().s("key").build()); + assertThat(request.updateExpression()).contains("SET #response_data = :response_data"); + assertThat(request.updateExpression()).contains("#expiry = :expiry"); + assertThat(request.updateExpression()).contains("#status = :status"); + assertThat(request.expressionAttributeValues().get(":response_data").s()).isEqualTo("Response"); + assertThat(request.expressionAttributeValues().get(":status").s()).isEqualTo("COMPLETED"); } @Test - void deleteRecord_shouldDeleteRecord() { - // GIVEN: Insert a fake item with same id - key = Collections.singletonMap("id", AttributeValue.builder().s("key").build()); - Map item = new HashMap<>(key); + void updateRecord_shouldIncludeValidation_whenPayloadValidationEnabled() { + // GIVEN + persistenceStore.configure(IdempotencyConfig.builder().withPayloadValidationJMESPath("body").build(), null); + long expiry = Instant.now().plus(3600, ChronoUnit.SECONDS).getEpochSecond(); + DataRecord dataRecord = new DataRecord("key", DataRecord.Status.COMPLETED, expiry, "Response", "hash123"); + + // WHEN + persistenceStore.updateRecord(dataRecord); + + // THEN + ArgumentCaptor captor = ArgumentCaptor.forClass(UpdateItemRequest.class); + verify(mockClient).updateItem(captor.capture()); + + UpdateItemRequest request = captor.getValue(); + assertThat(request.updateExpression()).contains("#validation_key = :validation_key"); + assertThat(request.expressionAttributeValues().get(":validation_key").s()).isEqualTo("hash123"); + } + + @Test + void deleteRecord_shouldSendCorrectDeleteItemRequest() { + // WHEN + persistenceStore.deleteRecord("key"); + + // THEN + ArgumentCaptor captor = ArgumentCaptor.forClass(DeleteItemRequest.class); + verify(mockClient).deleteItem(captor.capture()); + + DeleteItemRequest request = captor.getValue(); + assertThat(request.tableName()).isEqualTo(TABLE_NAME); + assertThat(request.key()).containsEntry("id", AttributeValue.builder().s("key").build()); + } + + @Test + void customAttributeNames_shouldUseCorrectAttributes() throws IdempotencyItemAlreadyExistsException { + // GIVEN + DynamoDBPersistenceStore customStore = DynamoDBPersistenceStore.builder() + .withTableName("custom_table") + .withDynamoDbClient(mockClient) + .withKeyAttr("pk") + .withSortKeyAttr("sk") + .withStaticPkValue("IDEMPOTENCY") + .withExpiryAttr("ttl") + .withStatusAttr("state") + .withDataAttr("result") + .withValidationAttr("hash") + .build(); + Instant now = Instant.now(); - long expiry = now.plus(360, ChronoUnit.SECONDS).getEpochSecond(); - item.put("expiration", AttributeValue.builder().n(String.valueOf(expiry)).build()); - item.put("status", AttributeValue.builder().s(DataRecord.Status.INPROGRESS.toString()).build()); - client.putItem(PutItemRequest.builder().tableName(TABLE_NAME).item(item).build()); - assertThat(client.scan(ScanRequest.builder().tableName(TABLE_NAME).build()).count()).isEqualTo(1); + long expiry = now.plus(3600, ChronoUnit.SECONDS).getEpochSecond(); + DataRecord dataRecord = new DataRecord("mykey", DataRecord.Status.INPROGRESS, expiry, null, null); // WHEN - dynamoDBPersistenceStore.deleteRecord("key"); + customStore.putRecord(dataRecord, now); // THEN - assertThat(client.scan(ScanRequest.builder().tableName(TABLE_NAME).build()).count()).isZero(); + ArgumentCaptor captor = ArgumentCaptor.forClass(PutItemRequest.class); + verify(mockClient).putItem(captor.capture()); + + PutItemRequest request = captor.getValue(); + assertThat(request.tableName()).isEqualTo("custom_table"); + assertThat(request.item()).containsEntry("pk", AttributeValue.builder().s("IDEMPOTENCY").build()); + assertThat(request.item()).containsEntry("sk", AttributeValue.builder().s("mykey").build()); + assertThat(request.item().get("state").s()).isEqualTo("INPROGRESS"); + assertThat(request.item().get("ttl").n()).isEqualTo(String.valueOf(expiry)); } @Test - void endToEndWithCustomAttrNamesAndSortKey() throws IdempotencyItemNotFoundException { - try { - client.createTable(CreateTableRequest.builder() - .tableName(TABLE_NAME_CUSTOM) - .keySchema( - KeySchemaElement.builder().keyType(KeyType.HASH).attributeName("key").build(), - KeySchemaElement.builder().keyType(KeyType.RANGE).attributeName("sortkey").build()) - .attributeDefinitions( - AttributeDefinition.builder().attributeName("key").attributeType(ScalarAttributeType.S) - .build(), - AttributeDefinition.builder().attributeName("sortkey").attributeType(ScalarAttributeType.S) - .build()) - .billingMode(BillingMode.PAY_PER_REQUEST) - .build()); - - DynamoDBPersistenceStore persistenceStore = DynamoDBPersistenceStore.builder() - .withTableName(TABLE_NAME_CUSTOM) - .withDynamoDbClient(client) - .withDataAttr("result") - .withExpiryAttr("expiry") - .withKeyAttr("key") - .withSortKeyAttr("sortkey") - .withStaticPkValue("pk") - .withStatusAttr("state") - .withValidationAttr("valid") - .build(); - - Instant now = Instant.now(); - DataRecord dr = new DataRecord( - "mykey", - DataRecord.Status.INPROGRESS, - now.plus(400, ChronoUnit.SECONDS).getEpochSecond(), - null, - null); - // PUT - persistenceStore.putRecord(dr, now); - - Map customKey = new HashMap<>(); - customKey.put("key", AttributeValue.builder().s("pk").build()); - customKey.put("sortkey", AttributeValue.builder().s("mykey").build()); - - Map itemInDb = client - .getItem(GetItemRequest.builder().tableName(TABLE_NAME_CUSTOM).key(customKey).build()).item(); - - // GET - DataRecord recordInDb = persistenceStore.getRecord("mykey"); - - assertThat(itemInDb).isNotNull(); - assertThat(itemInDb.get("key").s()).isEqualTo("pk"); - assertThat(itemInDb.get("sortkey").s()).isEqualTo(recordInDb.getIdempotencyKey()); - assertThat(itemInDb.get("state").s()).isEqualTo(recordInDb.getStatus().toString()); - assertThat(itemInDb.get("expiry").n()).isEqualTo(String.valueOf(recordInDb.getExpiryTimestamp())); - - // UPDATE - DataRecord updatedRecord = new DataRecord( - "mykey", - DataRecord.Status.COMPLETED, - now.plus(500, ChronoUnit.SECONDS).getEpochSecond(), - "response", - null); - persistenceStore.updateRecord(updatedRecord); - recordInDb = persistenceStore.getRecord("mykey"); - assertThat(recordInDb).isEqualTo(updatedRecord); - - // DELETE - persistenceStore.deleteRecord("mykey"); - assertThat(client.scan(ScanRequest.builder().tableName(TABLE_NAME_CUSTOM).build()).count()).isEqualTo(0); - - } finally { - try { - client.deleteTable(DeleteTableRequest.builder().tableName(TABLE_NAME_CUSTOM).build()); - } catch (Exception e) { - // OK - } - } + void customAttributeNames_shouldUseCorrectKey_forGet() throws IdempotencyItemNotFoundException { + // GIVEN + DynamoDBPersistenceStore customStore = DynamoDBPersistenceStore.builder() + .withTableName("custom_table") + .withDynamoDbClient(mockClient) + .withKeyAttr("pk") + .withSortKeyAttr("sk") + .withStaticPkValue("IDEMPOTENCY") + .withExpiryAttr("ttl") + .withStatusAttr("state") + .build(); + + long expiry = Instant.now().plus(3600, ChronoUnit.SECONDS).getEpochSecond(); + Map item = new HashMap<>(); + item.put("pk", AttributeValue.builder().s("IDEMPOTENCY").build()); + item.put("sk", AttributeValue.builder().s("mykey").build()); + item.put("state", AttributeValue.builder().s("COMPLETED").build()); + item.put("ttl", AttributeValue.builder().n(String.valueOf(expiry)).build()); + + GetItemResponse response = GetItemResponse.builder().item(item).build(); + when(mockClient.getItem(any(GetItemRequest.class))).thenReturn(response); + + // WHEN + DataRecord dataRecord = customStore.getRecord("mykey"); + + // THEN + ArgumentCaptor captor = ArgumentCaptor.forClass(GetItemRequest.class); + verify(mockClient).getItem(captor.capture()); + + GetItemRequest request = captor.getValue(); + assertThat(request.key()).containsEntry("pk", AttributeValue.builder().s("IDEMPOTENCY").build()); + assertThat(request.key()).containsEntry("sk", AttributeValue.builder().s("mykey").build()); + + assertThat(dataRecord.getIdempotencyKey()).isEqualTo("mykey"); + assertThat(dataRecord.getStatus()).isEqualTo(DataRecord.Status.COMPLETED); } @Test @SetEnvironmentVariable(key = Constants.IDEMPOTENCY_DISABLED_ENV, value = "true") void idempotencyDisabled_noClientShouldBeCreated() { - DynamoDBPersistenceStore store = DynamoDBPersistenceStore.builder().withTableName(TABLE_NAME).build(); - assertThatThrownBy(() -> store.getRecord("fake")) - .isInstanceOf(NullPointerException.class); - } - - @BeforeEach - void setup() { - dynamoDBPersistenceStore = DynamoDBPersistenceStore.builder() + // GIVEN / WHEN + DynamoDBPersistenceStore store = DynamoDBPersistenceStore.builder() .withTableName(TABLE_NAME) - .withDynamoDbClient(client) .build(); - } - @AfterEach - void emptyDB() { - // Clear all items from the table - client.scan(ScanRequest.builder().tableName(TABLE_NAME).build()) - .items() - .forEach(item -> { - Map itemKey = Collections.singletonMap("id", item.get("id")); - client.deleteItem(DeleteItemRequest.builder().tableName(TABLE_NAME).key(itemKey).build()); - }); - key = null; + // THEN + assertThatThrownBy(() -> store.getRecord("fake")) + .isInstanceOf(NullPointerException.class); } } diff --git a/powertools-idempotency/powertools-idempotency-dynamodb/src/test/java/software/amazon/lambda/powertools/idempotency/persistence/dynamodb/IdempotencyTest.java b/powertools-idempotency/powertools-idempotency-dynamodb/src/test/java/software/amazon/lambda/powertools/idempotency/persistence/dynamodb/IdempotencyTest.java deleted file mode 100644 index e85614580..000000000 --- a/powertools-idempotency/powertools-idempotency-dynamodb/src/test/java/software/amazon/lambda/powertools/idempotency/persistence/dynamodb/IdempotencyTest.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright 2023 Amazon.com, Inc. or its affiliates. - * Licensed under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * 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. - * - */ - -package software.amazon.lambda.powertools.idempotency.persistence.dynamodb; - -import static org.assertj.core.api.Assertions.assertThat; - -import org.junit.jupiter.api.Test; - -import com.amazonaws.services.lambda.runtime.Context; -import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyResponseEvent; -import com.amazonaws.services.lambda.runtime.tests.EventLoader; - -import software.amazon.awssdk.services.dynamodb.model.ScanRequest; -import software.amazon.lambda.powertools.common.stubs.TestLambdaContext; -import software.amazon.lambda.powertools.idempotency.persistence.dynamodb.handlers.IdempotencyFunction; - -class IdempotencyTest extends DynamoDBConfig { - - private Context context = new TestLambdaContext(); - - @Test - void endToEndTest() { - IdempotencyFunction function = new IdempotencyFunction(client); - - APIGatewayProxyResponseEvent response = function - .handleRequest(EventLoader.loadApiGatewayRestEvent("apigw_event2.json"), context); - assertThat(function.handlerExecuted).isTrue(); - - function.handlerExecuted = false; - - APIGatewayProxyResponseEvent response2 = function - .handleRequest(EventLoader.loadApiGatewayRestEvent("apigw_event2.json"), context); - assertThat(function.handlerExecuted).isFalse(); - - assertThat(response).isEqualTo(response2); - assertThat(response2.getBody()).contains("hello world"); - - assertThat(client.scan(ScanRequest.builder().tableName(TABLE_NAME).build()).count()).isEqualTo(1); - } -} diff --git a/powertools-idempotency/powertools-idempotency-dynamodb/src/test/java/software/amazon/lambda/powertools/idempotency/persistence/dynamodb/handlers/IdempotencyFunction.java b/powertools-idempotency/powertools-idempotency-dynamodb/src/test/java/software/amazon/lambda/powertools/idempotency/persistence/dynamodb/handlers/IdempotencyFunction.java deleted file mode 100644 index d816af801..000000000 --- a/powertools-idempotency/powertools-idempotency-dynamodb/src/test/java/software/amazon/lambda/powertools/idempotency/persistence/dynamodb/handlers/IdempotencyFunction.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Copyright 2023 Amazon.com, Inc. or its affiliates. - * Licensed under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * 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. - * - */ - -package software.amazon.lambda.powertools.idempotency.persistence.dynamodb.handlers; - -import java.util.HashMap; -import java.util.Map; - -import com.amazonaws.services.lambda.runtime.Context; -import com.amazonaws.services.lambda.runtime.RequestHandler; -import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent; -import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyResponseEvent; - -import software.amazon.awssdk.services.dynamodb.DynamoDbClient; -import software.amazon.lambda.powertools.idempotency.Idempotency; -import software.amazon.lambda.powertools.idempotency.IdempotencyConfig; -import software.amazon.lambda.powertools.idempotency.Idempotent; -import software.amazon.lambda.powertools.idempotency.persistence.dynamodb.DynamoDBPersistenceStore; - -public class IdempotencyFunction implements RequestHandler { - public boolean handlerExecuted = false; - - public IdempotencyFunction(DynamoDbClient client) { - // we need to initialize idempotency configuration before the handleRequest method is called - Idempotency.config().withConfig( - IdempotencyConfig.builder() - .withEventKeyJMESPath("powertools_json(body).address") - .build()) - .withPersistenceStore( - DynamoDBPersistenceStore.builder() - .withTableName("idempotency_table") - .withDynamoDbClient(client) - .build()) - .configure(); - } - - @Idempotent - public APIGatewayProxyResponseEvent handleRequest(final APIGatewayProxyRequestEvent input, final Context context) { - handlerExecuted = true; - Map headers = new HashMap<>(); - - headers.put("Content-Type", "application/json"); - headers.put("Access-Control-Allow-Origin", "*"); - headers.put("Access-Control-Allow-Methods", "GET, OPTIONS"); - headers.put("Access-Control-Allow-Headers", "*"); - - APIGatewayProxyResponseEvent response = new APIGatewayProxyResponseEvent() - .withHeaders(headers); - - return response - .withStatusCode(200) - .withBody("{ \"message\": \"hello world\"}"); - - } -} From 2177870b0a11b34835b6cba5b5be0b54c512ffea Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 12 May 2026 14:49:56 +0200 Subject: [PATCH 192/202] chore: bump actions/dependency-review-action from 4.9.0 to 5.0.0 (#2502) Reviewed and approved by @phipag. Review performed by Claude. Node runtime refresh, no API breaking changes. --- .github/workflows/security-dependencies-check.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/security-dependencies-check.yml b/.github/workflows/security-dependencies-check.yml index b2b5c7f8b..30172aedc 100644 --- a/.github/workflows/security-dependencies-check.yml +++ b/.github/workflows/security-dependencies-check.yml @@ -25,6 +25,6 @@ jobs: - name: Checkout Repository uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Verify Contents - uses: actions/dependency-review-action@2031cfc080254a8a887f58cffee85186f0e49e48 # v4.9.0 + uses: actions/dependency-review-action@a1d282b36b6f3519aa1f3fc636f609c47dddb294 # v5.0.0 with: config-file: './.github/dependency-review-config.yml' From 04b0c10a65373670f2ce8297f636078b253f5d41 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 12 May 2026 14:50:13 +0200 Subject: [PATCH 193/202] chore: bump aws.sdk.version from 2.43.2 to 2.44.4 (#2500) Reviewed and approved by @phipag. Review performed by Claude. Routine minor SDK bump. --- examples/powertools-examples-cloudformation/pom.xml | 2 +- pom.xml | 2 +- powertools-e2e-tests/handlers/pom.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/powertools-examples-cloudformation/pom.xml b/examples/powertools-examples-cloudformation/pom.xml index 46ed94e3a..d158d9166 100644 --- a/examples/powertools-examples-cloudformation/pom.xml +++ b/examples/powertools-examples-cloudformation/pom.xml @@ -14,7 +14,7 @@ 11 1.4.0 3.16.1 - 2.43.2 + 2.44.4 1.9.20.1 diff --git a/pom.xml b/pom.xml index f4e9f2c0c..5d9386062 100644 --- a/pom.xml +++ b/pom.xml @@ -86,7 +86,7 @@ 2.25.4 2.0.17 2.21.2 - 2.43.2 + 2.44.4 2.21.0 2.2.0 UTF-8 diff --git a/powertools-e2e-tests/handlers/pom.xml b/powertools-e2e-tests/handlers/pom.xml index 75f520443..a3c4195e0 100644 --- a/powertools-e2e-tests/handlers/pom.xml +++ b/powertools-e2e-tests/handlers/pom.xml @@ -19,7 +19,7 @@ 3.6.2 1.14.1 3.15.0 - 2.43.2 + 2.44.4 1.9.20.1 true From a84ae48a38b7ba5285af514858e30e507a523b9e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 15 May 2026 10:48:22 +0200 Subject: [PATCH 194/202] chore: bump log4j.version from 2.25.4 to 2.26.0 (#2503) Reviewed and approved by @phipag. Review performed by Claude. Safe minor version bump of Apache Log4j 2.25.4 to 2.26.0. --- examples/powertools-examples-core-utilities/cdk/app/pom.xml | 2 +- examples/powertools-examples-core-utilities/sam-graalvm/pom.xml | 2 +- examples/powertools-examples-parameters/sam-graalvm/pom.xml | 2 +- pom.xml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/examples/powertools-examples-core-utilities/cdk/app/pom.xml b/examples/powertools-examples-core-utilities/cdk/app/pom.xml index 93286d3f2..12206f52b 100644 --- a/examples/powertools-examples-core-utilities/cdk/app/pom.xml +++ b/examples/powertools-examples-core-utilities/cdk/app/pom.xml @@ -11,7 +11,7 @@ jar - 2.25.4 + 2.26.0 11 11 1.9.20.1 diff --git a/examples/powertools-examples-core-utilities/sam-graalvm/pom.xml b/examples/powertools-examples-core-utilities/sam-graalvm/pom.xml index d707a821a..6204dc906 100644 --- a/examples/powertools-examples-core-utilities/sam-graalvm/pom.xml +++ b/examples/powertools-examples-core-utilities/sam-graalvm/pom.xml @@ -9,7 +9,7 @@ jar - 2.25.4 + 2.26.0 11 11 1.9.20.1 diff --git a/examples/powertools-examples-parameters/sam-graalvm/pom.xml b/examples/powertools-examples-parameters/sam-graalvm/pom.xml index bfd4f6191..572375100 100644 --- a/examples/powertools-examples-parameters/sam-graalvm/pom.xml +++ b/examples/powertools-examples-parameters/sam-graalvm/pom.xml @@ -8,7 +8,7 @@ Powertools for AWS Lambda (Java) - Examples - Parameters GraalVM - 2.25.4 + 2.26.0 11 11 1.9.20.1 diff --git a/pom.xml b/pom.xml index 5d9386062..103de62e9 100644 --- a/pom.xml +++ b/pom.xml @@ -83,7 +83,7 @@ 11 11 3.1.2 - 2.25.4 + 2.26.0 2.0.17 2.21.2 2.44.4 From cbcb228e32cf0e4b437860807219341768bd28ce Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 15 May 2026 16:45:37 +0200 Subject: [PATCH 195/202] chore: bump co.elastic.logging:logback-ecs-encoder from 1.7.0 to 1.8.0 (#2504) Reviewed and approved by @phipag. Review performed by Claude. Safe minor version bump of logback-ecs-encoder 1.7.0 to 1.8.0. --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 103de62e9..d64c5d387 100644 --- a/pom.xml +++ b/pom.xml @@ -113,7 +113,7 @@ 0.6.0 1.12.781 2.21.0 - 1.7.0 + 1.8.0 5.23.0 5.23.0 2.3.0 From 9965a2877a5fa57c8e4a601e087c1ecc0e71292a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 19 May 2026 00:55:54 +0200 Subject: [PATCH 196/202] chore: bump github/codeql-action from 4.35.4 to 4.35.5 (#2507) Reviewed and approved by @phipag. Review performed by Claude. Safe patch bump of github/codeql-action 4.35.4 to 4.35.5. --- .github/workflows/security-scorecard.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/security-scorecard.yml b/.github/workflows/security-scorecard.yml index 2e156daf5..b7e5d0f0e 100644 --- a/.github/workflows/security-scorecard.yml +++ b/.github/workflows/security-scorecard.yml @@ -53,6 +53,6 @@ jobs: path: results.sarif retention-days: 5 - name: Upload to Code-Scanning - uses: github/codeql-action/upload-sarif@68bde559dea0fdcac2102bfdf6230c5f70eb485e # v3.29.5 + uses: github/codeql-action/upload-sarif@9e0d7b8d25671d64c341c19c0152d693099fb5ba # v3.29.5 with: sarif_file: results.sarif From 5b93fa26404b1c4b9ea0982448c99e282fcd03c6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 19 May 2026 00:56:10 +0200 Subject: [PATCH 197/202] chore: bump sam/build-java25 (#2506) Reviewed and approved by @phipag. Review performed by Claude. Safe SHA bump of sam/build-java25 image for e2e tests. --- powertools-e2e-tests/src/test/resources/docker/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/powertools-e2e-tests/src/test/resources/docker/Dockerfile b/powertools-e2e-tests/src/test/resources/docker/Dockerfile index d7cc856bc..515884839 100644 --- a/powertools-e2e-tests/src/test/resources/docker/Dockerfile +++ b/powertools-e2e-tests/src/test/resources/docker/Dockerfile @@ -1,5 +1,5 @@ # Use the official AWS SAM base image for Java 25 -FROM public.ecr.aws/sam/build-java25@sha256:9ddb7b5954969c5d734b2dcd74ffd68b93816adc56a12209f6b8620ac107c899 +FROM public.ecr.aws/sam/build-java25@sha256:d8fa1bb0f2b1548d37755232a0c36fbf146aa30809236d072c850b724d2ca4f1 # Install GraalVM dependencies RUN curl -4 -L https://download.oracle.com/graalvm/25/latest/graalvm-jdk-25_linux-x64_bin.tar.gz | tar -xvz From 3ae14fecadadcc44026cdfc80ff927ce24c06ccb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 19 May 2026 00:56:25 +0200 Subject: [PATCH 198/202] chore: bump aws.sdk.version from 2.44.4 to 2.44.7 (#2505) Reviewed and approved by @phipag. Review performed by Claude. Safe patch bump of aws.sdk.version 2.44.4 to 2.44.7. --- examples/powertools-examples-cloudformation/pom.xml | 2 +- pom.xml | 2 +- powertools-e2e-tests/handlers/pom.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/powertools-examples-cloudformation/pom.xml b/examples/powertools-examples-cloudformation/pom.xml index d158d9166..e009b7c74 100644 --- a/examples/powertools-examples-cloudformation/pom.xml +++ b/examples/powertools-examples-cloudformation/pom.xml @@ -14,7 +14,7 @@ 11 1.4.0 3.16.1 - 2.44.4 + 2.44.7 1.9.20.1 diff --git a/pom.xml b/pom.xml index d64c5d387..55f9f95d6 100644 --- a/pom.xml +++ b/pom.xml @@ -86,7 +86,7 @@ 2.26.0 2.0.17 2.21.2 - 2.44.4 + 2.44.7 2.21.0 2.2.0 UTF-8 diff --git a/powertools-e2e-tests/handlers/pom.xml b/powertools-e2e-tests/handlers/pom.xml index a3c4195e0..6bbc76ef1 100644 --- a/powertools-e2e-tests/handlers/pom.xml +++ b/powertools-e2e-tests/handlers/pom.xml @@ -19,7 +19,7 @@ 3.6.2 1.14.1 3.15.0 - 2.44.4 + 2.44.7 1.9.20.1 true From 3ef86ee2b69b6a66f83a02f65b8dca938401eca9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 20 May 2026 00:56:48 +0200 Subject: [PATCH 199/202] chore: bump sam/build-java25 (#2509) Reviewed and approved by @phipag. Review performed by Claude. Safe SHA bump of sam/build-java25 image for e2e tests. --- powertools-e2e-tests/src/test/resources/docker/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/powertools-e2e-tests/src/test/resources/docker/Dockerfile b/powertools-e2e-tests/src/test/resources/docker/Dockerfile index 515884839..2e6d07f8d 100644 --- a/powertools-e2e-tests/src/test/resources/docker/Dockerfile +++ b/powertools-e2e-tests/src/test/resources/docker/Dockerfile @@ -1,5 +1,5 @@ # Use the official AWS SAM base image for Java 25 -FROM public.ecr.aws/sam/build-java25@sha256:d8fa1bb0f2b1548d37755232a0c36fbf146aa30809236d072c850b724d2ca4f1 +FROM public.ecr.aws/sam/build-java25@sha256:637e067f425d92165d0568d69dda45e906bc68801f078829b821871f5139fe88 # Install GraalVM dependencies RUN curl -4 -L https://download.oracle.com/graalvm/25/latest/graalvm-jdk-25_linux-x64_bin.tar.gz | tar -xvz From 76eec0346695922eb0e1978fa88be2bdfb14a944 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 20 May 2026 00:57:03 +0200 Subject: [PATCH 200/202] chore: bump aws.sdk.version from 2.42.34 to 2.44.9 (#2508) Reviewed and approved by @phipag. Review performed by Claude. Safe bump of sdk.version in powertools-examples-batch from 2.42.34 to 2.44.9. --- examples/powertools-examples-batch/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/powertools-examples-batch/pom.xml b/examples/powertools-examples-batch/pom.xml index d566ac351..cd71a6e7c 100644 --- a/examples/powertools-examples-batch/pom.xml +++ b/examples/powertools-examples-batch/pom.xml @@ -14,7 +14,7 @@ 11 11 1.9.20.1 - 2.42.34 + 2.44.9 From 296068153ca09c8a7328a9c1b434fc3986b74218 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 20 May 2026 22:13:13 +0200 Subject: [PATCH 201/202] chore: bump sam/build-java25 (#2512) Reviewed and approved by @phipag. Review performed by Claude. Safe SHA bump of sam/build-java25 image for e2e tests. --- powertools-e2e-tests/src/test/resources/docker/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/powertools-e2e-tests/src/test/resources/docker/Dockerfile b/powertools-e2e-tests/src/test/resources/docker/Dockerfile index 2e6d07f8d..1dd51129b 100644 --- a/powertools-e2e-tests/src/test/resources/docker/Dockerfile +++ b/powertools-e2e-tests/src/test/resources/docker/Dockerfile @@ -1,5 +1,5 @@ # Use the official AWS SAM base image for Java 25 -FROM public.ecr.aws/sam/build-java25@sha256:637e067f425d92165d0568d69dda45e906bc68801f078829b821871f5139fe88 +FROM public.ecr.aws/sam/build-java25@sha256:7db61893a37ed07b454aaa66ef74ae9c2221d1200b7796ebead4b25da01f7233 # Install GraalVM dependencies RUN curl -4 -L https://download.oracle.com/graalvm/25/latest/graalvm-jdk-25_linux-x64_bin.tar.gz | tar -xvz From afdb541a5b64d2865ba9dd2aa3bb5a690a15d767 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 20 May 2026 22:13:30 +0200 Subject: [PATCH 202/202] chore: bump aws.sdk.version from 2.44.7 to 2.44.9 (#2511) Reviewed and approved by @phipag. Review performed by Claude. Safe patch bump of aws.sdk.version 2.44.7 to 2.44.9. --- examples/powertools-examples-cloudformation/pom.xml | 2 +- pom.xml | 2 +- powertools-e2e-tests/handlers/pom.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/powertools-examples-cloudformation/pom.xml b/examples/powertools-examples-cloudformation/pom.xml index e009b7c74..5b3ebd993 100644 --- a/examples/powertools-examples-cloudformation/pom.xml +++ b/examples/powertools-examples-cloudformation/pom.xml @@ -14,7 +14,7 @@ 11 1.4.0 3.16.1 - 2.44.7 + 2.44.9 1.9.20.1 diff --git a/pom.xml b/pom.xml index 55f9f95d6..62ec31e9d 100644 --- a/pom.xml +++ b/pom.xml @@ -86,7 +86,7 @@ 2.26.0 2.0.17 2.21.2 - 2.44.7 + 2.44.9 2.21.0 2.2.0 UTF-8 diff --git a/powertools-e2e-tests/handlers/pom.xml b/powertools-e2e-tests/handlers/pom.xml index 6bbc76ef1..7d4b3a8a2 100644 --- a/powertools-e2e-tests/handlers/pom.xml +++ b/powertools-e2e-tests/handlers/pom.xml @@ -19,7 +19,7 @@ 3.6.2 1.14.1 3.15.0 - 2.44.7 + 2.44.9 1.9.20.1 true