diff --git a/.github/workflows/build-docs.yml b/.github/workflows/build-docs.yml index a94ace711..fc5f6811b 100644 --- a/.github/workflows/build-docs.yml +++ b/.github/workflows/build-docs.yml @@ -23,16 +23,18 @@ 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 - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd with: fetch-depth: 0 - name: Build @@ -41,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@d979d5b3a71173a29b74b5b88418bfda9437d885 with: aws-region: us-east-1 role-to-assume: ${{ secrets.AWS_DOCS_ROLE_ARN }} diff --git a/.github/workflows/check-build.yml b/.github/workflows/check-build.yml index 31a286318..052153a04 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' @@ -77,9 +79,9 @@ 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 + uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 with: distribution: corretto java-version: ${{ matrix.java }} @@ -94,20 +96,21 @@ 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 id: changed-files - uses: tj-actions/changed-files@e0021407031f5be11a464abee9a0776171c79891 # v47.0.1 + uses: tj-actions/changed-files@9426d40962ed5378910ee2e21d5f8c6fcbf2dd96 # v47.0.6 with: files: | powertools-*/** pom.xml - name: Setup GraalVM - uses: graalvm/setup-graalvm@54b4f5a65c1a84b2fdfdc2078fe43df32819e4b1 # v1.4.5 + uses: graalvm/setup-graalvm@bef4b0e916c7dd079bf60fb95d49139f67e32c5f # v1.5.3 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 @@ -123,9 +126,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") @@ -134,11 +137,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/.github/workflows/check-e2e.yml b/.github/workflows/check-e2e.yml index 378d48a60..49d79a734 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 @@ -40,67 +41,127 @@ 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@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + - 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 }} 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@61815dcd50bd041e203e49132bacad1fd04d2708 # v5.1.1 + uses: aws-actions/configure-aws-credentials@d979d5b3a71173a29b74b5b88418bfda9437d885 # v6.1.1 with: role-to-assume: ${{ secrets.AWS_IAM_ROLE }} aws-region: us-east-1 - 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@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + - 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 }} 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@61815dcd50bd041e203e49132bacad1fd04d2708 # v5.1.1 + uses: aws-actions/configure-aws-credentials@d979d5b3a71173a29b74b5b88418bfda9437d885 # v6.1.1 with: role-to-assume: ${{ secrets.AWS_IAM_ROLE }} aws-region: us-east-1 - 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 diff --git a/.github/workflows/check-pmd.yml b/.github/workflows/check-pmd.yml index 7e7dce429..cc6c53766 100644 --- a/.github/workflows/check-pmd.yml +++ b/.github/workflows/check-pmd.yml @@ -18,20 +18,18 @@ 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@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + 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 @@ -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/check-spotbugs.yml b/.github/workflows/check-spotbugs.yml index c5c8197f9..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/**' @@ -41,9 +42,9 @@ 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 + uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0 with: distribution: 'corretto' java-version: 21 diff --git a/.github/workflows/release-drafter.yml b/.github/workflows/release-drafter.yml index 46f6db489..1e024ddee 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@267d2e0268deae5d44f3ba5029dd4d6e85f9d52d + uses: release-drafter/release-drafter@c2e2804cc59f45f57076a99af580d0fedb697927 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 630b91321..e5e8db091 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,12 +97,14 @@ jobs: runs-on: ubuntu-latest needs: - setup + permissions: + contents: read # checkout repository outputs: source_hash: ${{ steps.upload_source.outputs.artifact-digest }} 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 @@ -112,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@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: if-no-files-found: error name: source @@ -128,16 +129,15 @@ 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 - uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v4.6.1 + uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v4.6.1 with: name: source - name: Setup Java - uses: actions/setup-java@f2beeb24e141e01a676f977032f5a29d81c9e27e + uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 with: distribution: corretto java-version: 21 @@ -162,17 +162,19 @@ 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) }} steps: - id: download_source name: Download artifacts - uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v4.6.1 + uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v4.6.1 with: name: source - name: Setup Java - uses: actions/setup-java@f2beeb24e141e01a676f977032f5a29d81c9e27e + uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 with: distribution: corretto java-version: ${{ matrix.java }} @@ -187,15 +189,17 @@ 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 name: Download artifacts - uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v4.6.1 + uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v4.6.1 with: name: source - name: Setup Java - uses: actions/setup-java@f2beeb24e141e01a676f977032f5a29d81c9e27e + uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 with: distribution: corretto java-version: 21 @@ -219,17 +223,17 @@ 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 - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: ref: ${{ env.RELEASE_COMMIT }} - id: download_source name: Download artifacts - uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v4.6.1 + uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v4.6.1 with: name: source - id: setup-git @@ -266,13 +270,13 @@ 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 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 }} @@ -282,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@d979d5b3a71173a29b74b5b88418bfda9437d885 with: aws-region: us-east-1 role-to-assume: ${{ secrets.AWS_DOCS_ROLE_ARN }} diff --git a/.github/workflows/security-dependencies-check.yml b/.github/workflows/security-dependencies-check.yml index 6729fd304..30172aedc 100644 --- a/.github/workflows/security-dependencies-check.yml +++ b/.github/workflows/security-dependencies-check.yml @@ -13,19 +13,18 @@ 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@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Verify Contents - uses: actions/dependency-review-action@3c4e3dcb1aa7874d2c16be7d79418e9b7efd6261 # v4.8.2 + uses: actions/dependency-review-action@a1d282b36b6f3519aa1f3fc636f609c47dddb294 # v5.0.0 with: config-file: './.github/dependency-review-config.yml' diff --git a/.github/workflows/security-scorecard.yml b/.github/workflows/security-scorecard.yml index 774bd2745..b7e5d0f0e 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,11 +31,12 @@ 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@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: persist-credentials: false - name: Run Analysis @@ -46,12 +47,12 @@ jobs: publish_results: true repo_token: ${{ secrets.SCORECARD_TOKEN }} - name: Upload Results - uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: SARIF file 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@9e0d7b8d25671d64c341c19c0152d693099fb5ba # v3.29.5 with: sarif_file: results.sarif 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/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/docs/Dockerfile b/docs/Dockerfile index ee71acb0e..3f3918bdd 100644 --- a/docs/Dockerfile +++ b/docs/Dockerfile @@ -1,4 +1,4 @@ -FROM squidfunk/mkdocs-material@sha256:3bba0a99bc6e635bb8e53f379d32ab9cecb554adee9cc8f59a347f93ecf82f3b +FROM squidfunk/mkdocs-material@sha256:868ad4d39fb5865b72d00173ade00f4eae2b38dde7ff790a011cc44ce4a8ff8e COPY requirements.txt /tmp/ RUN pip install --require-hashes -r /tmp/requirements.txt 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/docs/requirements.txt b/docs/requirements.txt index 16529cf3b..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.44 \ - --hash=sha256:9e0e10cda9bed1ee64bc9a6de50e7e38a9c9943241cd7f585f6df3ed28011110 \ - --hash=sha256:c87e30b26253bf5418b01b0660f818967f3c503193838337fe5e573331249269 +gitpython==3.1.50 \ + --hash=sha256:80da2d12504d52e1f998772dc5baf6e553f8d2fcfe1fcc226c9d9a2ee3372dcc \ + --hash=sha256:d352abe2908d07355014abdd21ddf798c2a961469239afec4962e9da884858f9 # via mkdocs-git-revision-date-plugin hjson==3.1.0 \ --hash=sha256:55af475a27cf83a7969c808399d7bccdec8fb836a07ddbd574587593b9cdcf75 \ @@ -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 \ 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/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 0091fb5ca..cd71a6e7c 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 @@ -14,7 +14,7 @@ 11 11 1.9.20.1 - 2.39.3 + 2.44.9 @@ -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/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 fcee22d49..5b3ebd993 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 @@ -14,7 +14,7 @@ 11 1.4.0 3.16.1 - 2.41.10 + 2.44.9 1.9.20.1 @@ -77,7 +77,7 @@ com.amazonaws aws-lambda-java-runtime-interface-client - 2.8.7 + 2.10.1 @@ -116,7 +116,7 @@ org.apache.maven.plugins maven-shade-plugin - 3.6.1 + 3.6.2 package @@ -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/cdk/app/pom.xml b/examples/powertools-examples-core-utilities/cdk/app/pom.xml index c02b73026..12206f52b 100644 --- a/examples/powertools-examples-core-utilities/cdk/app/pom.xml +++ b/examples/powertools-examples-core-utilities/cdk/app/pom.xml @@ -6,12 +6,12 @@ software.amazon.lambda.examples - 2.9.0 + 2.10.0 powertools-examples-core-utilities-cdk jar - 2.25.3 + 2.26.0 11 11 1.9.20.1 @@ -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/cdk/infra/pom.xml b/examples/powertools-examples-core-utilities/cdk/infra/pom.xml index e3ceb7e65..73180ab67 100644 --- a/examples/powertools-examples-core-utilities/cdk/infra/pom.xml +++ b/examples/powertools-examples-core-utilities/cdk/infra/pom.xml @@ -4,19 +4,19 @@ 4.0.0 software.amazon.lambda.examples cdk - 2.9.0 + 2.10.0 UTF-8 - 2.224.0 + 2.250.0 [10.0.0,11.0.0) - 5.14.1 + 5.14.3 org.apache.maven.plugins maven-compiler-plugin - 3.14.1 + 3.15.0 11 11 @@ -25,7 +25,7 @@ org.codehaus.mojo exec-maven-plugin - 3.6.2 + 3.6.3 cdk.CdkApp 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 cf50e5128..6204dc906 100644 --- a/examples/powertools-examples-core-utilities/sam-graalvm/pom.xml +++ b/examples/powertools-examples-core-utilities/sam-graalvm/pom.xml @@ -4,12 +4,12 @@ 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 - 2.25.3 + 2.26.0 11 11 1.9.20.1 @@ -49,7 +49,7 @@ com.amazonaws aws-lambda-java-runtime-interface-client - 2.8.7 + 2.10.1 org.apache.logging.log4j @@ -116,7 +116,7 @@ org.apache.maven.plugins maven-shade-plugin - 3.6.1 + 3.6.2 package @@ -158,7 +158,7 @@ org.graalvm.buildtools native-maven-plugin - 0.11.2 + 0.11.5 true diff --git a/examples/powertools-examples-core-utilities/sam/pom.xml b/examples/powertools-examples-core-utilities/sam/pom.xml index 2d6a00161..917215c21 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 @@ -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 26e647dad..8e5ff0c9c 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 @@ -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 4de1e415c..461737a7a 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 @@ -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 0536951aa..eeb32cae0 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 @@ -43,7 +43,7 @@ com.amazonaws aws-lambda-java-runtime-interface-client - 2.8.7 + 2.10.1 @@ -96,7 +96,7 @@ org.apache.maven.plugins maven-shade-plugin - 3.6.1 + 3.6.2 package @@ -139,7 +139,7 @@ org.graalvm.buildtools native-maven-plugin - 0.11.2 + 0.11.5 true diff --git a/examples/powertools-examples-idempotency/sam/pom.xml b/examples/powertools-examples-idempotency/sam/pom.xml index 22d6a9c81..faf502deb 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 @@ -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 99e04e8a8..0571c9dfe 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 @@ -12,7 +12,7 @@ 11 1.9.20.1 1.12.1 - 4.33.2 + 4.34.1 @@ -24,7 +24,7 @@ org.apache.kafka kafka-clients - 4.1.1 + 4.2.0 org.apache.avro @@ -64,7 +64,7 @@ org.apache.maven.plugins maven-shade-plugin - 3.6.1 + 3.6.2 package 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..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.1 +// 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= */ 1, + /* 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 caf17ad50..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.1 +// 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 ce3214777..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.1 +// 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= */ 1, + /* patch= */ 4, /* suffix= */ "", "ProtobufProductOuterClass"); } diff --git a/examples/powertools-examples-kafka/tools/pom.xml b/examples/powertools-examples-kafka/tools/pom.xml index e6f2654d1..bcb3d84d5 100644 --- a/examples/powertools-examples-kafka/tools/pom.xml +++ b/examples/powertools-examples-kafka/tools/pom.xml @@ -11,9 +11,9 @@ 11 11 - 1.12.0 + 1.12.1 4.31.0 - 4.0.0 + 4.0.2 diff --git a/examples/powertools-examples-parameters/sam-graalvm/pom.xml b/examples/powertools-examples-parameters/sam-graalvm/pom.xml index ee3631d8b..572375100 100644 --- a/examples/powertools-examples-parameters/sam-graalvm/pom.xml +++ b/examples/powertools-examples-parameters/sam-graalvm/pom.xml @@ -2,13 +2,13 @@ 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 - 2.25.3 + 2.26.0 11 11 1.9.20.1 @@ -49,7 +49,7 @@ com.amazonaws aws-lambda-java-runtime-interface-client - 2.8.7 + 2.10.1 org.apache.logging.log4j @@ -76,7 +76,7 @@ org.mockito mockito-core - 5.21.0 + 5.23.0 test @@ -132,7 +132,7 @@ org.apache.maven.plugins maven-shade-plugin - 3.6.1 + 3.6.2 package @@ -175,7 +175,7 @@ org.graalvm.buildtools native-maven-plugin - 0.11.2 + 0.11.5 true diff --git a/examples/powertools-examples-parameters/sam/pom.xml b/examples/powertools-examples-parameters/sam/pom.xml index d59e494f2..5b8b17d95 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 @@ -50,7 +50,7 @@ org.mockito mockito-core - 5.21.0 + 5.23.0 test diff --git a/examples/powertools-examples-serialization/sam-graalvm/pom.xml b/examples/powertools-examples-serialization/sam-graalvm/pom.xml index 5077c8989..e2744223b 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 @@ -36,7 +36,7 @@ com.amazonaws aws-lambda-java-runtime-interface-client - 2.8.7 + 2.10.1 @@ -61,7 +61,7 @@ org.graalvm.buildtools native-maven-plugin - 0.11.2 + 0.11.5 true 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..c312f0b39 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 @@ -53,7 +53,7 @@ org.mockito mockito-core - 5.21.0 + 5.23.0 test diff --git a/mkdocs.yml b/mkdocs.yml index b52b88cca..f19a46f61 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 @@ -129,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 f42f95299..62ec31e9d 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 @@ -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 @@ -82,41 +83,42 @@ 11 11 3.1.2 - 2.25.3 + 2.26.0 2.0.17 - 2.20.1 - 2.41.10 - 2.20.0 + 2.21.2 + 2.44.9 + 2.21.0 2.2.0 UTF-8 1.4.0 3.16.1 - 1.1.6 - 3.14.1 + 1.3.1 + 3.15.0 1.9.7 1.13.1 0.8.11 1.6.13 3.12.0 - 3.3.1 + 3.4.0 3.2.1 1.14.1 - 3.5.4 + 3.5.5 0.8.14 1.7.0 3.12.0 - 3.3.1 + 3.4.0 3.2.8 5.14.0 4.1.2 0.6.0 1.12.781 - 2.20.1 - 1.7.0 - 5.21.0 - 5.21.0 + 2.21.0 + 1.8.0 + 5.23.0 + 5.23.0 2.3.0 1.5.0 + 0.11.5 @@ -335,7 +337,7 @@ org.assertj assertj-core - 3.27.6 + 3.27.7 test @@ -448,7 +450,46 @@ org.codehaus.mojo exec-maven-plugin - 3.6.2 + 3.6.3 + + + 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 + + @@ -523,7 +564,7 @@ org.sonatype.central central-publishing-maven-plugin - 0.9.0 + 0.10.0 true central @@ -597,7 +638,7 @@ com.github.spotbugs spotbugs-maven-plugin - 4.9.8.1 + 4.9.8.3 test @@ -635,6 +676,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-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 cb06dc1f3..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 @@ -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..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 @@ -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-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-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/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 new file mode 100644 index 000000000..518feac59 --- /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.10.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/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 new file mode 100644 index 000000000..ee73976a7 --- /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.10.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-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 new file mode 100644 index 000000000..6063b01e6 --- /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.10.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/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 585bb83db..7d4b3a8a2 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). @@ -14,12 +14,12 @@ 11 11 1.4.0 - 1.1.6 + 1.3.1 3.16.1 - 3.6.1 + 3.6.2 1.14.1 - 3.14.1 - 2.41.10 + 3.15.0 + 2.44.9 1.9.20.1 true @@ -30,7 +30,9 @@ largemessage-functional largemessage_idempotent logging-log4j + logging-log4j-fluent-api logging-logback + logging-logback-fluent-api logging-functional tracing metrics @@ -40,6 +42,7 @@ parameters validation-alb-event validation-apigw-event + lambda-metadata @@ -111,6 +114,11 @@ powertools-validation ${project.version} + + software.amazon.lambda + powertools-lambda-metadata + ${project.version} + com.amazonaws aws-lambda-java-core @@ -129,7 +137,7 @@ com.amazonaws aws-lambda-java-runtime-interface-client - 2.8.7 + 2.10.1 @@ -208,7 +216,7 @@ org.graalvm.buildtools native-maven-plugin - 0.11.2 + 0.11.5 true 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 fec4dec92..ac864ad9c 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 @@ -30,8 +30,8 @@ 11 11 - 10.4.3 - 2.224.0 + 10.6.0 + 2.250.0 @@ -95,7 +95,7 @@ commons-io commons-io - 2.21.0 + 2.22.0 org.junit.jupiter @@ -152,7 +152,7 @@ org.yaml snakeyaml - 2.5 + 2.6 test @@ -197,7 +197,7 @@ org.apache.maven.plugins maven-compiler-plugin - 3.14.1 + 3.15.0 ${maven.compiler.source} ${maven.compiler.target} @@ -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/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-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); } } 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-e2e-tests/src/test/resources/docker/Dockerfile b/powertools-e2e-tests/src/test/resources/docker/Dockerfile index 1ceb29aa0..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:bffac7de6e418a93d2aefc1e8e7c79eda0971e7a026725fe618b58ddfba7a128 +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 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 4cba1956f..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 @@ -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..cfcedec56 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 @@ -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 @@ -107,7 +108,7 @@ - generate-graalvm-files + native - - 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 - 3.4.2 + 3.5.0 @@ -244,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\"}"); - - } -} diff --git a/powertools-kafka/pom.xml b/powertools-kafka/pom.xml index ccb63e38f..2ff6a8e72 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 @@ -34,10 +34,10 @@ - 4.1.1 + 4.2.0 1.12.1 - 4.33.2 - 1.1.6 + 4.34.1 + 1.3.1 diff --git a/powertools-lambda-metadata/pom.xml b/powertools-lambda-metadata/pom.xml new file mode 100644 index 000000000..1cf825cd8 --- /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.10.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); + } + }; + } +} 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 200358e0b..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 @@ -117,53 +117,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-logging,experimental-class-define-support - --add-opens java.base/java.util=ALL-UNNAMED - --add-opens java.base/java.lang=ALL-UNNAMED - - - - - - - - graalvm-native + native org.graalvm.buildtools native-maven-plugin - 0.11.2 - true - - - test-native - - test - - test - - powertools-logging - - --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-logging + + diff --git a/powertools-logging/powertools-logging-log4j/pom.xml b/powertools-logging/powertools-logging-log4j/pom.xml index aa4aca181..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 @@ -106,55 +106,23 @@
- 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-logging-log4j,experimental-class-define-support - --add-opens java.base/java.util=ALL-UNNAMED - --add-opens java.base/java.lang=ALL-UNNAMED - - - - - - - - graalvm-native + native org.graalvm.buildtools native-maven-plugin - 0.11.2 - true - - - test-native - - test - - test - - powertools-logging-log4j - + + + src/main/resources/META-INF/native-image/software.amazon.lambda/powertools-logging-log4j + + + --initialize-at-build-time=org.junit.platform.launcher.core.DiscoveryIssueNotifier$1 - --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 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/pom.xml b/powertools-logging/powertools-logging-logback/pom.xml index dbf7f5207..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 @@ -104,55 +104,23 @@ - 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-logging-logback,experimental-class-define-support - --add-opens java.base/java.util=ALL-UNNAMED - --add-opens java.base/java.lang=ALL-UNNAMED - - - - - - - - graalvm-native + native org.graalvm.buildtools native-maven-plugin - 0.11.2 - true - - - test-native - - test - - test - - powertools-logging-logback - + + + src/main/resources/META-INF/native-image/software.amazon.lambda/powertools-logging-logback + + + --initialize-at-build-time=org.junit.platform.launcher.core.DiscoveryIssueNotifier$1 - --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 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..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 @@ -23,9 +23,8 @@ 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 static software.amazon.lambda.powertools.logging.internal.PowertoolsLoggedFields.TENANT_ID; import ch.qos.logback.classic.pattern.ThrowableHandlingConverter; import ch.qos.logback.classic.pattern.ThrowableProxyConverter; @@ -34,8 +33,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; @@ -74,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"; @@ -99,7 +99,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 +143,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(','); @@ -163,6 +171,12 @@ private void serializeFunctionInfo(JsonSerializer serializer, String arn, Map 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) { @@ -121,7 +124,9 @@ private void serializePowertools(TreeMap 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); } } @@ -233,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 30ede8ba8..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 @@ -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; @@ -85,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); @@ -162,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() { @@ -179,4 +185,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..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 @@ -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; @@ -109,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() { @@ -194,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); @@ -201,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); @@ -210,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 @@ -439,7 +443,75 @@ 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 + 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") + ; } + @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()); } diff --git a/powertools-metrics/pom.xml b/powertools-metrics/pom.xml index 5f6c971e3..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 @@ -149,33 +149,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-metrics,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 @@ -188,28 +162,13 @@ org.graalvm.buildtools native-maven-plugin - 0.11.2 - true - - - test-native - - test - - test - - powertools-metrics - - --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-metrics + +
    diff --git a/powertools-parameters/pom.xml b/powertools-parameters/pom.xml index 124e22186..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 @@ -91,53 +91,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-parameters,experimental-class-define-support - --add-opens java.base/java.util=ALL-UNNAMED - --add-opens java.base/java.lang=ALL-UNNAMED - - - - - - - - graalvm-native + native 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-parameters/powertools-parameters-appconfig/pom.xml b/powertools-parameters/powertools-parameters-appconfig/pom.xml index 406f715d3..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 @@ -95,40 +95,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-appconfig,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 @@ -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..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 @@ -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..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 @@ -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..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 @@ -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..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 @@ -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..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 @@ -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..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 @@ -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 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