diff --git a/.github/actions/common/action.yml b/.github/actions/common/action.yml
new file mode 100644
index 00000000000..06916523fe1
--- /dev/null
+++ b/.github/actions/common/action.yml
@@ -0,0 +1,159 @@
+#
+# Copyright (c) 2024 Oracle and/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.
+#
+
+name: 'Common Job Steps'
+description: A composite action that abstracts the common steps needed to implement a job
+inputs:
+ native-image:
+ description: Whether to setup GraalVM native-image
+ required: false
+ default: 'false'
+ maven-cache:
+ description: Whether to cache the Maven local repository (read-only or read-write)
+ required: false
+ default: 'read-only'
+ build-cache:
+ description: Whether to cache the Maven build (read-only or read-write)
+ required: false
+ default: ''
+ build-cache-id:
+ description: Build cache id
+ required: false
+ default: 'default'
+ run:
+ description: The bash command to run
+ required: true
+ artifact-name:
+ description: Name of the artifact to create
+ required: false
+ default: ''
+ artifact-path:
+ description: Path of the files to include in the artifact
+ required: false
+ default: ''
+ test-artifact-name:
+ description: Name of the test artifact to create (excluded on windows), if non empty tests are archived
+ required: false
+ default: ''
+ free-space:
+ description: Whether to aggressively free disk space on the runner
+ default: 'false'
+runs:
+ using: "composite"
+ steps:
+ - if: ${{ inputs.free-space == 'true' }}
+ # See https://github.com/actions/runner-images/issues/2840
+ name: Free disk space
+ shell: bash
+ run: |
+ sudo rm -rf /usr/share/dotnet
+ sudo rm -rf /usr/local/share/powershell
+ - if: ${{ runner.os == 'Windows' }}
+ name: Use GNU tar
+ shell: cmd
+ run: |
+ echo "Adding GNU tar to PATH"
+ echo C:\Program Files\Git\usr\bin>>"%GITHUB_PATH%"
+ git config --global core.autocrlf false
+ git config --global core.eol lf
+ - name: Set up GraalVM
+ if: ${{ inputs.native-image == 'true' }}
+ uses: graalvm/setup-graalvm@v1.2.4
+ with:
+ java-version: ${{ env.GRAALVM_VERSION || env.JAVA_VERSION }}
+ components: ${{ env.GRAALVM_COMPONENTS }}
+ check-for-updates: 'false'
+ set-java-home: 'false'
+ - name: Set up JDK
+ uses: actions/setup-java@v4.1.0
+ with:
+ distribution: ${{ env.JAVA_DISTRO }}
+ java-version: ${{ env.JAVA_VERSION }}
+ - name: Cache local Maven repository (read-write)
+ if: ${{ inputs.maven-cache == 'read-write' }}
+ uses: actions/cache@v4.0.2
+ with:
+ # See https://github.com/actions/toolkit/issues/713
+ # Include must not match top level directories
+ path: |
+ .m2/repository/**/*.*
+ !.m2/repository/io/helidon/**
+ enableCrossOsArchive: true
+ # only hash top-level poms to keep it fast
+ key: local-maven-${{ hashFiles('*/pom.xml', 'pom.xml') }}
+ restore-keys: |
+ local-maven-
+ - name: Cache local Maven repository (read-only)
+ if: ${{ inputs.maven-cache == 'read-only' }}
+ uses: actions/cache/restore@v4.0.2
+ with:
+ path: |
+ .m2/repository/**/*.*
+ !.m2/repository/io/helidon/**
+ enableCrossOsArchive: true
+ key: local-maven-${{ hashFiles('*/pom.xml', 'pom.xml') }}
+ restore-keys: |
+ local-maven-
+ - name: Build cache (read-write)
+ if: ${{ inputs.build-cache == 'read-write' }}
+ uses: actions/cache@v4.0.2
+ with:
+ path: |
+ ./**/target/**
+ .m2/repository/io/helidon/**
+ enableCrossOsArchive: true
+ key: build-cache-${{ github.run_id }}-${{ github.run_attempt }}-${{ inputs.build-cache-id }}
+ restore-keys: |
+ build-cache-${{ github.run_id }}-${{ github.run_attempt }}-
+ build-cache-${{ github.run_id }}-
+ - name: Build cache (read-only)
+ if: ${{ inputs.build-cache == 'read-only' }}
+ uses: actions/cache/restore@v4.0.2
+ with:
+ path: |
+ ./**/target/**
+ .m2/repository/io/helidon/**
+ enableCrossOsArchive: true
+ fail-on-cache-miss: true
+ key: build-cache-${{ github.run_id }}-${{ github.run_attempt }}-${{ inputs.build-cache-id }}
+ restore-keys: |
+ build-cache-${{ github.run_id }}-${{ github.run_attempt }}-
+ build-cache-${{ github.run_id }}-
+ - name: Exec
+ env:
+ MAVEN_ARGS: |
+ ${{ env.MAVEN_ARGS }}
+ -Dmaven.repo.local=${{ github.workspace }}/.m2/repository
+ run: ${{ inputs.run }}
+ shell: bash
+ - name: Archive test results
+ # https://github.com/actions/upload-artifact/issues/240
+ if: ${{ inputs.test-artifact-name != '' && runner.os != 'Windows' && always() }}
+ uses: actions/upload-artifact@v4
+ with:
+ if-no-files-found: 'ignore'
+ name: ${{ inputs.test-artifact-name }}
+ path: |
+ **/target/surefire-reports/**
+ **/target/failsafe-reports/**
+ **/target/it/**/*.log
+ - name: Archive artifacts
+ if: ${{ inputs.artifact-name != '' && inputs.artifact-path != '' && always() }}
+ uses: actions/upload-artifact@v4
+ with:
+ if-no-files-found: 'ignore'
+ name: ${{ inputs.artifact-name }}
+ path: ${{ inputs.artifact-path }}
diff --git a/.github/workflows/assign-issue-to-project.yml b/.github/workflows/assign-issue-to-project.yml
deleted file mode 100644
index d639c270277..00000000000
--- a/.github/workflows/assign-issue-to-project.yml
+++ /dev/null
@@ -1,16 +0,0 @@
-name: Assign Issue to Project
-
-on:
- issues:
- types: [opened, reopened]
-env:
- GITHUB_API_KEY: ${{ secrets.GITHUB_TOKEN }}
-
-
-jobs:
- Assign-Issue-To-Backlog:
- runs-on: ubuntu-latest
- steps:
- - name: Check out repository code
- uses: actions/checkout@v4
- - run: etc/scripts/actions/assign-issue-to-project.sh $GITHUB_REPOSITORY ${{ github.event.issue.number }} Backlog Triage
diff --git a/.github/workflows/backport-issues.yml b/.github/workflows/backport-issues.yml
new file mode 100644
index 00000000000..b017feb9002
--- /dev/null
+++ b/.github/workflows/backport-issues.yml
@@ -0,0 +1,56 @@
+#
+# Copyright (c) 2022, 2024 Oracle and/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.
+
+name: Create Backport Issues
+
+on:
+ workflow_dispatch:
+ inputs:
+ issue:
+ description: 'Issue number'
+ required: true
+ version:
+ description: 'Helidon version this issue was reported for'
+ required: true
+ type: choice
+ options:
+ - 2.x
+ - 3.x
+ - 4.x
+ default: '2.x'
+ target-2:
+ type: boolean
+ description: 'Port to 2.x?'
+ default: false
+ target-3:
+ type: boolean
+ description: 'Port to 3.x?'
+ default: true
+ target-4:
+ type: boolean
+ description: 'Port to 4.x?'
+ default: true
+
+env:
+ GITHUB_API_KEY: ${{ secrets.GITHUB_TOKEN }}
+
+
+jobs:
+ Issue-Backport:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Check out repository code
+ uses: actions/checkout@v4
+ - run: etc/scripts/backport-issues.sh $GITHUB_REPOSITORY ${{ github.event.inputs.issue }} ${{ github.event.inputs.version }} ${{ github.event.inputs.target-2 }} ${{ github.event.inputs.target-3 }} ${{ github.event.inputs.target-4 }}
diff --git a/.github/workflows/create-backport-issues.yml b/.github/workflows/create-backport-issues.yml
deleted file mode 100644
index a42abfdbe49..00000000000
--- a/.github/workflows/create-backport-issues.yml
+++ /dev/null
@@ -1,41 +0,0 @@
-name: Create Backport Issues
-
-on:
- workflow_dispatch:
- inputs:
- issue:
- description: 'Issue number'
- required: true
- version:
- description: 'Helidon version this issue was reported for'
- required: true
- type: choice
- options:
- - 2.x
- - 3.x
- - 4.x
- default: '2.x'
- target-2:
- type: boolean
- description: 'Port to 2.x?'
- default: false
- target-3:
- type: boolean
- description: 'Port to 3.x?'
- default: true
- target-4:
- type: boolean
- description: 'Port to 4.x?'
- default: true
-
-env:
- GITHUB_API_KEY: ${{ secrets.GITHUB_TOKEN }}
-
-
-jobs:
- Issue-Backport:
- runs-on: ubuntu-latest
- steps:
- - name: Check out repository code
- uses: actions/checkout@v4
- - run: etc/scripts/actions/create-backport-issues.sh $GITHUB_REPOSITORY ${{ github.event.inputs.issue }} ${{ github.event.inputs.version }} ${{ github.event.inputs.target-2 }} ${{ github.event.inputs.target-3 }} ${{ github.event.inputs.target-4 }}
diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml
index e7e72b18ad3..85d47032d56 100644
--- a/.github/workflows/release.yaml
+++ b/.github/workflows/release.yaml
@@ -1,66 +1,161 @@
-# Notes
-# - cannot run on Windows, as we use shell scripts
+#
+# Copyright (c) 2023, 2024 Oracle and/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.
name: "Release"
on:
push:
- branches:
- - 'release-*'
+ branches: [ 'release-*' ]
+
env:
JAVA_VERSION: '21'
JAVA_DISTRO: 'oracle'
- MAVEN_HTTP_ARGS: '-Dmaven.wagon.httpconnectionManager.ttlSeconds=60 -Dmaven.wagon.http.retryHandler.count=3'
+ MAVEN_ARGS: |
+ -B -e
+ -Dmaven.wagon.httpconnectionManager.ttlSeconds=60
+ -Dmaven.wagon.http.retryHandler.count=3
+ -Djdk.toolchain.version=${JAVA_VERSION}
+ -Dcache.enabled=true
concurrency:
group: release-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
- copyright:
- timeout-minutes: 10
+ create-tag:
runs-on: ubuntu-20.04
+ environment: release
+ outputs:
+ version: ${{ steps.create-tag.outputs.version }}
+ tag: ${{ steps.create-tag.outputs.tag }}
steps:
- uses: actions/checkout@v4
with:
- fetch-depth: 0
- - name: Set up JDK ${{ env.JAVA_VERSION }}
- uses: actions/setup-java@v4.1.0
- with:
- distribution: ${{ env.JAVA_DISTRO }}
- java-version: ${{ env.JAVA_VERSION }}
- cache: maven
- - name: Copyright
- run: etc/scripts/copyright.sh
- release:
- timeout-minutes: 60
+ fetch-depth: '0'
+ token: ${{ secrets.SERVICE_ACCOUNT_TOKEN }}
+ - id: create-tag
+ run: ./etc/scripts/release.sh create_tag >> "${GITHUB_OUTPUT}"
+ validate:
+ needs: create-tag
+ uses: ./.github/workflows/validate.yml
+ with:
+ ref: ${{ needs.create-tag.outputs.tag }}
+ stage:
+ needs: [ create-tag, validate ]
+ strategy:
+ matrix:
+ moduleSet: [ core, integrations, others ]
runs-on: ubuntu-20.04
+ timeout-minutes: 30
environment: release
steps:
- uses: actions/checkout@v4
with:
- token: ${{ secrets.SERVICE_ACCOUNT_TOKEN }}
fetch-depth: '0'
- - name: Set up JDK ${{ env.JAVA_VERSION }}
- uses: actions/setup-java@v4.1.0
+ ref: ${{ needs.create-tag.outputs.tag }}
+ - uses: actions/download-artifact@v4
with:
- distribution: ${{ env.JAVA_DISTRO }}
- java-version: ${{ env.JAVA_VERSION }}
- cache: maven
- - name: Release
+ pattern: "{javadoc-jars-${{ matrix.moduleSet }},docs}"
+ merge-multiple: true
+ - shell: bash
env:
GPG_PASSPHRASE: ${{ secrets.HELIDON_GPG_PASSPHRASE }}
GPG_PRIVATE_KEY: ${{ secrets.HELIDON_GPG_PRIVATE_KEY }}
- GPG_PUBLIC_KEY: ${{ secrets.HELIDON_GPG_PUBLIC_KEY }}
- MAVEN_SETTINGS: ${{ secrets.MAVEN_SETTINGS }}
- RELEASE_WORKFLOW: "true"
+ run: etc/scripts/setup-gpg.sh
+ - uses: ./.github/actions/common
+ with:
+ build-cache: read-only
+ artifact-name: io-helidon-artifacts-part-${{ matrix.moduleSet }}
+ artifact-path: staging
+ run: |
+ mvn ${MAVEN_ARGS} \
+ -DreactorRule=default \
+ -DmoduleSet=${{ matrix.moduleSet }} \
+ -Dcache.loadSuffixes=javadoc,docs \
+ -Prelease,no-snapshots \
+ -DskipTests \
+ -DaltDeploymentRepository=":::file://${PWD}/staging" \
+ deploy
+ deploy:
+ needs: [ create-tag, stage ]
+ runs-on: ubuntu-24.04
+ timeout-minutes: 20
+ environment: release
+ steps:
+ - uses: actions/checkout@v4
+ with:
+ fetch-depth: '0'
+ ref: ${{ needs.create-tag.outputs.tag }}
+ - uses: actions/download-artifact@v4
+ with:
+ pattern: io-helidon-artifacts-part-*
+ path: staging
+ merge-multiple: true
+ - shell: bash
+ env:
+ NEXUS_USER: ${{ secrets.NEXUS_USER }}
+ NEXUS_PASSWORD: ${{ secrets.NEXUS_PASSWORD }}
run: |
- git config user.email "helidon-robot_ww@oracle.com"
- git config user.name "Helidon Robot"
- etc/scripts/release.sh release_build
- - name: Upload Staged Artifacts
- uses: actions/upload-artifact@v4
+ etc/scripts/nexus.sh deploy_release \
+ --dir="staging" \
+ --description="Helidon v%{version}"
+ - uses: actions/upload-artifact@v4
+ with:
+ name: io-helidon-artifacts-${{ needs.create-tag.outputs.version }}
+ path: staging
+ resolve-all:
+ needs: [ create-tag, deploy ]
+ timeout-minutes: 30
+ runs-on: ubuntu-20.04
+ name: resolve-all
+ steps:
+ - uses: actions/checkout@v4
+ with:
+ fetch-depth: '0'
+ ref: ${{ needs.create-tag.outputs.tag }}
+ - uses: ./.github/actions/common
+ with:
+ run: |
+ mvn ${MAVEN_ARGS} -N \
+ -Possrh-staging \
+ -Dartifact=io.helidon:helidon-all:${{ needs.create-tag.outputs.version }}:pom \
+ dependency:get
+ smoketest:
+ needs: [ create-tag, deploy ]
+ timeout-minutes: 30
+ strategy:
+ matrix:
+ archetype:
+ - bare-se
+ - bare-mp
+ - quickstart-se
+ - quickstart-mp
+ - database-se
+ - database-mp
+ runs-on: ubuntu-20.04
+ name: smoketest/${{ matrix.archetype }}
+ steps:
+ - uses: actions/checkout@v4
+ with:
+ fetch-depth: '0'
+ ref: ${{ needs.create-tag.outputs.tag }}
+ - uses: ./.github/actions/common
with:
- name: io-helidon-artifacts-${{ github.ref_name }}
- path: parent/target/nexus-staging/
- retention-days: 90
+ run: |
+ ./etc/scripts/smoketest.sh \
+ --clean \
+ --staged \
+ --version=${{ needs.create-tag.outputs.version }} \
+ --archetype=${{ matrix.archetype }}
diff --git a/.github/workflows/snapshot.yaml b/.github/workflows/snapshot.yaml
new file mode 100644
index 00000000000..7cb27e7863d
--- /dev/null
+++ b/.github/workflows/snapshot.yaml
@@ -0,0 +1,114 @@
+#
+# Copyright (c) 2023, 2024 Oracle and/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.
+
+name: "Snapshot Release"
+
+on:
+ workflow_dispatch:
+ push:
+ branches:
+ - 'main'
+ - 'helidon-*.x'
+
+env:
+ JAVA_VERSION: '21'
+ JAVA_DISTRO: 'oracle'
+ MAVEN_ARGS: |
+ -B -e
+ -Dmaven.wagon.httpconnectionManager.ttlSeconds=60
+ -Dmaven.wagon.http.retryHandler.count=3
+ -Djdk.toolchain.version=${JAVA_VERSION}
+ -Dcache.enabled=true
+
+concurrency:
+ group: snapshot-${{ github.workflow }}-${{ github.ref }}
+ cancel-in-progress: false
+
+jobs:
+ get-version:
+ runs-on: ubuntu-20.04
+ environment: release
+ outputs:
+ version: ${{ steps.get-version.outputs.version }}
+ steps:
+ - uses: actions/checkout@v4
+ with:
+ fetch-depth: '0'
+ - id: get-version
+ shell: bash
+ run: ./etc/scripts/release.sh get_version >> "${GITHUB_OUTPUT}"
+ validate:
+ needs: get-version
+ uses: ./.github/workflows/validate.yml
+ stage:
+ needs: [ get-version, validate ]
+ strategy:
+ matrix:
+ moduleSet: [ core, integrations, others ]
+ runs-on: ubuntu-20.04
+ timeout-minutes: 30
+ environment: release
+ steps:
+ - uses: actions/checkout@v4
+ with:
+ fetch-depth: '0'
+ - uses: actions/download-artifact@v4
+ with:
+ pattern: "{javadoc-jars-${{ matrix.moduleSet }},docs}"
+ merge-multiple: true
+ - shell: bash
+ env:
+ GPG_PASSPHRASE: ${{ secrets.HELIDON_GPG_PASSPHRASE }}
+ GPG_PRIVATE_KEY: ${{ secrets.HELIDON_GPG_PRIVATE_KEY }}
+ run: etc/scripts/setup-gpg.sh
+ - uses: ./.github/actions/common
+ with:
+ build-cache: read-only
+ artifact-name: io-helidon-artifacts-part-${{ matrix.moduleSet }}
+ artifact-path: staging
+ run: |
+ mvn ${MAVEN_ARGS} \
+ -DreactorRule=default \
+ -DmoduleSet=${{ matrix.moduleSet }} \
+ -Dcache.loadSuffixes=javadoc,docs \
+ -Prelease\
+ -DskipTests \
+ -DaltDeploymentRepository=":::file://${PWD}/staging" \
+ deploy
+ deploy:
+ needs: [ get-version, stage ]
+ runs-on: ubuntu-24.04
+ timeout-minutes: 20
+ environment: release
+ steps:
+ - uses: actions/checkout@v4
+ with:
+ fetch-depth: '0'
+ - uses: actions/download-artifact@v4
+ with:
+ pattern: io-helidon-artifacts-part-*
+ path: staging
+ merge-multiple: true
+ - shell: bash
+ env:
+ NEXUS_USER: ${{ secrets.NEXUS_USER }}
+ NEXUS_PASSWORD: ${{ secrets.NEXUS_PASSWORD }}
+ run: |
+ etc/scripts/nexus.sh deploy_snapshots \
+ --dir="staging"
+ - uses: actions/upload-artifact@v4
+ with:
+ name: io-helidon-artifacts-${{ needs.get-version.outputs.version }}
+ path: staging
diff --git a/.github/workflows/snapshotrelease.yaml b/.github/workflows/snapshotrelease.yaml
deleted file mode 100644
index a4be65e8357..00000000000
--- a/.github/workflows/snapshotrelease.yaml
+++ /dev/null
@@ -1,39 +0,0 @@
-# Perform a snapshot build and deploy to snapshot repository
-# Notes
-# - cannot run on Windows, as we use shell scripts
-
-name: "Snapshot Release"
-
-on:
- workflow_dispatch:
-
-env:
- JAVA_VERSION: '21'
- JAVA_DISTRO: 'oracle'
- MAVEN_HTTP_ARGS: '-Dmaven.wagon.httpconnectionManager.ttlSeconds=60 -Dmaven.wagon.http.retryHandler.count=3'
-
-concurrency:
- group: release-${{ github.workflow }}-${{ github.ref }}
- cancel-in-progress: false
-
-jobs:
- deploy:
- timeout-minutes: 60
- runs-on: ubuntu-20.04
- environment: release
- steps:
- - uses: actions/checkout@v4
- with:
- fetch-depth: '0'
- - name: Set up JDK ${{ env.JAVA_VERSION }}
- uses: actions/setup-java@v4.1.0
- with:
- distribution: ${{ env.JAVA_DISTRO }}
- java-version: ${{ env.JAVA_VERSION }}
- cache: maven
- - name: Build and deploy
- env:
- MAVEN_SETTINGS: ${{ secrets.MAVEN_SETTINGS }}
- RELEASE_WORKFLOW: "true"
- run: |
- etc/scripts/release.sh deploy_snapshot
diff --git a/.github/workflows/validate.yml b/.github/workflows/validate.yml
index b67d15807b3..3d1c2f0e199 100644
--- a/.github/workflows/validate.yml
+++ b/.github/workflows/validate.yml
@@ -1,173 +1,379 @@
-# Notes
-# - cannot run on Windows, as we use shell scripts
-# - removed macos from most jobs to speed up the process
+#
+# Copyright (c) 2023, 2024 Oracle and/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.
name: "Validate"
-on: [pull_request, push]
+on:
+ pull_request:
+ push:
+ branches-ignore: [ 'main', 'helidon-*.x', 'release-*' ]
+ tags-ignore: [ '**' ]
+ workflow_call:
+ inputs:
+ ref:
+ description: The branch, tag or SHA to checkout
+ required: false
+ type: string
+ default: ''
env:
- JAVA_VERSION: '21'
- JAVA_DISTRO: 'oracle'
- HELIDON_PIPELINES: 'true'
- MAVEN_HTTP_ARGS: '-Dmaven.wagon.httpconnectionManager.ttlSeconds=60 -Dmaven.wagon.http.retryHandler.count=3'
+ JAVA_VERSION: 21
+ GRAALVM_VERSION: 21.0.3
+ JAVA_DISTRO: oracle
+ MAVEN_ARGS: |
+ -B -fae -e
+ -Dmaven.wagon.httpconnectionManager.ttlSeconds=60
+ -Dmaven.wagon.http.retryHandler.count=3
+ -Djdk.toolchain.version=${JAVA_VERSION}
+ -Dcache.enabled=true
concurrency:
- group: ${{ github.workflow }}-${{ github.ref }}
+ group: validate-${{ github.ref }}
cancel-in-progress: true
jobs:
copyright:
- timeout-minutes: 10
+ timeout-minutes: 5
runs-on: ubuntu-20.04
steps:
- - uses: actions/checkout@v4
- with:
- fetch-depth: 0
- - name: Set up JDK ${{ env.JAVA_VERSION }}
- uses: actions/setup-java@v4.1.0
- with:
- distribution: ${{ env.JAVA_DISTRO }}
- java-version: ${{ env.JAVA_VERSION }}
- cache: maven
- - name: Copyright
- run: etc/scripts/copyright.sh
+ - uses: actions/checkout@v4
+ with:
+ ref: ${{ inputs.ref }}
+ fetch-depth: 0
+ - uses: ./.github/actions/common
+ with:
+ run: etc/scripts/copyright.sh
checkstyle:
- timeout-minutes: 10
+ timeout-minutes: 5
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v4
- - name: Set up JDK ${{ env.JAVA_VERSION }}
- uses: actions/setup-java@v4.1.0
- with:
- distribution: ${{ env.JAVA_DISTRO }}
- java-version: ${{ env.JAVA_VERSION }}
- cache: maven
- - name: Checkstyle
- run: etc/scripts/checkstyle.sh
- spotbugs:
- timeout-minutes: 45
+ with:
+ ref: ${{ inputs.ref }}
+ - uses: ./.github/actions/common
+ with:
+ run: etc/scripts/checkstyle.sh
+ shellcheck:
+ timeout-minutes: 5
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v4
- - name: Set up JDK ${{ env.JAVA_VERSION }}
- uses: actions/setup-java@v4.1.0
- with:
- distribution: ${{ env.JAVA_DISTRO }}
- java-version: ${{ env.JAVA_VERSION }}
- cache: maven
- - name: Spotbugs
- run: etc/scripts/spotbugs.sh
- docs:
- timeout-minutes: 30
+ with:
+ ref: ${{ inputs.ref }}
+ - uses: ./.github/actions/common
+ with:
+ maven-cache: none
+ run: etc/scripts/shellcheck.sh
+ build:
+ timeout-minutes: 15
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v4
- - name: Set up JDK ${{ env.JAVA_VERSION }}
- uses: actions/setup-java@v4.1.0
- with:
- distribution: ${{ env.JAVA_DISTRO }}
- java-version: ${{ env.JAVA_VERSION }}
- cache: maven
- - name: Docs
- run: etc/scripts/docs.sh
- build:
- timeout-minutes: 60
+ with:
+ ref: ${{ inputs.ref }}
+ - uses: ./.github/actions/common
+ with:
+ build-cache: read-write
+ maven-cache: read-write
+ run: |
+ mvn ${MAVEN_ARGS} build-cache:go-offline
+ mvn ${MAVEN_ARGS} -T8 \
+ -Dorg.slf4j.simpleLogger.showThreadName=true \
+ -DskipTests \
+ -Ptests \
+ install
+ _tests:
+ needs: build
+ timeout-minutes: 30
strategy:
matrix:
os: [ ubuntu-20.04 ]
+ moduleSet: [ core, it, dbclient, dbclient-oracle, others ]
+ include:
+ - { os: ubuntu-20.04, platform: linux }
runs-on: ${{ matrix.os }}
+ name: tests/${{ matrix.moduleSet }}
steps:
- uses: actions/checkout@v4
- - name: Set up JDK ${{ env.JAVA_VERSION }}
- uses: actions/setup-java@v4.1.0
- with:
- distribution: ${{ env.JAVA_DISTRO }}
- java-version: ${{ env.JAVA_VERSION }}
- cache: maven
- - name: Maven build
- run: etc/scripts/github-build.sh
- examples:
- timeout-minutes: 40
+ with:
+ ref: ${{ inputs.ref }}
+ - uses: ./.github/actions/common
+ with:
+ build-cache: read-only
+ test-artifact-name: tests-${{ matrix.moduleSet }}
+ run: |
+ mvn ${MAVEN_ARGS} \
+ -DreactorRule=tests \
+ -DmoduleSet=${{ matrix.moduleSet }} \
+ -Dsurefire.reportNameSuffix=${{ matrix.platform }} \
+ verify
+ _tck:
+ needs: build
+ timeout-minutes: 30
+ strategy:
+ matrix:
+ moduleSet: [ cdi, rest, others ]
+ runs-on: ubuntu-20.04
+ name: tests/tck-${{ matrix.moduleSet }}
+ steps:
+ - uses: actions/checkout@v4
+ with:
+ ref: ${{ inputs.ref }}
+ - uses: ./.github/actions/common
+ with:
+ build-cache: read-only
+ test-artifact-name: tests-tck-${{ matrix.moduleSet }}
+ run: |
+ mvn ${MAVEN_ARGS} \
+ -DreactorRule=tck \
+ -DmoduleSet=${{ matrix.moduleSet }} \
+ verify
+ _spotbugs:
+ needs: build
+ timeout-minutes: 30
+ strategy:
+ matrix:
+ moduleSet: [ core, integrations, others ]
+ runs-on: ubuntu-20.04
+ name: spotbugs/${{ matrix.moduleSet }}
+ steps:
+ - uses: actions/checkout@v4
+ with:
+ ref: ${{ inputs.ref }}
+ - uses: ./.github/actions/common
+ with:
+ build-cache: read-only
+ run: |
+ mvn ${MAVEN_ARGS} -T8 \
+ -Dorg.slf4j.simpleLogger.showThreadName=true \
+ -DreactorRule=default \
+ -DmoduleSet=${{ matrix.moduleSet }} \
+ -DskipTests \
+ -Pspotbugs \
+ verify
+ javadoc:
+ needs: build
+ timeout-minutes: 30
+ strategy:
+ matrix:
+ moduleSet: [ core, integrations, others ]
+ runs-on: ubuntu-20.04
+ steps:
+ - uses: actions/checkout@v4
+ with:
+ ref: ${{ inputs.ref }}
+ - uses: ./.github/actions/common
+ with:
+ build-cache: read-only
+ artifact-name: javadoc-jars-${{ matrix.moduleSet }}
+ artifact-path: |
+ **/target/state-javadoc.xml
+ **/target/*-javadoc.jar
+ run: |
+ mvn ${MAVEN_ARGS} -T8 \
+ -Dorg.slf4j.simpleLogger.showThreadName=true \
+ -DreactorRule=default \
+ -DmoduleSet=${{ matrix.moduleSet }} \
+ -Dcache.recordSuffix=javadoc \
+ -DskipTests \
+ -Pjavadoc \
+ package
+ docs:
+ needs: build
+ timeout-minutes: 15
+ runs-on: ubuntu-20.04
+ steps:
+ - uses: actions/checkout@v4
+ with:
+ ref: ${{ inputs.ref }}
+ - uses: ./.github/actions/common
+ with:
+ build-cache: read-only
+ artifact-name: docs
+ artifact-path: |
+ */target/state-docs.xml
+ */target/*-docs.jar
+ run: |
+ mvn ${MAVEN_ARGS} \
+ -Dcache.recordSuffix=docs \
+ -f docs/pom.xml \
+ -Pjavadoc \
+ install
+ quickstarts:
+ needs: build
+ timeout-minutes: 30
strategy:
matrix:
os: [ ubuntu-20.04, macos-14 ]
+ include:
+ - { os: ubuntu-20.04, platform: linux }
+ - { os: macos-14, platform: macos }
runs-on: ${{ matrix.os }}
+ name: quickstarts/${{ matrix.platform }}
steps:
- uses: actions/checkout@v4
- - name: Set up JDK ${{ env.JAVA_VERSION }}
- uses: actions/setup-java@v4.1.0
- with:
- distribution: ${{ env.JAVA_DISTRO }}
- java-version: ${{ env.JAVA_VERSION }}
- cache: maven
- - uses: graalvm/setup-graalvm@v1
- with:
- java-version: 21
- distribution: graalvm-community
- github-token: ${{ secrets.GITHUB_TOKEN }}
- native-image-job-reports: true
- cache: maven
- - name: Maven build
- run: |
- mvn -B -e "-Dmaven.test.skip=true" $MAVEN_HTTP_ARGS -DskipTests -Ppipeline install
- cd examples
- mvn -B verify
- - name: Test quickstarts native image
- run: etc/scripts/test-quickstarts.sh
- mp-tck:
- timeout-minutes: 60
- name: "MicroProfile TCKs"
+ with:
+ ref: ${{ inputs.ref }}
+ - uses: ./.github/actions/common
+ with:
+ free-space: true
+ build-cache: read-only
+ native-image: true
+ test-artifact-name: tests-quickstarts-${{ matrix.platform }}
+ run: |
+ etc/scripts/test-quickstarts.sh
+ examples:
+ needs: build
+ timeout-minutes: 30
strategy:
matrix:
- os: [ ubuntu-20.04 ]
+ os: [ ubuntu-20.04, macos-14 ]
+ include:
+ - { os: ubuntu-20.04, platform: linux }
+ - { os: macos-14, platform: macos }
runs-on: ${{ matrix.os }}
+ name: examples/${{ matrix.platform }}
steps:
- uses: actions/checkout@v4
- - name: Set up JDK ${{ env.JAVA_VERSION }}
- uses: actions/setup-java@v4.1.0
- with:
- distribution: ${{ env.JAVA_DISTRO }}
- java-version: ${{ env.JAVA_VERSION }}
- cache: maven
- - name: Maven build
- run: etc/scripts/mp-tck.sh
+ with:
+ ref: ${{ inputs.ref }}
+ - uses: ./.github/actions/common
+ with:
+ free-space: true
+ build-cache: read-only
+ test-artifact-name: tests-examples-${{ matrix.platform }}
+ run: etc/scripts/build-examples.sh
archetypes:
- timeout-minutes: 45
+ needs: build
+ timeout-minutes: 30
strategy:
matrix:
- os: [ ubuntu-20.04 ]
- runs-on: ${{ matrix.os }}
+ group: [ r1, r2, r3, r4, r5 ]
+ packaging: [ jar ]
+ include:
+ - { group: r1, start: 1, end: 25 }
+ - { group: r2, start: 26, end: 50 }
+ - { group: r3, start: 51, end: 75 }
+ - { group: r4, start: 75, end: 100 }
+ - { group: r5, start: 101, end: -1 }
+ - { packaging: jar }
+ runs-on: ubuntu-20.04
+ name: archetypes/${{ matrix.group }}-${{ matrix.packaging }}
+ steps:
+ - uses: actions/checkout@v4
+ with:
+ ref: ${{ inputs.ref }}
+ - uses: ./.github/actions/common
+ with:
+ build-cache: read-only
+ native-image: ${{ matrix.packaging == 'native' }}
+ test-artifact-name: tests-archetypes-${{ matrix.group }}-${{ matrix.packaging }}
+ run: |
+ mvn ${MAVEN_ARGS} \
+ -f archetypes/archetypes/pom.xml \
+ -Darchetype.test.permutationStartIndex=${{ matrix.start }} \
+ -Darchetype.test.permutationEndIndex=${{ matrix.end }} \
+ -Darchetype.test.testGoal=verify \
+ -Darchetype.test.testProfiles=${{ matrix.profile }} \
+ verify
+ legacy-archetypes:
+ needs: build
+ timeout-minutes: 30
+ runs-on: ubuntu-20.04
+ name: archetypes/legacy
steps:
- uses: actions/checkout@v4
- - name: Set up JDK ${{ env.JAVA_VERSION }}
- uses: actions/setup-java@v4.1.0
- with:
- distribution: ${{ env.JAVA_DISTRO }}
- java-version: ${{ env.JAVA_VERSION }}
- cache: maven
- - name: Test archetypes
- run: etc/scripts/test-archetypes.sh
+ with:
+ ref: ${{ inputs.ref }}
+ - uses: ./.github/actions/common
+ with:
+ build-cache: read-only
+ test-artifact-name: tests-legacy-archetypes
+ run: |
+ mvn ${MAVEN_ARGS} \
+ -f archetypes/pom.xml \
+ -Darchetype.test.generatePermutations=false \
+ install
packaging:
- timeout-minutes: 60
+ needs: build
+ timeout-minutes: 30
+ strategy:
+ matrix:
+ os: [ ubuntu-20.04, macos-14 ]
+ packaging: [ jar, jlink ]
+ include:
+ - { os: ubuntu-20.04, platform: linux }
+ - { os: macos-14, platform: macos }
+ runs-on: ${{ matrix.os }}
+ name: tests/packaging-${{ matrix.packaging }}-${{ matrix.platform }}
+ steps:
+ - uses: actions/checkout@v4
+ with:
+ ref: ${{ inputs.ref }}
+ - uses: ./.github/actions/common
+ with:
+ free-space: true
+ build-cache: read-only
+ test-artifact-name: tests-packaging-${{ matrix.packaging }}-${{ matrix.platform }}
+ run: |
+ mvn ${MAVEN_ARGS} \
+ -f tests/integration/packaging/pom.xml \
+ -P${{ matrix.packaging }}-image \
+ verify
+ _native-image:
+ needs: build
+ timeout-minutes: 30
strategy:
matrix:
- os: [ ubuntu-20.04, macos-14]
+ os: [ ubuntu-20.04, macos-14 ]
+ module: [ mp-1, mp-2, mp-3, se-1 ]
+ include:
+ - { os: ubuntu-20.04, platform: linux }
+ - { os: macos-14, platform: macos }
runs-on: ${{ matrix.os }}
+ name: tests/native-image-${{ matrix.module }}-${{ matrix.platform }}
steps:
- uses: actions/checkout@v4
- - uses: graalvm/setup-graalvm@v1
- with:
- java-version: 21
- distribution: graalvm-community
- github-token: ${{ secrets.GITHUB_TOKEN }}
- native-image-job-reports: true
- cache: maven
- - name: Build Helidon
- run: etc/scripts/github-compile.sh
- - name: JAR packaging
- run: etc/scripts/test-packaging-jar.sh
- - name: JLink packaging
- run: etc/scripts/test-packaging-jlink.sh
- - name: Native-Image packaging
- run: etc/scripts/test-packaging-native.sh
+ with:
+ ref: ${{ inputs.ref }}
+ - uses: ./.github/actions/common
+ with:
+ free-space: true
+ build-cache: read-only
+ native-image: true
+ test-artifact-name: tests-native-image-${{ matrix.module }}-${{ matrix.platform }}
+ run: |
+ mvn ${MAVEN_ARGS} \
+ -f tests/integration/packaging/pom.xml \
+ -pl ${{ matrix.module }} \
+ -Pnative-image \
+ -am \
+ verify
+ test-results:
+ runs-on: ubuntu-20.04
+ needs: [ _tests, archetypes, legacy-archetypes, _tck, packaging, _native-image ]
+ name: tests/results
+ steps:
+ - uses: actions/upload-artifact/merge@v4
+ with:
+ name: test-results
+ pattern: "tests-*"
+ gate:
+ runs-on: ubuntu-20.04
+ needs: [ copyright, checkstyle, shellcheck, docs, javadoc, _spotbugs, test-results ]
+ steps:
+ - shell: bash
+ run: |
+ echo OK
diff --git a/.gitignore b/.gitignore
index b1bf6a636d4..c99b9bcf33b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -70,6 +70,9 @@ node/
# Helidon CLI
.helidon
+# Helidon examples repository
+helidon-examples
+
# Other
*~
user.txt
diff --git a/.mvn/cache-config.xml b/.mvn/cache-config.xml
new file mode 100644
index 00000000000..2ecbfd32c26
--- /dev/null
+++ b/.mvn/cache-config.xml
@@ -0,0 +1,140 @@
+
+
+
\n Defaults to `true`.\n
\n\n @return whether response header validation should be enabled", - "key": "validate-response-headers", - "method": "io.helidon.webclient.http1.Http1ClientProtocolConfig.Builder#validateResponseHeaders(boolean)", - "type": "java.lang.Boolean" - }, - { - "defaultValue": "256", - "description": "Configure the maximum allowed length of the status line from the response.\n\n @return maximum status line length", - "key": "max-status-line-length", - "method": "io.helidon.webclient.http1.Http1ClientProtocolConfig.Builder#maxStatusLineLength(int)", - "type": "java.lang.Integer" - }, - { - "defaultValue": "false", - "description": "Sets whether the request header format is validated or not.\n\n Defaults to `false` as user has control on the header creation.\n
\n\n @return whether request header validation should be enabled", - "key": "validate-request-headers", - "method": "io.helidon.webclient.http1.Http1ClientProtocolConfig.Builder#validateRequestHeaders(boolean)", - "type": "java.lang.Boolean" - }, - { - "defaultValue": "http_1_1", - "description": "", - "key": "name", - "method": "io.helidon.webclient.http1.Http1ClientProtocolConfig.Builder#name(java.lang.String)" - }, - { - "defaultValue": "16384", - "description": "Configure the maximum allowed header size of the response.\n\n @return maximum header size", - "key": "max-header-size", - "method": "io.helidon.webclient.http1.Http1ClientProtocolConfig.Builder#maxHeaderSize(int)", - "type": "java.lang.Integer" - }, - { - "defaultValue": "true", - "description": "Whether to use keep alive by default.\n\n @return `true` for keeping connections alive and re-using them for multiple requests (default), `false`\n to create a new connection for each request", - "key": "default-keep-alive", - "method": "io.helidon.webclient.http1.Http1ClientProtocolConfig.Builder#defaultKeepAlive(boolean)", - "type": "java.lang.Boolean" - } - ] - } - ] - } -] -[ - { - "module": "io.helidon.webclient.websocket", - "types": [ - { - "annotatedType": "io.helidon.webclient.websocket.WsClientProtocolConfig", - "type": "io.helidon.webclient.websocket.WsClientProtocolConfig", - "producers": [ - "io.helidon.webclient.websocket.WsClientProtocolConfig#create(io.helidon.common.config.Config)", - "io.helidon.webclient.websocket.WsClientProtocolConfig#builder()" - ], - "options": [ - { - "description": "", - "key": "sub-protocols", - "kind": "LIST", - "method": "io.helidon.webclient.websocket.WsClientProtocolConfig.Builder#subProtocols(java.util.List\n Note that for some entity types we cannot use streaming, as they are already fully in memory (String, byte[]), for such\n cases, this option is ignored. Default is 128Kb.\n\n @return maximal number of bytes to buffer in memory for supported writers", - "key": "max-in-memory-entity", - "method": "io.helidon.webclient.api.HttpClientConfig.Builder#maxInMemoryEntity(int)", - "type": "java.lang.Integer" - }, - { - "defaultValue": "true", - "description": "Whether Expect-100-Continue header is sent to verify server availability before sending an entity.\n
\n Defaults to `true`.\n
\n\n @return whether Expect:100-Continue header should be sent on streamed transfers", - "key": "send-expect-continue", - "method": "io.helidon.webclient.api.HttpClientConfig.Builder#sendExpectContinue(boolean)", - "type": "java.lang.Boolean" - }, - { - "description": "Socket options for connections opened by this client.\n If there is a value explicitly configured on this type and on the socket options,\n the one configured on this type's builder will win:\n\n Options are:\n
\n See Sampler types.", - "key": "sampler-type", - "method": "io.helidon.tracing.providers.jaeger.JaegerTracerBuilder#samplerType(io.helidon.tracing.providers.jaeger.JaegerTracerBuilder.SamplerType)", - "type": "io.helidon.tracing.providers.jaeger.JaegerTracerBuilder.SamplerType", - "allowedValues": [ - { - "description": "Constant sampler always makes the same decision for all traces.\n It either samples all traces `1` or none of them `0`.", - "value": "CONSTANT" - }, - { - "description": "Ratio of the requests to sample, double value.", - "value": "RATIO" - } - ] - }, - { - "description": "Trusted certificates in PEM format.", - "key": "trusted-cert-pem", - "method": "io.helidon.tracing.providers.jaeger.JaegerTracerBuilder#trustedCertificates(io.helidon.common.configurable.Resource)", - "type": "io.helidon.common.configurable.Resource" - }, - { - "defaultValue": "batch", - "description": "Span Processor type used.", - "key": "span-processor-type", - "method": "io.helidon.tracing.providers.jaeger.JaegerTracerBuilder#spanProcessorType(io.helidon.tracing.providers.jaeger.JaegerTracerBuilder.SpanProcessorType)", - "type": "io.helidon.tracing.providers.jaeger.JaegerTracerBuilder.SpanProcessorType", - "allowedValues": [ - { - "description": "Simple Span Processor.", - "value": "SIMPLE" - }, - { - "description": "Batch Span Processor.", - "value": "BATCH" - } - ] - }, - { - "defaultValue": "1", - "description": "The sampler parameter (number).", - "key": "sampler-param", - "method": "io.helidon.tracing.providers.jaeger.JaegerTracerBuilder#samplerParam(java.lang.Number)", - "type": "java.lang.Number" - }, - { - "description": "Certificate of client in PEM format.", - "key": "client-cert-pem", - "method": "io.helidon.tracing.providers.jaeger.JaegerTracerBuilder#clientCertificate(io.helidon.common.configurable.Resource)", - "type": "io.helidon.common.configurable.Resource" - }, - { - "defaultValue": "2048", - "description": "Maximum Queue Size of exporter requests.", - "key": "max-queue-size", - "method": "io.helidon.tracing.providers.jaeger.JaegerTracerBuilder#maxQueueSize(int)", - "type": "java.lang.Integer" - } - ] - } - ] - } -] -[ - { - "module": "io.opentracing.api", - "types": [ - { - "annotatedType": "io.helidon.tracing.providers.zipkin.ZipkinTracerBuilder", - "description": "Zipkin tracer configuration", - "prefix": "tracing", - "type": "io.opentracing.Tracer", - "standalone": true, - "inherits": [ - "io.helidon.tracing.providers.opentracing.OpenTracingTracerBuilder" - ], - "producers": [ - "io.helidon.tracing.providers.zipkin.ZipkinTracerBuilder#build()" - ], - "options": [ - { - "defaultValue": "V2", - "description": "Version of Zipkin API to use.\n Defaults to Version#V2.", - "key": "api-version", - "method": "io.helidon.tracing.providers.zipkin.ZipkinTracerBuilder#version(io.helidon.tracing.providers.zipkin.ZipkinTracerBuilder.Version)", - "type": "io.helidon.tracing.providers.zipkin.ZipkinTracerBuilder.Version", - "allowedValues": [ - { - "description": "Version 1.", - "value": "V1" - }, - { - "description": "Version 2.", - "value": "V2" - } - ] - } - ] - } - ] - } -] -[ - { - "module": "io.helidon.dbclient.jdbc", - "types": [ - { - "annotatedType": "io.helidon.dbclient.jdbc.JdbcParametersConfig", - "prefix": "parameters", - "type": "io.helidon.dbclient.jdbc.JdbcParametersConfig", - "producers": [ - "io.helidon.dbclient.jdbc.JdbcParametersConfig#create(io.helidon.common.config.Config)", - "io.helidon.dbclient.jdbc.JdbcParametersConfig#builder()" - ], - "options": [ - { - "defaultValue": "true", - "description": "Use java.sql.PreparedStatement#setBinaryStream(int, java.io.InputStream, int) binding\n for `byte[]` values.\n Default value is `true`.\n\n @return whether to use java.io.ByteArrayInputStream binding", - "key": "use-byte-array-binding", - "method": "io.helidon.dbclient.jdbc.JdbcParametersConfig.Builder#useByteArrayBinding(boolean)", - "type": "java.lang.Boolean" - }, - { - "defaultValue": "true", - "description": "Use java.sql.PreparedStatement#setCharacterStream(int, java.io.Reader, int) binding\n for String values with length above #stringBindingSize() limit.\n Default value is `true`.\n\n @return whether to use java.io.CharArrayReader binding", - "key": "use-string-binding", - "method": "io.helidon.dbclient.jdbc.JdbcParametersConfig.Builder#useStringBinding(boolean)", - "type": "java.lang.Boolean" - }, - { - "defaultValue": "true", - "description": "Use java.sql.PreparedStatement#setTimestamp(int, java.sql.Timestamp)\n to set java.time.LocalTime values when `true`\n or use java.sql.PreparedStatement#setTime(int, java.sql.Time) when `false`.\n Default value is `true`.\n
This option is vendor specific. Most of the databases are fine with java.sql.Timestamp,\n but for example SQL Server requires java.sql.Time.\n This option does not apply when #setObjectForJavaTime() is set to `true`.\n\n @return whether to use java.sql.Timestamp instead of java.sql.Time\n for java.time.LocalTime values", - "key": "timestamp-for-local-time", - "method": "io.helidon.dbclient.jdbc.JdbcParametersConfig.Builder#timestampForLocalTime(boolean)", - "type": "java.lang.Boolean" - }, - { - "defaultValue": "false", - "description": "Use SQL `NCHAR`, `NVARCHAR` or `LONGNVARCHAR` value conversion\n for String values.\n Default value is `false`.\n\n @return whether NString conversion is used", - "key": "use-n-string", - "method": "io.helidon.dbclient.jdbc.JdbcParametersConfig.Builder#useNString(boolean)", - "type": "java.lang.Boolean" - }, - { - "defaultValue": "1024", - "description": "String values with length above this limit will be bound\n using java.sql.PreparedStatement#setCharacterStream(int, java.io.Reader, int)\n if #useStringBinding() is set to `true`.\n Default value is `1024`.\n\n @return String values length limit for java.io.CharArrayReader binding", - "key": "string-binding-size", - "method": "io.helidon.dbclient.jdbc.JdbcParametersConfig.Builder#stringBindingSize(int)", - "type": "java.lang.Integer" - }, - { - "defaultValue": "true", - "description": "Set all `java.time` Date/Time values directly using java.sql.PreparedStatement#setObject(int, Object).\n This option shall work fine for recent JDBC drivers.\n Default value is `true`.\n\n @return whether to use java.sql.PreparedStatement#setObject(int, Object) for `java.time` Date/Time values", - "key": "set-object-for-java-time", - "method": "io.helidon.dbclient.jdbc.JdbcParametersConfig.Builder#setObjectForJavaTime(boolean)", - "type": "java.lang.Boolean" - } - ] - } - ] - } -] -[ - { - "module": "io.helidon.scheduling", - "types": [ - { - "annotatedType": "io.helidon.scheduling.TaskConfig", - "type": "io.helidon.scheduling.TaskConfig", - "producers": [ - "io.helidon.scheduling.TaskConfig#create(io.helidon.common.config.Config)", - "io.helidon.scheduling.TaskConfig#builder()" - ], - "options": [] - }, - { - "annotatedType": "io.helidon.scheduling.FixedRateConfig", - "type": "io.helidon.scheduling.FixedRate", - "inherits": [ - "io.helidon.scheduling.TaskConfig" - ], - "producers": [ - "io.helidon.scheduling.FixedRateConfig#create(io.helidon.common.config.Config)", - "io.helidon.scheduling.FixedRateConfig#builder()", - "io.helidon.scheduling.FixedRate#create(io.helidon.scheduling.FixedRateConfig)" - ], - "options": [ - { - "description": "Fixed rate delay between each invocation. Time unit is by default java.util.concurrent.TimeUnit#SECONDS,\n can be specified with io.helidon.scheduling.FixedRateConfig.Builder#timeUnit(java.util.concurrent.TimeUnit).\n\n @return delay between each invocation", - "key": "delay", - "method": "io.helidon.scheduling.FixedRateConfig.Builder#delay(long)", - "type": "java.lang.Long", - "required": true - }, - { - "defaultValue": "SINCE_PREVIOUS_START", - "description": "Configure whether the delay between the invocations should be calculated from the time when previous task started or ended.\n Delay type is by default FixedRate.DelayType#SINCE_PREVIOUS_START.\n\n @return delay type", - "key": "delay-type", - "method": "io.helidon.scheduling.FixedRateConfig.Builder#delayType(io.helidon.scheduling.FixedRate.DelayType)", - "type": "io.helidon.scheduling.FixedRate.DelayType", - "allowedValues": [ - { - "description": "Next invocation delay is measured from the previous invocation task start.", - "value": "SINCE_PREVIOUS_START" - }, - { - "description": "Next invocation delay is measured from the previous invocation task end.", - "value": "SINCE_PREVIOUS_END" - } - ] - }, - { - "defaultValue": "TimeUnit.SECONDS", - "description": "java.util.concurrent.TimeUnit TimeUnit used for interpretation of values provided with\n io.helidon.scheduling.FixedRateConfig.Builder#delay(long)\n and io.helidon.scheduling.FixedRateConfig.Builder#initialDelay(long).\n\n @return time unit for interpreting values\n in io.helidon.scheduling.FixedRateConfig.Builder#delay(long)\n and io.helidon.scheduling.FixedRateConfig.Builder#initialDelay(long)", - "key": "time-unit", - "method": "io.helidon.scheduling.FixedRateConfig.Builder#timeUnit(java.util.concurrent.TimeUnit)", - "type": "java.util.concurrent.TimeUnit", - "allowedValues": [ - { - "description": "", - "value": "NANOSECONDS" - }, - { - "description": "", - "value": "MICROSECONDS" - }, - { - "description": "", - "value": "MILLISECONDS" - }, - { - "description": "", - "value": "SECONDS" - }, - { - "description": "", - "value": "MINUTES" - }, - { - "description": "", - "value": "HOURS" - }, - { - "description": "", - "value": "DAYS" - } - ] - }, - { - "defaultValue": "0", - "description": "Initial delay of the first invocation. Time unit is by default java.util.concurrent.TimeUnit#SECONDS,\n can be specified with\n io.helidon.scheduling.FixedRateConfig.Builder#timeUnit(java.util.concurrent.TimeUnit) timeUnit().\n\n @return initial delay value", - "key": "initial-delay", - "method": "io.helidon.scheduling.FixedRateConfig.Builder#initialDelay(long)", - "type": "java.lang.Long" - } - ] - }, - { - "annotatedType": "io.helidon.scheduling.CronConfig", - "type": "io.helidon.scheduling.Cron", - "inherits": [ - "io.helidon.scheduling.TaskConfig" - ], - "producers": [ - "io.helidon.scheduling.CronConfig#create(io.helidon.common.config.Config)", - "io.helidon.scheduling.CronConfig#builder()", - "io.helidon.scheduling.Cron#create(io.helidon.scheduling.CronConfig)" - ], - "options": [ - { - "defaultValue": "true", - "description": "Allow concurrent execution if previous task didn't finish before next execution.\n Default value is `true`.\n\n @return true for allow concurrent execution.", - "key": "concurrent", - "method": "io.helidon.scheduling.CronConfig.Builder#concurrentExecution(boolean)", - "type": "java.lang.Boolean" - }, - { - "description": "Cron expression for specifying period of execution.\n
\n Examples:\n
\n If we are in a UTC time zone and you set the timezone to \"Europe/Prague\", the time will be shifted by the offset\n of Prague (e.g. if it is noon right now in UTC, you would get 14:00).", - "key": "time-zone", - "method": "io.helidon.security.SecurityTime.Builder#timeZone(java.time.ZoneId)", - "type": "java.time.ZoneId" - }, - { - "description": "Set an explicit value for one of the time fields (such as ChronoField#YEAR).", - "key": "month", - "method": "io.helidon.security.SecurityTime.Builder#value(java.time.temporal.ChronoField, long)", - "type": "java.lang.Long" - }, - { - "description": "Set an explicit value for one of the time fields (such as ChronoField#YEAR).", - "key": "day-of-month", - "method": "io.helidon.security.SecurityTime.Builder#value(java.time.temporal.ChronoField, long)", - "type": "java.lang.Long" - }, - { - "description": "Set an explicit value for one of the time fields (such as ChronoField#YEAR).", - "key": "hour-of-day", - "method": "io.helidon.security.SecurityTime.Builder#value(java.time.temporal.ChronoField, long)", - "type": "java.lang.Long" - } - ] - } - ] - } -] -[ - { - "module": "io.helidon.security.providers.jwt", - "types": [ - { - "annotatedType": "io.helidon.security.providers.jwt.JwtProvider.Builder", - "description": "JWT authentication provider", - "prefix": "jwt", - "type": "io.helidon.security.providers.jwt.JwtProvider", - "producers": [ - "io.helidon.security.providers.jwt.JwtProvider.Builder#build()", - "io.helidon.security.providers.jwt.JwtProvider#create(io.helidon.common.config.Config)" - ], - "provides": [ - "io.helidon.security.spi.SecurityProvider", - "io.helidon.security.spi.AuthenticationProvider" - ], - "options": [ - { - "defaultValue": "true", - "description": "Whether to authenticate requests.", - "key": "authenticate", - "method": "io.helidon.security.providers.jwt.JwtProvider.Builder#authenticate(boolean)", - "type": "java.lang.Boolean" - }, - { - "description": "JWK resource used to verify JWTs created by other parties.", - "key": "atn-token.jwk.resource", - "method": "io.helidon.security.providers.jwt.JwtProvider.Builder#verifyJwk(io.helidon.common.configurable.Resource)", - "type": "io.helidon.common.configurable.Resource" - }, - { - "defaultValue": "true", - "description": "Claim `groups` from JWT will be used to automatically add\n groups to current subject (may be used with jakarta.annotation.security.RolesAllowed annotation).", - "key": "use-jwt-groups", - "method": "io.helidon.security.providers.jwt.JwtProvider.Builder#useJwtGroups(boolean)", - "type": "java.lang.Boolean" - }, - { - "defaultValue": "false", - "description": "Whether to allow impersonation by explicitly overriding\n username from outbound requests using io.helidon.security.EndpointConfig#PROPERTY_OUTBOUND_ID\n property.\n By default this is not allowed and identity can only be propagated.", - "key": "allow-impersonation", - "method": "io.helidon.security.providers.jwt.JwtProvider.Builder#allowImpersonation(boolean)", - "type": "java.lang.Boolean" - }, - { - "description": "Issuer used to create new JWTs.", - "key": "sign-token.jwt-issuer", - "method": "io.helidon.security.providers.jwt.JwtProvider.Builder#issuer(java.lang.String)" - }, - { - "defaultValue": "USER", - "description": "Principal type this provider extracts (and also propagates).", - "key": "principal-type", - "method": "io.helidon.security.providers.jwt.JwtProvider.Builder#subjectType(io.helidon.security.SubjectType)", - "type": "io.helidon.security.SubjectType", - "allowedValues": [ - { - "description": "", - "value": "USER" - }, - { - "description": "", - "value": "SERVICE" - } - ] - }, - { - "description": "JWK resource used to sign JWTs created by us.", - "key": "sign-token.jwk.resource", - "method": "io.helidon.security.providers.jwt.JwtProvider.Builder#signJwk(io.helidon.common.configurable.Resource)", - "type": "io.helidon.common.configurable.Resource" - }, - { - "defaultValue": "false", - "description": "Whether authentication is required.\n By default, request will fail if the username cannot be extracted.\n If set to false, request will process and this provider will abstain.", - "key": "optional", - "method": "io.helidon.security.providers.jwt.JwtProvider.Builder#optional(boolean)", - "type": "java.lang.Boolean" - }, - { - "defaultValue": "true", - "description": "Whether to propagate identity.", - "key": "propagate", - "method": "io.helidon.security.providers.jwt.JwtProvider.Builder#propagate(boolean)", - "type": "java.lang.Boolean" - }, - { - "defaultValue": "false", - "description": "Configure support for unsigned JWT.\n If this is set to `true` any JWT that has algorithm\n set to `none` and no `kid` defined will be accepted.\n Note that this has serious security impact - if JWT can be sent\n from a third party, this allows the third party to send ANY JWT\n and it would be accpted as valid.", - "key": "allow-unsigned", - "method": "io.helidon.security.providers.jwt.JwtProvider.Builder#allowUnsigned(boolean)", - "type": "java.lang.Boolean" - }, - { - "description": "Token handler to extract username from request.", - "key": "atn-token.handler", - "method": "io.helidon.security.providers.jwt.JwtProvider.Builder#atnTokenHandler(io.helidon.security.util.TokenHandler)", - "type": "io.helidon.security.util.TokenHandler" - }, - { - "defaultValue": "true", - "description": "Configure whether to verify signatures.\n Signatures verification is enabled by default. You can configure the provider\n not to verify signatures.\n
\n Make sure your service is properly secured on network level and only\n accessible from a secure endpoint that provides the JWTs when signature verification\n is disabled. If signature verification is disabled, this service will accept ANY JWT", - "key": "atn-token.verify-signature", - "method": "io.helidon.security.providers.jwt.JwtProvider.Builder#verifySignature(boolean)", - "type": "java.lang.Boolean" - }, - { - "description": "Audience expected in inbound JWTs.", - "key": "atn-token.jwt-audience", - "method": "io.helidon.security.providers.jwt.JwtProvider.Builder#expectedAudience(java.lang.String)" - }, - { - "description": "Configuration of outbound rules.", - "key": "sign-token", - "method": "io.helidon.security.providers.jwt.JwtProvider.Builder#outboundConfig(io.helidon.security.providers.common.OutboundConfig)", - "type": "io.helidon.security.providers.common.OutboundConfig" - } - ] - } - ] - } -] -[ - { - "module": "io.helidon.security.providers.httpsign", - "types": [ - { - "annotatedType": "io.helidon.security.providers.httpsign.HttpSignProvider.Builder", - "description": "HTTP header signature provider.", - "prefix": "http-signatures", - "type": "io.helidon.security.providers.httpsign.HttpSignProvider", - "producers": [ - "io.helidon.security.providers.httpsign.HttpSignProvider.Builder#build()", - "io.helidon.security.providers.httpsign.HttpSignProvider#create(io.helidon.common.config.Config)" - ], - "provides": [ - "io.helidon.security.spi.AuthenticationProvider" - ], - "options": [ - { - "description": "Add a header that is validated on inbound requests. Provider may support more than\n one header to validate.", - "key": "headers", - "kind": "LIST", - "method": "io.helidon.security.providers.httpsign.HttpSignProvider.Builder#addAcceptHeader(io.helidon.security.providers.httpsign.HttpSignHeader)", - "type": "io.helidon.security.providers.httpsign.HttpSignHeader", - "allowedValues": [ - { - "description": "Creates (or validates) a \"Signature\" header.", - "value": "SIGNATURE" - }, - { - "description": "Creates (or validates) an \"Authorization\" header, that contains \"Signature\" as the\n beginning of its content (the rest of the header is the same as for #SIGNATURE.", - "value": "AUTHORIZATION" - }, - { - "description": "Custom provided using a io.helidon.security.util.TokenHandler.", - "value": "CUSTOM" - } - ] - }, - { - "defaultValue": "true", - "description": "Set whether the signature is optional. If set to true (default), this provider will\n SecurityResponse.SecurityStatus#ABSTAIN from this request if signature is not\n present. If set to false, this provider will SecurityResponse.SecurityStatus#FAILURE fail\n if signature is not present.", - "key": "optional", - "method": "io.helidon.security.providers.httpsign.HttpSignProvider.Builder#optional(boolean)", - "type": "java.lang.Boolean" - }, - { - "defaultValue": "false", - "description": "Enable support for Helidon versions before 3.0.0 (exclusive).\n
\n Until version 3.0.0 (exclusive) there was a trailing end of line added to the signed\n data.\n To be able to communicate cross versions, we must configure this when talking to older versions of Helidon.\n Default value is `false`. In Helidon 2.x, this switch exists as well and the default is `true`, to\n allow communication between versions as needed.", - "key": "backward-compatible-eol", - "method": "io.helidon.security.providers.httpsign.HttpSignProvider.Builder#backwardCompatibleEol(java.lang.Boolean)", - "type": "java.lang.Boolean" - }, - { - "description": "Add outbound targets to this builder.\n The targets are used to chose what to do for outbound communication.\n The targets should have OutboundTargetDefinition attached through\n OutboundTarget.Builder#customObject(Class, Object) to tell us how to sign\n the request.\n
\n The same can be done through configuration:\n
\n {\n name = \"http-signatures\"\n class = \"HttpSignProvider\"\n http-signatures {\n targets: [\n {\n name = \"service2\"\n hosts = [\"localhost\"]\n paths = [\"/service2/.*\"]\n\n # This configures the OutboundTargetDefinition\n signature {\n key-id = \"service1\"\n hmac.secret = \"${CLEAR=password}\"\n }\n }]\n }\n }\n", - "key": "outbound", - "method": "io.helidon.security.providers.httpsign.HttpSignProvider.Builder#outbound(io.helidon.security.providers.common.OutboundConfig)", - "type": "io.helidon.security.providers.common.OutboundConfig" - }, - { - "description": "Add inbound configuration. This is used to validate signature and authenticate the\n party.\n
\n The same can be done through configuration:\n
\n {\n name = \"http-signatures\"\n class = \"HttpSignProvider\"\n http-signatures {\n inbound {\n # This configures the InboundClientDefinition\n keys: [\n {\n key-id = \"service1\"\n hmac.secret = \"${CLEAR=password}\"\n }]\n }\n }\n }\n", - "key": "inbound.keys", - "kind": "LIST", - "method": "io.helidon.security.providers.httpsign.HttpSignProvider.Builder#addInbound(io.helidon.security.providers.httpsign.InboundClientDefinition)", - "type": "io.helidon.security.providers.httpsign.InboundClientDefinition" - }, - { - "defaultValue": "helidon", - "description": "Realm to use for challenging inbound requests that do not have \"Authorization\" header\n in case header is HttpSignHeader#AUTHORIZATION and singatures are not optional.", - "key": "realm", - "method": "io.helidon.security.providers.httpsign.HttpSignProvider.Builder#realm(java.lang.String)" - }, - { - "description": "Override the default inbound required headers (e.g. headers that MUST be signed and\n headers that MUST be signed IF present).\n
\n Defaults:\n
\n Defaults to {@value #DEFAULT_REDIRECT_URI}", - "key": "redirect-uri", - "method": "io.helidon.security.providers.oidc.common.OidcConfig.Builder#redirectUri(java.lang.String)" - }, - { - "defaultValue": "false", - "description": "Can be set to `true` to force the use of relative URIs in all requests,\n regardless of the presence or absence of proxies or no-proxy lists. By default,\n requests that use the Proxy will have absolute URIs. Set this flag to `true`\n if the host is unable to accept absolute URIs.\n Defaults to {@value #DEFAULT_RELATIVE_URIS}.", - "key": "relative-uris", - "method": "io.helidon.security.providers.oidc.common.OidcConfig.Builder#relativeUris(boolean)", - "type": "java.lang.Boolean" - }, - { - "description": "Master password for encryption/decryption of cookies. This must be configured to the same value on each microservice\n using the cookie.", - "key": "cookie-encryption-password", - "method": "io.helidon.security.providers.oidc.common.OidcConfig.Builder#cookieEncryptionPassword(char[])", - "type": "char[]" - }, - { - "defaultValue": "/", - "description": "Path the cookie is valid for.\n Defaults to \"/\".", - "key": "cookie-path", - "method": "io.helidon.security.providers.oidc.common.OidcConfig.Builder#cookiePath(java.lang.String)" - }, - { - "description": "When using cookie, used to set MaxAge attribute of the cookie, defining how long\n the cookie is valid.\n Not used by default.", - "key": "cookie-max-age-seconds", - "method": "io.helidon.security.providers.oidc.common.OidcConfig.Builder#cookieMaxAgeSeconds(long)", - "type": "java.lang.Long" - }, - { - "defaultValue": "false", - "description": "By default, the client should redirect to the identity server for the user to log in.\n This behavior can be overridden by setting redirect to false. When token is not present in the request, the client\n will not redirect and just return appropriate error response code.", - "key": "redirect", - "method": "io.helidon.security.providers.oidc.common.OidcConfig.Builder#redirect(boolean)", - "type": "java.lang.Boolean" - }, - { - "description": "Proxy host to use. When defined, triggers usage of proxy for HTTP requests.\n Setting to empty String has the same meaning as setting to null - disables proxy.", - "key": "proxy-host", - "method": "io.helidon.security.providers.oidc.common.OidcConfig.Builder#proxyHost(java.lang.String)" - }, - { - "defaultValue": "false", - "description": "Whether to use a query parameter to send JWT token from application to this\n server.", - "key": "query-param-use", - "method": "io.helidon.security.providers.oidc.common.OidcConfig.Builder#useParam(java.lang.Boolean)", - "type": "java.lang.Boolean" - }, - { - "defaultValue": "HELIDON_TENANT", - "description": "The name of the cookie to use for the tenant name.\n Defaults to {@value #DEFAULT_TENANT_COOKIE_NAME}.", - "key": "cookie-name-tenant", - "method": "io.helidon.security.providers.oidc.common.OidcConfig.Builder#cookieTenantName(java.lang.String)" - }, - { - "defaultValue": "80", - "description": "Proxy port.\n Defaults to {@value DEFAULT_PROXY_PORT}", - "key": "proxy-port", - "method": "io.helidon.security.providers.oidc.common.OidcConfig.Builder#proxyPort(int)", - "type": "java.lang.Integer" - }, - { - "description": "Domain the cookie is valid for.\n Not used by default.", - "key": "cookie-domain", - "method": "io.helidon.security.providers.oidc.common.OidcConfig.Builder#cookieDomain(java.lang.String)" - }, - { - "defaultValue": "http", - "description": "Proxy protocol to use when proxy is used.\n Defaults to {@value DEFAULT_PROXY_PROTOCOL}.", - "key": "proxy-protocol", - "method": "io.helidon.security.providers.oidc.common.OidcConfig.Builder#proxyProtocol(java.lang.String)" - }, - { - "defaultValue": "false", - "description": "Whether to encrypt token cookie created by this microservice.\n Defaults to `false`.", - "key": "cookie-encryption-enabled", - "method": "io.helidon.security.providers.oidc.common.OidcConfig.Builder#cookieEncryptionEnabled(boolean)", - "type": "java.lang.Boolean" - }, - { - "defaultValue": "5", - "description": "Configure maximal number of redirects when redirecting to an OIDC provider within a single authentication\n attempt.\n
\n Defaults to {@value #DEFAULT_MAX_REDIRECTS}", - "key": "max-redirects", - "method": "io.helidon.security.providers.oidc.common.OidcConfig.Builder#maxRedirects(int)", - "type": "java.lang.Integer" - }, - { - "description": "Name of the encryption configuration available through Security#encrypt(String, byte[]) and\n Security#decrypt(String, String).\n If configured and encryption is enabled for any cookie,\n Security MUST be configured in global or current `io.helidon.common.context.Context` (this\n is done automatically in Helidon MP).", - "key": "cookie-encryption-name", - "method": "io.helidon.security.providers.oidc.common.OidcConfig.Builder#cookieEncryptionName(java.lang.String)" - }, - { - "defaultValue": "true", - "description": "Whether id token signature check should be enabled.\n Signature check is enabled by default, and it is highly recommended to not change that.\n Change this setting only when you really know what you are doing, otherwise it could case security issues.", - "key": "id-token-signature-validation", - "method": "io.helidon.security.providers.oidc.common.OidcConfig.Builder#idTokenSignatureValidation(boolean)", - "type": "java.lang.Boolean" - }, - { - "description": "Full URI of this application that is visible from user browser.\n Used to redirect request back from identity server after successful login.", - "key": "frontend-uri", - "method": "io.helidon.security.providers.oidc.common.OidcConfig.Builder#frontendUri(java.lang.String)" - }, - { - "defaultValue": "true", - "description": "Whether to check if current IP address matches the one access token was issued for.\n This check helps with cookie replay attack prevention.", - "key": "access-token-ip-check", - "method": "io.helidon.security.providers.oidc.common.OidcConfig.Builder#accessTokenIpCheck(boolean)", - "type": "java.lang.Boolean" - }, - { - "defaultValue": "h_ra", - "description": "Configure the parameter used to store the number of attempts in redirect.\n
\n Defaults to {@value #DEFAULT_ATTEMPT_PARAM}", - "key": "redirect-attempt-param", - "method": "io.helidon.security.providers.oidc.common.OidcConfig.Builder#redirectAttemptParam(java.lang.String)" - }, - { - "defaultValue": "LAX", - "description": "When using cookie, used to set the SameSite cookie value. Can be\n \"Strict\" or \"Lax\".", - "key": "cookie-same-site", - "method": "io.helidon.security.providers.oidc.common.OidcConfig.Builder#cookieSameSite(io.helidon.http.SetCookie.SameSite)", - "type": "io.helidon.http.SetCookie.SameSite", - "allowedValues": [ - { - "description": "", - "value": "LAX" - }, - { - "description": "", - "value": "STRICT" - }, - { - "description": "", - "value": "NONE" - } - ] - }, - { - "defaultValue": "accessToken", - "description": "Name of a query parameter that contains the JWT access token when parameter is used.", - "key": "query-param-name", - "method": "io.helidon.security.providers.oidc.common.OidcConfig.Builder#paramName(java.lang.String)" - }, - { - "description": "Assign cross-origin resource sharing settings.", - "key": "cors", - "method": "io.helidon.security.providers.oidc.common.OidcConfig.Builder#crossOriginConfig(io.helidon.cors.CrossOriginConfig)", - "type": "io.helidon.cors.CrossOriginConfig" - }, - { - "defaultValue": "false", - "description": "Force HTTPS for redirects to identity provider.\n Defaults to `false`.", - "key": "force-https-redirects", - "method": "io.helidon.security.providers.oidc.common.OidcConfig.Builder#forceHttpsRedirects(boolean)", - "type": "java.lang.Boolean" - }, - { - "defaultValue": "id_token", - "description": "Name of a query parameter that contains the JWT id token when parameter is used.", - "key": "query-id-token-param-name", - "method": "io.helidon.security.providers.oidc.common.OidcConfig.Builder#idTokenParamName(java.lang.String)" - }, - { - "defaultValue": "JSESSIONID_3", - "description": "The name of the cookie to use for the state storage.\n Defaults to {@value #DEFAULT_STATE_COOKIE_NAME}.", - "key": "cookie-name-state", - "method": "io.helidon.security.providers.oidc.common.OidcConfig.Builder#cookieNameState(java.lang.String)" - }, - { - "defaultValue": "true", - "description": "Whether to encrypt refresh token cookie created by this microservice.\n Defaults to `true`.", - "key": "cookie-encryption-refresh-enabled", - "method": "io.helidon.security.providers.oidc.common.OidcConfig.Builder#cookieEncryptionEnabledRefreshToken(boolean)", - "type": "java.lang.Boolean" - }, - { - "defaultValue": "true", - "description": "When using cookie, if set to true, the HttpOnly attribute will be configured.\n Defaults to {@value OidcCookieHandler.Builder#DEFAULT_HTTP_ONLY}.", - "key": "cookie-http-only", - "method": "io.helidon.security.providers.oidc.common.OidcConfig.Builder#cookieHttpOnly(java.lang.Boolean)", - "type": "java.lang.Boolean" - }, - { - "description": "A TokenHandler to\n process header containing a JWT.\n Default is \"Authorization\" header with a prefix \"bearer \".", - "key": "header-token", - "method": "io.helidon.security.providers.oidc.common.OidcConfig.Builder#headerTokenHandler(io.helidon.security.util.TokenHandler)", - "type": "io.helidon.security.util.TokenHandler" - }, - { - "defaultValue": "true", - "description": "Whether to expect JWT in a header field.", - "key": "header-use", - "method": "io.helidon.security.providers.oidc.common.OidcConfig.Builder#useHeader(java.lang.Boolean)", - "type": "java.lang.Boolean" - }, - { - "defaultValue": "false", - "description": "When using cookie, if set to true, the Secure attribute will be configured.\n Defaults to false.", - "key": "cookie-secure", - "method": "io.helidon.security.providers.oidc.common.OidcConfig.Builder#cookieSecure(java.lang.Boolean)", - "type": "java.lang.Boolean" - }, - { - "defaultValue": "true", - "description": "Whether to encrypt tenant name cookie created by this microservice.\n Defaults to `true`.", - "key": "cookie-encryption-tenant-enabled", - "method": "io.helidon.security.providers.oidc.common.OidcConfig.Builder#cookieEncryptionEnabledTenantName(boolean)", - "type": "java.lang.Boolean" - }, - { - "defaultValue": "true", - "description": "Whether access token signature check should be enabled.\n Signature check is enabled by default, and it is highly recommended to not change that.\n Change this setting only when you really know what you are doing, otherwise it could case security issues.", - "key": "token-signature-validation", - "method": "io.helidon.security.providers.oidc.common.OidcConfig.Builder#tokenSignatureValidation(boolean)", - "type": "java.lang.Boolean" - }, - { - "defaultValue": "JSESSIONID", - "description": "Name of the cookie to use.\n Defaults to {@value #DEFAULT_COOKIE_NAME}.", - "key": "cookie-name", - "method": "io.helidon.security.providers.oidc.common.OidcConfig.Builder#cookieName(java.lang.String)" - }, - { - "defaultValue": "h_tenant", - "description": "Name of a query parameter that contains the tenant name when the parameter is used.\n Defaults to #DEFAULT_TENANT_PARAM_NAME.", - "key": "query-param-tenant-name", - "method": "io.helidon.security.providers.oidc.common.OidcConfig.Builder#paramTenantName(java.lang.String)" - }, - { - "defaultValue": "true", - "description": "Whether to encrypt id token cookie created by this microservice.\n Defaults to `true`.", - "key": "cookie-encryption-id-enabled", - "method": "io.helidon.security.providers.oidc.common.OidcConfig.Builder#cookieEncryptionEnabledIdToken(boolean)", - "type": "java.lang.Boolean" - }, - { - "defaultValue": "JSESSIONID_2", - "description": "Name of the cookie to use for id token.\n Defaults to {@value #DEFAULT_COOKIE_NAME}_2.\n\n This cookie is only used when logout is enabled, as otherwise it is not needed.\n Content of this cookie is encrypted.", - "key": "cookie-name-id-token", - "method": "io.helidon.security.providers.oidc.common.OidcConfig.Builder#cookieNameIdToken(java.lang.String)" - }, - { - "defaultValue": "JSESSIONID_3", - "description": "The name of the cookie to use for the refresh token.\n Defaults to {@value #DEFAULT_REFRESH_COOKIE_NAME}.", - "key": "cookie-name-refresh-token", - "method": "io.helidon.security.providers.oidc.common.OidcConfig.Builder#cookieNameRefreshToken(java.lang.String)" - }, - { - "defaultValue": "true", - "description": "Whether to use cookie to store JWT between requests.\n Defaults to {@value #DEFAULT_COOKIE_USE}.", - "key": "cookie-use", - "method": "io.helidon.security.providers.oidc.common.OidcConfig.Builder#useCookie(java.lang.Boolean)", - "type": "java.lang.Boolean" - } - ] - }, - { - "annotatedType": "io.helidon.security.providers.oidc.common.TenantConfig.Builder", - "description": "Open ID Connect tenant configuration", - "type": "io.helidon.security.providers.oidc.common.TenantConfig", - "inherits": [ - "io.helidon.security.providers.oidc.common.BaseBuilder" - ], - "producers": [ - "io.helidon.security.providers.oidc.common.TenantConfig.Builder#build()" - ], - "options": [ - { - "description": "Name of the tenant.", - "key": "name", - "method": "io.helidon.security.providers.oidc.common.TenantConfig.Builder#name(java.lang.String)", - "required": true - } - ] - }, - { - "annotatedType": "io.helidon.security.providers.oidc.common.BaseBuilder", - "type": "io.helidon.security.providers.oidc.common.BaseBuilder", - "options": [ - { - "description": "URI of the identity server, base used to retrieve OIDC metadata.", - "key": "identity-uri", - "method": "io.helidon.security.providers.oidc.common.BaseBuilder#identityUri(java.net.URI)", - "type": "java.net.URI" - }, - { - "description": "Resource configuration for OIDC Metadata\n containing endpoints to various identity services, as well as information about the identity server.", - "key": "oidc-metadata.resource", - "method": "io.helidon.security.providers.oidc.common.BaseBuilder#oidcMetadata(io.helidon.common.configurable.Resource)", - "type": "io.helidon.common.configurable.Resource" - }, - { - "description": "Endpoint to use to validate JWT.\n Either use this or set #signJwk(JwkKeys) or #signJwk(Resource).", - "key": "introspect-endpoint-uri", - "method": "io.helidon.security.providers.oidc.common.BaseBuilder#introspectEndpointUri(java.net.URI)", - "type": "java.net.URI" - }, - { - "defaultValue": "false", - "description": "Allow audience claim to be optional.", - "key": "optional-audience", - "method": "io.helidon.security.providers.oidc.common.BaseBuilder#optionalAudience(boolean)", - "type": "java.lang.Boolean" - }, - { - "description": "Audience of issued tokens.", - "key": "audience", - "method": "io.helidon.security.providers.oidc.common.BaseBuilder#audience(java.lang.String)" - }, - { - "defaultValue": "30000", - "description": "Timeout of calls using web client.", - "key": "client-timeout-millis", - "method": "io.helidon.security.providers.oidc.common.BaseBuilder#clientTimeout(java.time.Duration)", - "type": "java.time.Duration" - }, - { - "description": "A resource pointing to JWK with public keys of signing certificates used\n to validate JWT.", - "key": "sign-jwk.resource", - "method": "io.helidon.security.providers.oidc.common.BaseBuilder#signJwk(io.helidon.common.configurable.Resource)", - "type": "io.helidon.common.configurable.Resource" - }, - { - "defaultValue": "openid", - "description": "Configure base scopes.\n By default, this is {@value #DEFAULT_BASE_SCOPES}.\n If scope has a qualifier, it must be used here.", - "key": "base-scopes", - "method": "io.helidon.security.providers.oidc.common.BaseBuilder#baseScopes(java.lang.String)" - }, - { - "defaultValue": "@default", - "description": "Configure one of the supported types of identity servers.\n\n If the type does not have an explicit mapping, a warning is logged and the default implementation is used.", - "key": "server-type", - "method": "io.helidon.security.providers.oidc.common.BaseBuilder#serverType(java.lang.String)" - }, - { - "description": "Issuer of issued tokens.", - "key": "issuer", - "method": "io.helidon.security.providers.oidc.common.BaseBuilder#issuer(java.lang.String)" - }, - { - "defaultValue": "false", - "description": "Configure audience claim check.", - "key": "check-audience", - "method": "io.helidon.security.providers.oidc.common.BaseBuilder#checkAudience(boolean)", - "type": "java.lang.Boolean" - }, - { - "defaultValue": "true", - "description": "Use JWK (a set of keys to validate signatures of JWT) to validate tokens.\n Use this method when you want to use default values for JWK or introspection endpoint URI.", - "key": "validate-jwt-with-jwk", - "method": "io.helidon.security.providers.oidc.common.BaseBuilder#validateJwtWithJwk(java.lang.Boolean)", - "type": "java.lang.Boolean" - }, - { - "defaultValue": "true", - "description": "If set to true, metadata will be loaded from default (well known)\n location, unless it is explicitly defined using oidc-metadata-resource. If set to false, it would not be loaded\n even if oidc-metadata-resource is not defined. In such a case all URIs must be explicitly defined (e.g.\n token-endpoint-uri).", - "key": "oidc-metadata-well-known", - "method": "io.helidon.security.providers.oidc.common.BaseBuilder#oidcMetadataWellKnown(boolean)", - "type": "java.lang.Boolean" - }, - { - "description": "Client secret as generated by OIDC server.\n Used to authenticate this application with the server when requesting\n JWT based on a code.", - "key": "client-secret", - "method": "io.helidon.security.providers.oidc.common.BaseBuilder#clientSecret(java.lang.String)" - }, - { - "description": "Audience of the scope required by this application. This is prefixed to\n the scope name when requesting scopes from the identity server.\n Defaults to empty string.", - "key": "scope-audience", - "method": "io.helidon.security.providers.oidc.common.BaseBuilder#scopeAudience(java.lang.String)" - }, - { - "defaultValue": "CLIENT_SECRET_BASIC", - "description": "Type of authentication to use when invoking the token endpoint.\n Current supported options:\n
\n The JWT MUST contain the following REQUIRED Claim Values and MAY contain the following\n OPTIONAL Claim Values.\n
\n Required:\n `iss, sub, aud, jti, exp`\n
\n Optional:\n `iat`", - "value": "CLIENT_SECRET_JWT" - }, - { - "description": "Clients that have registered a public key sign a JWT using that key. The Client authenticates in accordance with\n JSON Web Token (JWT) Profile for OAuth 2.0 Client Authentication and Authorization Grants [OAuth.JWT] and Assertion\n Framework for OAuth 2.0 Client Authentication and Authorization Grants [OAuth.Assertions].\n
\n The JWT MUST contain the following REQUIRED Claim Values and MAY contain the following\n OPTIONAL Claim Values.\n
\n Required:\n `iss, sub, aud, jti, exp`\n
\n Optional:\n `iat`",
- "value": "PRIVATE_KEY_JWT"
- },
- {
- "description": "The Client does not authenticate itself at the Token Endpoint, either because it uses only the Implicit Flow (and so\n does not use the Token Endpoint) or because it is a Public Client with no Client Secret or other authentication\n mechanism.",
- "value": "NONE"
- }
- ]
- },
- {
- "description": "Client ID as generated by OIDC server.",
- "key": "client-id",
- "method": "io.helidon.security.providers.oidc.common.BaseBuilder#clientId(java.lang.String)"
- },
- {
- "description": "URI of an authorization endpoint used to redirect users to for logging-in.\n\n If not defined, it is obtained from #oidcMetadata(Resource), if that is not defined\n an attempt is made to use #identityUri(URI)/oauth2/v1/authorize.",
- "key": "authorization-endpoint-uri",
- "method": "io.helidon.security.providers.oidc.common.BaseBuilder#authorizationEndpointUri(java.net.URI)",
- "type": "java.net.URI"
- },
- {
- "description": "URI of a token endpoint used to obtain a JWT based on the authentication\n code.\n If not defined, it is obtained from #oidcMetadata(Resource), if that is not defined\n an attempt is made to use #identityUri(URI)/oauth2/v1/token.",
- "key": "token-endpoint-uri",
- "method": "io.helidon.security.providers.oidc.common.BaseBuilder#tokenEndpointUri(java.net.URI)",
- "type": "java.net.URI"
- }
- ]
- }
- ]
- }
-]
-[
- {
- "module": "io.helidon.security.providers.idcs.mapper",
- "types": [
- {
- "annotatedType": "io.helidon.security.providers.idcs.mapper.IdcsMtRoleMapperProvider.Builder",
- "description": "Multitenant IDCS role mapping provider",
- "prefix": "idcs-role-mapper",
- "type": "io.helidon.security.providers.idcs.mapper.IdcsMtRoleMapperProvider",
- "inherits": [
- "io.helidon.security.providers.idcs.mapper.IdcsRoleMapperProviderBase.Builder"
- ],
- "producers": [
- "io.helidon.security.providers.idcs.mapper.IdcsMtRoleMapperProvider.Builder#build()",
- "io.helidon.security.providers.idcs.mapper.IdcsMtRoleMapperProvider#create(io.helidon.common.config.Config)"
- ],
- "provides": [
- "io.helidon.security.spi.SecurityProvider",
- "io.helidon.security.spi.SubjectMappingProvider"
- ],
- "options": [
- {
- "description": "Use explicit io.helidon.security.providers.common.EvictableCache for role caching.",
- "key": "cache-config",
- "method": "io.helidon.security.providers.idcs.mapper.IdcsMtRoleMapperProvider.Builder#cache(io.helidon.security.providers.common.EvictableCache \n Valid examples:\n \n Valid examples:\n \n If this method is never invoked, defaults to all scopes.\n \n Defaults to `true`.\n \n Defaults to `true`.\n \n This configuration property has an effect only when `config` is, explicitly or implicitly,\n present in the value for the #authStrategies(). This is also known as #simpleConfigIsPresent().\n When it is present, either this property or com.oracle.bmc.auth.RegionProvider must be provide a value in order\n to set the {@linkplain com.oracle.bmc.auth.ConfigFileAuthenticationDetailsProvider#getRegion()}.\n\n @return the OCI region",
- "key": "auth.region",
- "method": "io.helidon.integrations.oci.sdk.runtime.OciConfig.Builder#authRegion(java.lang.String)"
- },
- {
- "description": "The OCI tenant id.\n \n This configuration property has an effect only when `config` is, explicitly or implicitly,\n present in the value for the #authStrategies(). This is also known as #simpleConfigIsPresent().\n When it is present, this property must be provided in order to set the\n {@linkplain com.oracle.bmc.auth.ConfigFileAuthenticationDetailsProvider#getTenantId()}.\n\n @return the OCI tenant id",
- "key": "auth.tenant-id",
- "method": "io.helidon.integrations.oci.sdk.runtime.OciConfig.Builder#authTenantId(java.lang.String)"
- },
- {
- "description": "The OCI configuration profile path.\n \n This configuration property has an effect only when `config-file` is, explicitly or implicitly,\n present in the value for the #authStrategies(). This is also known as #fileConfigIsPresent().\n When it is present, this property must also be present and then the\n {@linkplain com.oracle.bmc.ConfigFileReader#parse(String)}\n method will be passed this value. It is expected to be passed with a\n valid OCI configuration file path.\n\n @return the OCI configuration profile path",
- "key": "config.path",
- "method": "io.helidon.integrations.oci.sdk.runtime.OciConfig.Builder#configPath(java.lang.String)"
- },
- {
- "description": "The list of authentication strategies that will be attempted by\n com.oracle.bmc.auth.AbstractAuthenticationDetailsProvider when one is\n called for. This is only used if #authStrategy() is not present.\n\n \n If there are more than one strategy descriptors defined, the\n first one that is deemed to be available/suitable will be used and all others will be ignored.\n\n @return the list of authentication strategies that will be applied, defaulting to `auto`\n @see io.helidon.integrations.oci.sdk.runtime.OciAuthenticationDetailsProvider.AuthStrategy",
- "key": "auth-strategies",
- "kind": "LIST",
- "method": "io.helidon.integrations.oci.sdk.runtime.OciConfig.Builder#authStrategies(java.lang.String)",
- "allowedValues": [
- {
- "description": "auto select first applicable",
- "value": "auto"
- },
- {
- "description": "simple authentication provider",
- "value": "config"
- },
- {
- "description": "config file authentication provider",
- "value": "config-file"
- },
- {
- "description": "instance principals authentication provider",
- "value": "instance-principals"
- },
- {
- "description": "resource principal authentication provider",
- "value": "resource-principal"
- }
- ]
- },
- {
- "defaultValue": "DEFAULT",
- "description": "The OCI configuration/auth profile name.\n \n This configuration property has an effect only when `config-file` is, explicitly or implicitly,\n present in the value for the #authStrategies(). This is also known as #fileConfigIsPresent().\n When it is present, this property may also be optionally provided in order to override the default\n {@value #DEFAULT_PROFILE_NAME}.\n\n @return the optional OCI configuration/auth profile name",
- "key": "config.profile",
- "method": "io.helidon.integrations.oci.sdk.runtime.OciConfig.Builder#configProfile(java.lang.String)"
- },
- {
- "defaultValue": "oci_api_key.pem",
- "description": "The OCI authentication key file.\n \n This configuration property has an effect only when `config` is, explicitly or implicitly,\n present in the value for the #authStrategies(). This is also known as #simpleConfigIsPresent().\n When it is present, this property must be provided in order to set the\n {@linkplain com.oracle.bmc.auth.SimpleAuthenticationDetailsProvider#getPrivateKey()}. This file must exist in the\n `user.home` directory. Alternatively, this property can be set using either #authPrivateKey() or\n using #authPrivateKeyPath().\n\n @return the OCI authentication key file",
- "key": "auth.keyFile",
- "method": "io.helidon.integrations.oci.sdk.runtime.OciConfig.Builder#authKeyFile(java.lang.String)"
- },
- {
- "description": "The OCI authentication private key.\n \n This configuration property has an effect only when `config` is, explicitly or implicitly,\n present in the value for the #authStrategies(). This is also known as #simpleConfigIsPresent().\n When it is present, this property must be provided in order to set the\n {@linkplain com.oracle.bmc.auth.SimpleAuthenticationDetailsProvider#getPrivateKey()}. Alternatively, this property\n can be set using either #authKeyFile() residing in the `user.home` directory, or using\n #authPrivateKeyPath().\n\n @return the OCI authentication private key",
- "key": "auth.private-key",
- "method": "io.helidon.integrations.oci.sdk.runtime.OciConfig.Builder#authPrivateKey(char[])",
- "type": "char[]"
- },
- {
- "description": "The OCI user id.\n \n This configuration property has an effect only when `config` is, explicitly or implicitly,\n present in the value for the #authStrategies().\n When it is present, this property must be provided in order to set the\n {@linkplain com.oracle.bmc.auth.ConfigFileAuthenticationDetailsProvider#getUserId()}.\n\n @return the OCI user id",
- "key": "auth.user-id",
- "method": "io.helidon.integrations.oci.sdk.runtime.OciConfig.Builder#authUserId(java.lang.String)"
- },
- {
- "defaultValue": "169.254.169.254",
- "description": "The OCI IMDS hostname.\n \n This configuration property is used to identify the metadata service url.\n\n @return the OCI IMDS hostname",
- "key": "imds.hostname",
- "method": "io.helidon.integrations.oci.sdk.runtime.OciConfig.Builder#imdsHostName(java.lang.String)"
- },
- {
- "description": "The OCI authentication fingerprint.\n \n This configuration property has an effect only when `config` is, explicitly or implicitly,\n present in the value for the #authStrategies(). This is also known as #simpleConfigIsPresent().\n When it is present, this property must be provided in order to set the API signing key's fingerprint.\n See {@linkplain com.oracle.bmc.auth.SimpleAuthenticationDetailsProvider#getFingerprint()} for more details.\n\n @return the OCI authentication fingerprint",
- "key": "auth.fingerprint",
- "method": "io.helidon.integrations.oci.sdk.runtime.OciConfig.Builder#authFingerprint(java.lang.String)"
- },
- {
- "description": "The singular authentication strategy to apply. This will be preferred over #authStrategies() if both are\n present.\n\n @return the singular authentication strategy to be applied",
- "key": "auth-strategy",
- "method": "io.helidon.integrations.oci.sdk.runtime.OciConfig.Builder#authStrategy(java.lang.String)",
- "allowedValues": [
- {
- "description": "auto select first applicable",
- "value": "auto"
- },
- {
- "description": "simple authentication provider",
- "value": "config"
- },
- {
- "description": "config file authentication provider",
- "value": "config-file"
- },
- {
- "description": "instance principals authentication provider",
- "value": "instance-principals"
- },
- {
- "description": "resource principals authentication provider",
- "value": "resource-principal"
- }
- ]
- },
- {
- "description": "The OCI authentication key file path.\n \n This configuration property has an effect only when `config` is, explicitly or implicitly,\n present in the value for the #authStrategies(). This is also known as #simpleConfigIsPresent().\n When it is present, this property must be provided in order to set the\n {@linkplain com.oracle.bmc.auth.SimpleAuthenticationDetailsProvider#getPrivateKey()}. This file path is\n an alternative for using #authKeyFile() where the file must exist in the `user.home` directory.\n Alternatively, this property can be set using #authPrivateKey().\n\n @return the OCI authentication key file path",
- "key": "auth.private-key-path",
- "method": "io.helidon.integrations.oci.sdk.runtime.OciConfig.Builder#authPrivateKeyPath(java.lang.String)"
- },
- {
- "description": "The OCI authentication passphrase.\n \n This configuration property has an effect only when `config` is, explicitly or implicitly,\n present in the value for the #authStrategies(). This is also known as #simpleConfigIsPresent().\n When it is present, this property must be provided in order to set the\n {@linkplain com.oracle.bmc.auth.SimpleAuthenticationDetailsProvider#getPassphraseCharacters()}.\n\n @return the OCI authentication passphrase",
- "key": "auth.passphrase",
- "method": "io.helidon.integrations.oci.sdk.runtime.OciConfig.Builder#authPassphrase(char[])",
- "type": "char[]"
- },
- {
- "defaultValue": "PT0.1S",
- "description": "The OCI IMDS connection timeout. This is used to auto-detect availability.\n \n This configuration property is used when attempting to connect to the metadata service.\n\n @return the OCI IMDS connection timeout\n @see OciAvailability",
- "key": "imds.timeout.milliseconds",
- "method": "io.helidon.integrations.oci.sdk.runtime.OciConfig.Builder#imdsTimeout(java.time.Duration)",
- "type": "java.time.Duration"
- }
- ]
- }
- ]
- }
-]
-[
- {
- "module": "io.helidon.webserver.websocket",
- "types": [
- {
- "annotatedType": "io.helidon.webserver.websocket.WsConfig",
- "type": "io.helidon.webserver.websocket.WsConfig",
- "producers": [
- "io.helidon.webserver.websocket.WsConfig#create(io.helidon.common.config.Config)",
- "io.helidon.webserver.websocket.WsConfig#builder()"
- ],
- "provides": [
- "io.helidon.webserver.spi.ProtocolConfig"
- ],
- "options": [
- {
- "description": "WebSocket origins.\n\n @return origins",
- "key": "origins",
- "kind": "LIST",
- "method": "io.helidon.webserver.websocket.WsConfig.Builder#origins(java.util.Set \n This configuration allows usage of a different security instance for a specific security feature setup.\n\n @return security instance to be used to handle security in this feature configuration",
- "key": "security",
- "method": "io.helidon.webserver.security.SecurityFeatureConfig.Builder#security(io.helidon.security.Security)",
- "type": "io.helidon.security.Security"
- }
- ]
- }
- ]
- }
-]
-[
- {
- "module": "io.helidon.webserver.observe.metrics",
- "types": [
- {
- "annotatedType": "io.helidon.webserver.observe.metrics.MetricsObserverConfig",
- "prefix": "metrics",
- "type": "io.helidon.webserver.observe.metrics.MetricsObserver",
- "standalone": true,
- "producers": [
- "io.helidon.webserver.observe.metrics.MetricsObserverConfig#create(io.helidon.common.config.Config)",
- "io.helidon.webserver.observe.metrics.MetricsObserverConfig#builder()",
- "io.helidon.webserver.observe.metrics.MetricsObserver#create(io.helidon.webserver.observe.metrics.MetricsObserverConfig)"
- ],
- "provides": [
- "io.helidon.webserver.observe.spi.ObserveProvider"
- ],
- "options": [
- {
- "defaultValue": "metrics",
- "description": "",
- "key": "endpoint",
- "method": "io.helidon.webserver.observe.metrics.MetricsObserverConfig.Builder#endpoint(java.lang.String)"
- },
- {
- "defaultValue": "@io.helidon.metrics.api.MetricsConfig@.create()",
- "description": "Assigns `MetricsSettings` which will be used in creating the `MetricsSupport` instance at build-time.\n\n @return the metrics settings to assign for use in building the `MetricsSupport` instance",
- "key": "metrics-config",
- "method": "io.helidon.webserver.observe.metrics.MetricsObserverConfig.Builder#metricsConfig(io.helidon.metrics.api.MetricsConfig)",
- "type": "io.helidon.metrics.api.MetricsConfig",
- "merge": true
- }
- ]
- }
- ]
- }
-]
-[
- {
- "module": "io.helidon.webserver.observe.tracing",
- "types": [
- {
- "annotatedType": "io.helidon.webserver.observe.tracing.TracingObserverConfig",
- "type": "io.helidon.webserver.observe.tracing.TracingObserver",
- "producers": [
- "io.helidon.webserver.observe.tracing.TracingObserverConfig#create(io.helidon.common.config.Config)",
- "io.helidon.webserver.observe.tracing.TracingObserverConfig#builder()",
- "io.helidon.webserver.observe.tracing.TracingObserver#create(io.helidon.webserver.observe.tracing.TracingObserverConfig)"
- ],
- "provides": [
- "io.helidon.webserver.observe.spi.ObserveProvider"
- ],
- "options": [
- {
- "defaultValue": "TracingConfig.ENABLED",
- "description": "Use the provided configuration as a default for any request.\n\n @return default web server tracing configuration",
- "key": "env-config",
- "method": "io.helidon.webserver.observe.tracing.TracingObserverConfig.Builder#envConfig(io.helidon.tracing.config.TracingConfig)",
- "type": "io.helidon.tracing.config.TracingConfig",
- "merge": true
- },
- {
- "defaultValue": "new @java.util.ArrayList@(@java.util.List@.of(PathTracingConfig.builder()\n .path(\"/metrics/*\")\n .tracingConfig(TracingConfig.DISABLED)\n .build(), \n PathTracingConfig.builder()\n .path(\"/observe/metrics/*\")\n .tracingConfig(TracingConfig.DISABLED)\n .build(), \n PathTracingConfig.builder()\n .path(\"/health/*\")\n .tracingConfig(TracingConfig.DISABLED)\n .build(), \n PathTracingConfig.builder()\n .path(\"/observe/health/*\")\n .tracingConfig(TracingConfig.DISABLED)\n .build(), \n PathTracingConfig.builder()\n .path(\"/openapi/*\")\n .tracingConfig(TracingConfig.DISABLED)\n .build(), \n PathTracingConfig.builder()\n .path(\"/observe/openapi/*\")\n .tracingConfig(TracingConfig.DISABLED)\n .build()))",
- "description": "Path specific configuration of tracing.\n\n @return configuration of tracing for specific paths",
- "key": "paths",
- "kind": "LIST",
- "method": "io.helidon.webserver.observe.tracing.TracingObserverConfig.Builder#pathConfigs(java.util.List \n Patterns always added:\n \n Example:\n \n Defaults to true. Set this to false such that a shutdown hook is not registered.\n\n @return whether to register a shutdown hook",
- "key": "shutdown-hook",
- "method": "io.helidon.webserver.WebServerConfig.Builder#shutdownHook(boolean)",
- "type": "java.lang.Boolean"
- }
- ]
- },
- {
- "annotatedType": "io.helidon.webserver.ConnectionConfig",
- "type": "io.helidon.webserver.ConnectionConfig",
- "producers": [
- "io.helidon.webserver.ConnectionConfig#create(io.helidon.common.config.Config)",
- "io.helidon.webserver.ConnectionConfig#builder()"
- ],
- "options": [
- {
- "defaultValue": "PT30S",
- "description": "Read timeout.\n Default is {@value #DEFAULT_READ_TIMEOUT_DURATION}\n\n @return read timeout",
- "key": "read-timeout",
- "method": "io.helidon.webserver.ConnectionConfig.Builder#readTimeout(java.time.Duration)",
- "type": "java.time.Duration"
- },
- {
- "defaultValue": "true",
- "description": "Configure socket keep alive.\n Default is `true`.\n\n @return keep alive\n @see java.net.StandardSocketOptions#SO_KEEPALIVE",
- "key": "keep-alive",
- "method": "io.helidon.webserver.ConnectionConfig.Builder#keepAlive(boolean)",
- "type": "java.lang.Boolean"
- },
- {
- "defaultValue": "PT10S",
- "description": "Connect timeout.\n Default is {@value #DEFAULT_CONNECT_TIMEOUT_DURATION}.\n\n @return connect timeout",
- "key": "connect-timeout",
- "method": "io.helidon.webserver.ConnectionConfig.Builder#connectTimeout(java.time.Duration)",
- "type": "java.time.Duration"
- },
- {
- "defaultValue": "32768",
- "description": "Socket receive buffer size.\n Default is {@value #DEFAULT_SO_BUFFER_SIZE}.\n\n @return buffer size, in bytes\n @see java.net.StandardSocketOptions#SO_RCVBUF",
- "key": "receive-buffer-size",
- "method": "io.helidon.webserver.ConnectionConfig.Builder#receiveBufferSize(int)",
- "type": "java.lang.Integer"
- },
- {
- "defaultValue": "true",
- "description": "Socket reuse address.\n Default is `true`.\n\n @return whether to reuse address\n @see java.net.StandardSocketOptions#SO_REUSEADDR",
- "key": "reuse-address",
- "method": "io.helidon.webserver.ConnectionConfig.Builder#reuseAddress(boolean)",
- "type": "java.lang.Boolean"
- },
- {
- "defaultValue": "false",
- "description": "Disable Nagle's algorithm by setting\n TCP_NODELAY to true. This can result in better performance on Mac or newer linux kernels for some\n payload types.\n Default is `false`.\n\n @return whether to use TCP_NODELAY, defaults to `false`\n @see java.net.StandardSocketOptions#TCP_NODELAY",
- "key": "tcp-no-delay",
- "method": "io.helidon.webserver.ConnectionConfig.Builder#tcpNoDelay(boolean)",
- "type": "java.lang.Boolean"
- },
- {
- "defaultValue": "32768",
- "description": "Socket send buffer size.\n Default is {@value #DEFAULT_SO_BUFFER_SIZE}.\n\n @return buffer size, in bytes\n @see java.net.StandardSocketOptions#SO_SNDBUF",
- "key": "send-buffer-size",
- "method": "io.helidon.webserver.ConnectionConfig.Builder#sendBufferSize(int)",
- "type": "java.lang.Integer"
- }
- ]
- },
- {
- "annotatedType": "io.helidon.webserver.http1.Http1Config",
- "type": "io.helidon.webserver.http1.Http1Config",
- "producers": [
- "io.helidon.webserver.http1.Http1Config#create(io.helidon.common.config.Config)",
- "io.helidon.webserver.http1.Http1Config#builder()"
- ],
- "provides": [
- "io.helidon.webserver.spi.ProtocolConfig"
- ],
- "options": [
- {
- "defaultValue": "false",
- "description": "Whether to validate headers.\n If set to false, any value is accepted, otherwise validates headers + known headers\n are validated by format\n (content length is always validated as it is part of protocol processing (other headers may be validated if\n features use them)).\n \n Defaults to `false` as user has control on the header creation.\n \n Defaults to `true`.\n Configuration file values example: `PT0.5S`, `PT2S`.\n\n @return grace period",
- "key": "shutdown-grace-period",
- "method": "io.helidon.webserver.ListenerConfig.Builder#shutdownGracePeriod(java.time.Duration)",
- "type": "java.time.Duration"
- },
- {
- "description": "Configure the listener specific io.helidon.http.encoding.ContentEncodingContext.\n This method discards all previously registered ContentEncodingContext.\n If no content encoding context is registered, content encoding context of the webserver would be used.\n\n @return content encoding context",
- "key": "content-encoding",
- "method": "io.helidon.webserver.ListenerConfig.Builder#contentEncoding(java.util.Optional \n Note that for some entity types we cannot use streaming, as they are already fully in memory (String, byte[]), for such\n cases, this option is ignored.\n \n Default is 128Kb.\n\n @return maximal number of bytes to buffer in memory for supported writers",
- "key": "max-in-memory-entity",
- "method": "io.helidon.webserver.ListenerConfig.Builder#maxInMemoryEntity(int)",
- "type": "java.lang.Integer"
- },
- {
- "defaultValue": "-1",
- "description": "Maximal number of bytes an entity may have.\n If io.helidon.http.HeaderNames#CONTENT_LENGTH is used, this is checked immediately,\n if io.helidon.http.HeaderValues#TRANSFER_ENCODING_CHUNKED is used, we will fail when the\n number of bytes read would exceed the max payload size.\n Defaults to unlimited (`-1`).\n\n @return maximal number of bytes of entity",
- "key": "max-payload-size",
- "method": "io.helidon.webserver.ListenerConfig.Builder#maxPayloadSize(long)",
- "type": "java.lang.Long"
- },
- {
- "defaultValue": "1024",
- "description": "Accept backlog.\n\n @return backlog",
- "key": "backlog",
- "method": "io.helidon.webserver.ListenerConfig.Builder#backlog(int)",
- "type": "java.lang.Integer"
- },
- {
- "defaultValue": "0",
- "description": "Port of the default socket.\n If configured to `0` (the default), server starts on a random port.\n\n @return port to listen on (for the default socket)",
- "key": "port",
- "method": "io.helidon.webserver.ListenerConfig.Builder#port(int)",
- "type": "java.lang.Integer"
- },
- {
- "description": "Listener receive buffer size.\n\n @return buffer size in bytes",
- "key": "receive-buffer-size",
- "method": "io.helidon.webserver.ListenerConfig.Builder#receiveBufferSize(java.util.Optional \n If enabled, all other configuration options of this executor service are ignored!\n\n @return whether to use virtual threads or not, defaults to `false`",
- "key": "virtual-threads",
- "method": "io.helidon.common.configurable.ScheduledThreadPoolConfig.Builder#virtualThreads(boolean)",
- "type": "java.lang.Boolean"
- },
- {
- "defaultValue": "16",
- "description": "Core pool size of the thread pool executor.\n Defaults to {@value #DEFAULT_CORE_POOL_SIZE}.\n\n @return corePoolSize see java.util.concurrent.ThreadPoolExecutor#getCorePoolSize()",
- "key": "core-pool-size",
- "method": "io.helidon.common.configurable.ScheduledThreadPoolConfig.Builder#corePoolSize(int)",
- "type": "java.lang.Integer"
- },
- {
- "defaultValue": "true",
- "description": "Is daemon of the thread pool executor.\n Defaults to {@value #DEFAULT_IS_DAEMON}.\n\n @return whether the threads are daemon threads",
- "key": "is-daemon",
- "method": "io.helidon.common.configurable.ScheduledThreadPoolConfig.Builder#daemon(boolean)",
- "type": "java.lang.Boolean"
- }
- ]
- },
- {
- "annotatedType": "io.helidon.common.configurable.LruCacheConfig",
- "type": "io.helidon.common.configurable.LruCache",
- "producers": [
- "io.helidon.common.configurable.LruCacheConfig#create(io.helidon.common.config.Config)",
- "io.helidon.common.configurable.LruCacheConfig#builder()",
- "io.helidon.common.configurable.LruCache#create(io.helidon.common.configurable.LruCacheConfig)"
- ],
- "options": [
- {
- "defaultValue": "10000",
- "description": "Configure capacity of the cache. Defaults to {@value LruCache#DEFAULT_CAPACITY}.\n\n @return maximal number of records in the cache before the oldest one is removed",
- "key": "capacity",
- "method": "io.helidon.common.configurable.LruCacheConfig.Builder#capacity(int)",
- "type": "java.lang.Integer"
- }
- ]
- },
- {
- "annotatedType": "io.helidon.common.configurable.ThreadPoolConfig",
- "type": "io.helidon.common.configurable.ThreadPoolSupplier",
- "producers": [
- "io.helidon.common.configurable.ThreadPoolConfig#create(io.helidon.common.config.Config)",
- "io.helidon.common.configurable.ThreadPoolConfig#builder()",
- "io.helidon.common.configurable.ThreadPoolSupplier#create(io.helidon.common.configurable.ThreadPoolConfig)"
- ],
- "options": [
- {
- "defaultValue": "50",
- "description": "Max pool size of the thread pool executor.\n Defaults to {@value #DEFAULT_MAX_POOL_SIZE}.\n\n @return maxPoolSize see java.util.concurrent.ThreadPoolExecutor#getMaximumPoolSize()",
- "key": "max-pool-size",
- "method": "io.helidon.common.configurable.ThreadPoolConfig.Builder#maxPoolSize(int)",
- "type": "java.lang.Integer"
- },
- {
- "defaultValue": "PT3M",
- "description": "Keep alive of the thread pool executor.\n Defaults to {@value #DEFAULT_KEEP_ALIVE}.\n\n @return keep alive see java.util.concurrent.ThreadPoolExecutor#getKeepAliveTime(java.util.concurrent.TimeUnit)",
- "key": "keep-alive",
- "method": "io.helidon.common.configurable.ThreadPoolConfig.Builder#keepAlive(java.time.Duration)",
- "type": "java.time.Duration"
- },
- {
- "description": "Name prefix for threads in this thread pool executor.\n Defaults to {@value #DEFAULT_THREAD_NAME_PREFIX}.\n\n @return prefix of a thread name",
- "key": "thread-name-prefix",
- "method": "io.helidon.common.configurable.ThreadPoolConfig.Builder#threadNamePrefix(java.util.Optional \n If enabled, all other configuration options of this executor service are ignored!\n\n @return whether to use virtual threads or not, defaults to `false`",
- "key": "virtual-threads",
- "method": "io.helidon.common.configurable.ThreadPoolConfig.Builder#virtualThreads(boolean)",
- "type": "java.lang.Boolean"
- },
- {
- "defaultValue": "10",
- "description": "Core pool size of the thread pool executor.\n Defaults to {@value #DEFAULT_CORE_POOL_SIZE}.\n\n @return corePoolSize see java.util.concurrent.ThreadPoolExecutor#getCorePoolSize()",
- "key": "core-pool-size",
- "method": "io.helidon.common.configurable.ThreadPoolConfig.Builder#corePoolSize(int)",
- "type": "java.lang.Integer"
- },
- {
- "description": "Name of this thread pool executor.\n\n @return the pool name",
- "key": "name",
- "method": "io.helidon.common.configurable.ThreadPoolConfig.Builder#name(java.util.Optional \n Defaults to {@value #DEFAULT_GROWTH_RATE}\n\n @return the growth rate",
- "key": "growth-rate",
- "method": "io.helidon.common.configurable.ThreadPoolConfig.Builder#growthRate(int)",
- "type": "java.lang.Integer"
- }
- ]
- },
- {
- "annotatedType": "io.helidon.common.configurable.AllowListConfig",
- "type": "io.helidon.common.configurable.AllowList",
- "producers": [
- "io.helidon.common.configurable.AllowListConfig#create(io.helidon.common.config.Config)",
- "io.helidon.common.configurable.AllowListConfig#builder()",
- "io.helidon.common.configurable.AllowList#create(io.helidon.common.configurable.AllowListConfig)"
- ],
- "options": [
- {
- "defaultValue": "false",
- "description": "Allows all strings to match (subject to \"deny\" conditions). An `allow.all` setting of `false` does\n not deny all strings but rather represents the absence of a universal match, meaning that other allow and deny settings\n determine the matching outcomes.\n\n @return whether to allow all strings to match (subject to \"deny\" conditions)",
- "key": "allow.all",
- "method": "io.helidon.common.configurable.AllowListConfig.Builder#allowAll(boolean)",
- "type": "java.lang.Boolean"
- },
- {
- "description": "Patterns specifying strings to allow.\n\n @return patterns which allow matching",
- "key": "allow.pattern",
- "kind": "LIST",
- "method": "io.helidon.common.configurable.AllowListConfig.Builder#allowedPatterns(java.util.List \n This is a dangerous setting: if set to `true`, any certificate will be accepted, throwing away\n most of the security advantages of TLS. NEVER do this in production.\n\n @return whether to trust all certificates, do not use in production",
- "key": "trust-all",
- "method": "io.helidon.common.tls.TlsConfig.Builder#trustAll(boolean)",
- "type": "java.lang.Boolean"
- },
- {
- "defaultValue": "TLS",
- "description": "Configure the protocol used to obtain an instance of javax.net.ssl.SSLContext.\n\n @return protocol to use, defaults to {@value DEFAULT_PROTOCOL}",
- "key": "protocol",
- "method": "io.helidon.common.tls.TlsConfig.Builder#protocol(java.lang.String)"
- },
- {
- "description": "Enabled protocols for TLS communication.\n Example of valid values for `TLS` protocol: `TLSv1.3`, `TLSv1.2`\n\n @return protocols to enable, by default (or if list is empty), all available protocols are enabled",
- "key": "protocols",
- "kind": "LIST",
- "method": "io.helidon.common.tls.TlsConfig.Builder#enabledProtocols(java.util.List If errorRatio is 40, and volume is 10, 4 failed requests will open the circuit.\n Default is {@value #DEFAULT_ERROR_RATIO}.\n\n @return percent of failure that trigger the circuit to open\n @see #volume()",
- "key": "error-ratio",
- "method": "io.helidon.faulttolerance.CircuitBreakerConfig.Builder#errorRatio(int)",
- "type": "java.lang.Integer"
- },
- {
- "defaultValue": "1",
- "description": "How many successful calls will close a half-open circuit.\n Nevertheless, the first failed call will open the circuit again.\n Default is {@value #DEFAULT_SUCCESS_THRESHOLD}.\n\n @return number of calls",
- "key": "success-threshold",
- "method": "io.helidon.faulttolerance.CircuitBreakerConfig.Builder#successThreshold(int)",
- "type": "java.lang.Integer"
- }
- ]
- },
- {
- "annotatedType": "io.helidon.faulttolerance.AsyncConfig",
- "type": "io.helidon.faulttolerance.Async",
- "producers": [
- "io.helidon.faulttolerance.AsyncConfig#create(io.helidon.common.config.Config)",
- "io.helidon.faulttolerance.AsyncConfig#builder()",
- "io.helidon.faulttolerance.Async#create(io.helidon.faulttolerance.AsyncConfig)"
- ],
- "options": [
- {
- "description": "Name of an executor service. This is only honored when service registry is used.\n\n @return name fo the java.util.concurrent.ExecutorService to lookup\n @see #executor()",
- "key": "executor-name",
- "method": "io.helidon.faulttolerance.AsyncConfig.Builder#executorName(java.util.Optional \n Default when Retry.DelayingRetryPolicy is used is `2`.\n\n @return delay factor for delaying retry policy",
- "key": "delay-factor",
- "method": "io.helidon.faulttolerance.RetryConfig.Builder#delayFactor(double)",
- "type": "java.lang.Double"
- }
- ]
- }
- ]
- }
-]
-[
- {
- "module": "io.helidon.cors",
- "types": [
- {
- "annotatedType": "io.helidon.cors.CrossOriginConfig.Builder",
- "type": "io.helidon.cors.CrossOriginConfig",
- "producers": [
- "io.helidon.cors.CrossOriginConfig.Builder#build()",
- "io.helidon.cors.CrossOriginConfig#create(io.helidon.common.config.Config)"
- ],
- "options": [
- {
- "defaultValue": "{+}",
- "description": "Updates the path prefix for this cross-origin config.",
- "key": "path-pattern",
- "method": "io.helidon.cors.CrossOriginConfig.Builder#pathPattern(java.lang.String)"
- },
- {
- "defaultValue": "*",
- "description": "Sets the allow headers.",
- "key": "allow-headers",
- "kind": "LIST",
- "method": "io.helidon.cors.CrossOriginConfig.Builder#allowHeaders(java.lang.String[])"
- },
- {
- "defaultValue": "3600",
- "description": "Sets the maximum age.",
- "key": "max-age-seconds",
- "method": "io.helidon.cors.CrossOriginConfig.Builder#maxAgeSeconds(long)",
- "type": "java.lang.Long"
- },
- {
- "defaultValue": "false",
- "description": "Sets the allow credentials flag.",
- "key": "allow-credentials",
- "method": "io.helidon.cors.CrossOriginConfig.Builder#allowCredentials(boolean)",
- "type": "java.lang.Boolean"
- },
- {
- "defaultValue": "*",
- "description": "Sets the allowOrigins.",
- "key": "allow-origins",
- "kind": "LIST",
- "method": "io.helidon.cors.CrossOriginConfig.Builder#allowOrigins(java.lang.String[])"
- },
- {
- "description": "Sets the expose headers.",
- "key": "expose-headers",
- "kind": "LIST",
- "method": "io.helidon.cors.CrossOriginConfig.Builder#exposeHeaders(java.lang.String[])"
- },
- {
- "defaultValue": "*",
- "description": "Sets the allow methods.",
- "key": "allow-methods",
- "kind": "LIST",
- "method": "io.helidon.cors.CrossOriginConfig.Builder#allowMethods(java.lang.String[])"
- },
- {
- "defaultValue": "true",
- "description": "Sets whether this config should be enabled or not.",
- "key": "enabled",
- "method": "io.helidon.cors.CrossOriginConfig.Builder#enabled(boolean)",
- "type": "java.lang.Boolean"
- }
- ]
- }
- ]
- }
-]
-[
- {
- "module": "io.helidon.microprofile.server",
- "types": [
- {
- "annotatedType": "io.helidon.microprofile.server.Server.Builder",
- "description": "Configuration of Helidon Microprofile Server",
- "prefix": "server",
- "type": "io.helidon.microprofile.server.Server",
- "standalone": true,
- "producers": [
- "io.helidon.microprofile.server.Server.Builder#build()"
- ],
- "options": [
- {
- "description": "Configure listen port.",
- "key": "port",
- "method": "io.helidon.microprofile.server.Server.Builder#port(int)",
- "type": "java.lang.Integer"
- },
- {
- "description": "Configure listen host.",
- "key": "host",
- "method": "io.helidon.microprofile.server.Server.Builder#host(java.lang.String)"
- }
- ]
- }
- ]
- }
-]
-[
- {
- "module": "io.helidon.microprofile.openapi",
- "types": [
- {
- "annotatedType": "io.helidon.microprofile.openapi.MpOpenApiManagerConfig",
- "type": "io.helidon.microprofile.openapi.MpOpenApiManagerConfig",
- "producers": [
- "io.helidon.microprofile.openapi.MpOpenApiManagerConfig#create(io.helidon.common.config.Config)",
- "io.helidon.microprofile.openapi.MpOpenApiManagerConfig#builder()"
- ],
- "options": [
- {
- "description": "If `true` and the `jakarta.ws.rs.core.Application` class returns a non-empty set, endpoints defined by\n other resources are not included in the OpenAPI document.\n\n @return `true` if enabled, `false` otherwise",
- "key": "mp.openapi.extensions.helidon.use-jaxrs-semantics",
- "method": "io.helidon.microprofile.openapi.MpOpenApiManagerConfig.Builder#useJaxRsSemantics(boolean)",
- "type": "java.lang.Boolean"
- }
- ]
- }
- ]
- }
-]
diff --git a/all/pom.xml b/all/pom.xml
index 58d2d35cba8..009c6cc6f34 100644
--- a/all/pom.xml
+++ b/all/pom.xml
@@ -22,7 +22,7 @@
* The returned list does not contain {@link #annotations()}. If a meta-annotation is present on multiple
* annotations, it will be returned once for each such declaration.
+ *
+ * This method does not return annotations on super types or interfaces!
*
* @return list of all meta annotations of this element
*/
@@ -85,11 +87,10 @@ default Optional
+ * Note: we ignore {@link java.lang.annotation.Target}, {@link java.lang.annotation.Inherited},
+ * {@link java.lang.annotation.Documented}, and {@link java.lang.annotation.Retention}.
+ *
+ * @param annotationType type of annotation
+ * @return {@code true} if the annotation is declared on this annotation, or is inherited from a declared annotation
+ */
+ default boolean hasMetaAnnotation(TypeName annotationType) {
+ return metaAnnotations()
+ .stream()
+ .map(Annotation::typeName)
+ .anyMatch(annotationType::equals);
+ }
}
diff --git a/builder/tests/common-types/src/main/java/io/helidon/common/types/AnnotationSupport.java b/builder/tests/common-types/src/main/java/io/helidon/common/types/AnnotationSupport.java
index 0101b393de7..b21a8a1a917 100644
--- a/builder/tests/common-types/src/main/java/io/helidon/common/types/AnnotationSupport.java
+++ b/builder/tests/common-types/src/main/java/io/helidon/common/types/AnnotationSupport.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2023 Oracle and/or its affiliates.
+ * Copyright (c) 2023, 2024 Oracle and/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.
@@ -532,6 +532,14 @@ private static String asString(TypeName typeName, String property, Object value)
return str;
}
+ if (value instanceof TypeName tn) {
+ return tn.fqName();
+ }
+
+ if (value instanceof EnumValue ev) {
+ return ev.name();
+ }
+
if (value instanceof List>) {
throw new IllegalArgumentException(typeName.fqName() + " property " + property
+ " is a list, cannot be converted to String");
@@ -619,22 +627,30 @@ private static Class> asClass(TypeName typeName, String property, Object value
if (value instanceof Class> theClass) {
return theClass;
}
- if (value instanceof String str) {
- try {
- return Class.forName(str);
- } catch (ClassNotFoundException e) {
+
+ String className = switch (value) {
+ case TypeName tn -> tn.name();
+ case String str -> str;
+ default -> {
throw new IllegalArgumentException(typeName.fqName() + " property " + property
- + " of type String and value \"" + str + "\""
+ + " of type " + value.getClass().getName()
+ " cannot be converted to Class");
}
- }
+ };
- throw new IllegalArgumentException(typeName.fqName() + " property " + property
- + " of type " + value.getClass().getName()
- + " cannot be converted to Class");
+ try {
+ return Class.forName(className);
+ } catch (ClassNotFoundException e) {
+ throw new IllegalArgumentException(typeName.fqName() + " property " + property
+ + " of type String and value \"" + className + "\""
+ + " cannot be converted to Class");
+ }
}
private static TypeName asTypeName(TypeName typeName, String property, Object value) {
+ if (value instanceof TypeName tn) {
+ return tn;
+ }
if (value instanceof Class> theClass) {
return TypeName.create(theClass);
}
@@ -664,6 +680,15 @@ private static
+ * The {@link io.helidon.common.types.TypedElementInfo#signature()} is intended to compare
+ * fields, methods, and constructors across type hierarchy - for example when looking for a method
+ * that we override.
+ *
+ * The following information is used for equals and hash-code:
+ *
+ * This interface is sealed, an instance can only be obtained
+ * from {@link io.helidon.common.types.TypedElementInfo#signature()}.
+ *
+ * @see #text()
+ */
+public sealed interface ElementSignature permits ElementSignatures.FieldSignature,
+ ElementSignatures.MethodSignature,
+ ElementSignatures.ParameterSignature,
+ ElementSignatures.NoSignature {
+ /**
+ * Type of the element. Resolves as follows:
+ *
+ * In such a case, you can use this type when calling {@link io.helidon.common.types.Annotation.Builder#putValue(String, Object)}
+ */
+public interface EnumValue {
+ /**
+ * Create a new enum value, when the enum is not available on classpath.
+ *
+ * @param enumType type of the enumeration
+ * @param enumName value of the enumeration
+ * @return enum value
+ */
+ static EnumValue create(TypeName enumType, String enumName) {
+ Objects.requireNonNull(enumType);
+ Objects.requireNonNull(enumName);
+ return new EnumValueImpl(enumType, enumName);
+ }
+
+ /**
+ * Create a new enum value.
+ *
+ * @param type enum type
+ * @param value enum value constant
+ * @return new enum value
+ * @param \n
",
- "key": "hosts",
- "kind": "LIST",
- "method": "io.helidon.security.providers.common.OutboundTarget.Builder#addHost(java.lang.String)"
- },
- {
- "description": "Configure the name of this outbound target.",
- "key": "name",
- "method": "io.helidon.security.providers.common.OutboundTarget.Builder#name(java.lang.String)",
- "required": true
- },
- {
- "description": "Add supported transports for this target. May be called more than once to add more transports.\n \n
\n There is no wildcard support",
- "key": "transport",
- "kind": "LIST",
- "method": "io.helidon.security.providers.common.OutboundTarget.Builder#addTransport(java.lang.String)"
- }
- ]
- }
- ]
- }
-]
-[
- {
- "module": "io.helidon.security.providers.google.login",
- "types": [
- {
- "annotatedType": "io.helidon.security.providers.google.login.GoogleTokenProvider.Builder",
- "description": "Google Authentication provider",
- "prefix": "google-login",
- "type": "io.helidon.security.providers.google.login.GoogleTokenProvider",
- "producers": [
- "io.helidon.security.providers.google.login.GoogleTokenProvider.Builder#build()",
- "io.helidon.security.providers.google.login.GoogleTokenProvider#create(io.helidon.common.config.Config)"
- ],
- "provides": [
- "io.helidon.security.spi.SecurityProvider",
- "io.helidon.security.spi.AuthenticationProvider"
- ],
- "options": [
- {
- "defaultValue": "false",
- "description": "If set to true, this provider will return io.helidon.security.SecurityResponse.SecurityStatus#ABSTAIN instead\n of failing in case of invalid request.",
- "key": "optional",
- "method": "io.helidon.security.providers.google.login.GoogleTokenProvider.Builder#optional(boolean)",
- "type": "java.lang.Boolean"
- },
- {
- "description": "Set proxy host when talking to Google.",
- "key": "proxy-host",
- "method": "io.helidon.security.providers.google.login.GoogleTokenProvider.Builder#proxyHost(java.lang.String)"
- },
- {
- "description": "Outbound configuration - a set of outbound targets that\n will have the token propagated.",
- "key": "outbound",
- "method": "io.helidon.security.providers.google.login.GoogleTokenProvider.Builder#outboundConfig(io.helidon.security.providers.common.OutboundConfig)",
- "type": "io.helidon.security.providers.common.OutboundConfig"
- },
- {
- "defaultValue": "helidon",
- "description": "Set the authentication realm to build challenge, defaults to \"helidon\".",
- "key": "realm",
- "method": "io.helidon.security.providers.google.login.GoogleTokenProvider.Builder#realm(java.lang.String)"
- },
- {
- "description": "Google application client id, to validate that the token was generated by Google for us.",
- "key": "client-id",
- "method": "io.helidon.security.providers.google.login.GoogleTokenProvider.Builder#clientId(java.lang.String)"
- },
- {
- "defaultValue": "80",
- "description": "Set proxy port when talking to Google.",
- "key": "proxy-port",
- "method": "io.helidon.security.providers.google.login.GoogleTokenProvider.Builder#proxyPort(int)",
- "type": "java.lang.Integer"
- },
- {
- "defaultValue": "`Authorization` header with `bearer` prefix",
- "description": "Token provider to extract Google access token from request, defaults to \"Authorization\" header with a \"bearer \" prefix.",
- "key": "token",
- "method": "io.helidon.security.providers.google.login.GoogleTokenProvider.Builder#tokenProvider(io.helidon.security.util.TokenHandler)",
- "type": "io.helidon.security.util.TokenHandler"
- }
- ]
- }
- ]
- }
-]
-[
- {
- "module": "io.helidon.security.providers.httpauth",
- "types": [
- {
- "annotatedType": "io.helidon.security.providers.httpauth.ConfigUserStore.ConfigUser",
- "type": "io.helidon.security.providers.httpauth.ConfigUserStore.ConfigUser",
- "producers": [
- "io.helidon.security.providers.httpauth.ConfigUserStore.ConfigUser#create(io.helidon.common.config.Config)"
- ],
- "options": [
- {
- "description": "User's password",
- "key": "password"
- },
- {
- "description": "List of roles the user is in",
- "key": "roles",
- "kind": "LIST"
- },
- {
- "description": "User's login",
- "key": "login"
- }
- ]
- },
- {
- "annotatedType": "io.helidon.security.providers.httpauth.HttpBasicAuthProvider.Builder",
- "description": "HTTP Basic Authentication provider",
- "prefix": "http-basic-auth",
- "type": "io.helidon.security.providers.httpauth.HttpBasicAuthProvider",
- "producers": [
- "io.helidon.security.providers.httpauth.HttpBasicAuthProvider.Builder#build()",
- "io.helidon.security.providers.httpauth.HttpBasicAuthProvider#create(io.helidon.common.config.Config)"
- ],
- "provides": [
- "io.helidon.security.spi.SecurityProvider",
- "io.helidon.security.spi.AuthenticationProvider"
- ],
- "options": [
- {
- "description": "Set user store to validate users.\n Removes any other stores added through #addUserStore(SecureUserStore).",
- "key": "users",
- "kind": "LIST",
- "method": "io.helidon.security.providers.httpauth.HttpBasicAuthProvider.Builder#userStore(io.helidon.security.providers.httpauth.SecureUserStore)",
- "type": "io.helidon.security.providers.httpauth.ConfigUserStore.ConfigUser"
- },
- {
- "defaultValue": "false",
- "description": "Whether authentication is required.\n By default, request will fail if the authentication cannot be verified.\n If set to false, request will process and this provider will abstain.",
- "key": "optional",
- "method": "io.helidon.security.providers.httpauth.HttpBasicAuthProvider.Builder#optional(boolean)",
- "type": "java.lang.Boolean"
- },
- {
- "description": "Add a new outbound target to configure identity propagation or explicit username/password.",
- "key": "outbound",
- "kind": "LIST",
- "method": "io.helidon.security.providers.httpauth.HttpBasicAuthProvider.Builder#addOutboundTarget(io.helidon.security.providers.common.OutboundTarget)",
- "type": "io.helidon.security.providers.common.OutboundTarget"
- },
- {
- "defaultValue": "helidon",
- "description": "Set the realm to use when challenging users.",
- "key": "realm",
- "method": "io.helidon.security.providers.httpauth.HttpBasicAuthProvider.Builder#realm(java.lang.String)"
- },
- {
- "defaultValue": "USER",
- "description": "Principal type this provider extracts (and also propagates).",
- "key": "principal-type",
- "method": "io.helidon.security.providers.httpauth.HttpBasicAuthProvider.Builder#subjectType(io.helidon.security.SubjectType)",
- "type": "io.helidon.security.SubjectType",
- "allowedValues": [
- {
- "description": "",
- "value": "USER"
- },
- {
- "description": "",
- "value": "SERVICE"
- }
- ]
- }
- ]
- },
- {
- "annotatedType": "io.helidon.security.providers.httpauth.HttpDigestAuthProvider.Builder",
- "description": "Http digest authentication security provider",
- "prefix": "http-digest-auth",
- "type": "io.helidon.security.providers.httpauth.HttpDigestAuthProvider",
- "producers": [
- "io.helidon.security.providers.httpauth.HttpDigestAuthProvider.Builder#build()",
- "io.helidon.security.providers.httpauth.HttpDigestAuthProvider#create(io.helidon.common.config.Config)"
- ],
- "provides": [
- "io.helidon.security.spi.SecurityProvider",
- "io.helidon.security.spi.AuthenticationProvider"
- ],
- "options": [
- {
- "defaultValue": "NONE",
- "description": "Only `AUTH` supported. If left empty, uses the legacy approach (older RFC version). `AUTH-INT` is not supported.",
- "key": "qop",
- "method": "io.helidon.security.providers.httpauth.HttpDigestAuthProvider.Builder#addDigestQop(io.helidon.security.providers.httpauth.HttpDigest.Qop)",
- "type": "io.helidon.security.providers.httpauth.HttpDigest.Qop",
- "allowedValues": [
- {
- "description": "Legacy approach - used internally to parse headers. Do not use this option when\n building provider. If you want to support only legacy RFC, please use\n HttpDigestAuthProvider.Builder#noDigestQop().\n Only #AUTH is supported, as auth-int requires access to message body.",
- "value": "NONE"
- },
- {
- "description": "QOP \"auth\" - stands for \"authentication\".",
- "value": "AUTH"
- }
- ]
- },
- {
- "description": "Set user store to obtain passwords and roles based on logins.",
- "key": "users",
- "kind": "LIST",
- "method": "io.helidon.security.providers.httpauth.HttpDigestAuthProvider.Builder#userStore(io.helidon.security.providers.httpauth.SecureUserStore)",
- "type": "io.helidon.security.providers.httpauth.ConfigUserStore.ConfigUser"
- },
- {
- "defaultValue": "86400000",
- "description": "How long will the nonce value be valid. When timed-out, browser will re-request username/password.",
- "key": "nonce-timeout-millis",
- "method": "io.helidon.security.providers.httpauth.HttpDigestAuthProvider.Builder#digestNonceTimeout(long, java.util.concurrent.TimeUnit)",
- "type": "java.lang.Long"
- },
- {
- "description": "The nonce is encrypted using this secret - to make sure the nonce we get back was generated by us and to\n make sure we can safely time-out nonce values.\n This secret must be the same for all service instances (or all services that want to share the same authentication).\n Defaults to a random password - e.g. if deployed to multiple servers, the authentication WILL NOT WORK. You MUST\n provide your own password to work in a distributed environment with non-sticky load balancing.",
- "key": "server-secret",
- "method": "io.helidon.security.providers.httpauth.HttpDigestAuthProvider.Builder#digestServerSecret(char[])"
- },
- {
- "defaultValue": "false",
- "description": "Whether authentication is required.\n By default, request will fail if the authentication cannot be verified.\n If set to false, request will process and this provider will abstain.",
- "key": "optional",
- "method": "io.helidon.security.providers.httpauth.HttpDigestAuthProvider.Builder#optional(boolean)",
- "type": "java.lang.Boolean"
- },
- {
- "defaultValue": "Helidon",
- "description": "Set the realm to use when challenging users.",
- "key": "realm",
- "method": "io.helidon.security.providers.httpauth.HttpDigestAuthProvider.Builder#realm(java.lang.String)"
- },
- {
- "defaultValue": "MD5",
- "description": "Digest algorithm to use.",
- "key": "algorithm",
- "method": "io.helidon.security.providers.httpauth.HttpDigestAuthProvider.Builder#digestAlgorithm(io.helidon.security.providers.httpauth.HttpDigest.Algorithm)",
- "type": "io.helidon.security.providers.httpauth.HttpDigest.Algorithm",
- "allowedValues": [
- {
- "description": "MD5 algorithm.",
- "value": "MD5"
- }
- ]
- },
- {
- "defaultValue": "USER",
- "description": "Principal type this provider extracts (and also propagates).",
- "key": "principal-type",
- "method": "io.helidon.security.providers.httpauth.HttpDigestAuthProvider.Builder#subjectType(io.helidon.security.SubjectType)",
- "type": "io.helidon.security.SubjectType",
- "allowedValues": [
- {
- "description": "",
- "value": "USER"
- },
- {
- "description": "",
- "value": "SERVICE"
- }
- ]
- }
- ]
- }
- ]
- }
-]
-[
- {
- "module": "io.helidon.security.providers.header",
- "types": [
- {
- "annotatedType": "io.helidon.security.providers.header.HeaderAtnProvider.Builder",
- "description": "Security provider that extracts a username (or service name) from a header.",
- "prefix": "header-atn",
- "type": "io.helidon.security.providers.header.HeaderAtnProvider",
- "producers": [
- "io.helidon.security.providers.header.HeaderAtnProvider.Builder#build()",
- "io.helidon.security.providers.header.HeaderAtnProvider#create(io.helidon.common.config.Config)"
- ],
- "provides": [
- "io.helidon.security.spi.SecurityProvider",
- "io.helidon.security.spi.AuthenticationProvider"
- ],
- "options": [
- {
- "defaultValue": "true",
- "description": "Whether to authenticate requests.",
- "key": "authenticate",
- "method": "io.helidon.security.providers.header.HeaderAtnProvider.Builder#authenticate(boolean)",
- "type": "java.lang.Boolean"
- },
- {
- "description": "Token handler to extract username from request.",
- "key": "atn-token",
- "method": "io.helidon.security.providers.header.HeaderAtnProvider.Builder#atnTokenHandler(io.helidon.security.util.TokenHandler)",
- "type": "io.helidon.security.util.TokenHandler"
- },
- {
- "defaultValue": "false",
- "description": "Whether authentication is required.\n By default, request will fail if the username cannot be extracted.\n If set to false, request will process and this provider will abstain.",
- "key": "optional",
- "method": "io.helidon.security.providers.header.HeaderAtnProvider.Builder#optional(boolean)",
- "type": "java.lang.Boolean"
- },
- {
- "defaultValue": "false",
- "description": "Whether to propagate identity.",
- "key": "propagate",
- "method": "io.helidon.security.providers.header.HeaderAtnProvider.Builder#propagate(boolean)",
- "type": "java.lang.Boolean"
- },
- {
- "description": "Configure outbound target for identity propagation.",
- "key": "outbound",
- "kind": "LIST",
- "method": "io.helidon.security.providers.header.HeaderAtnProvider.Builder#addOutboundTarget(io.helidon.security.providers.common.OutboundTarget)",
- "type": "io.helidon.security.providers.common.OutboundTarget"
- },
- {
- "description": "Token handler to create outbound headers to propagate identity.\n If not defined, #atnTokenHandler will be used.",
- "key": "outbound-token",
- "method": "io.helidon.security.providers.header.HeaderAtnProvider.Builder#outboundTokenHandler(io.helidon.security.util.TokenHandler)",
- "type": "io.helidon.security.util.TokenHandler"
- },
- {
- "defaultValue": "USER",
- "description": "Principal type this provider extracts (and also propagates).",
- "key": "principal-type",
- "method": "io.helidon.security.providers.header.HeaderAtnProvider.Builder#subjectType(io.helidon.security.SubjectType)",
- "type": "io.helidon.security.SubjectType",
- "allowedValues": [
- {
- "description": "",
- "value": "USER"
- },
- {
- "description": "",
- "value": "SERVICE"
- }
- ]
- }
- ]
- }
- ]
- }
-]
-[
- {
- "module": "io.helidon.openapi.ui",
- "types": [
- {
- "annotatedType": "io.helidon.openapi.ui.OpenApiUiConfig",
- "type": "io.helidon.openapi.ui.OpenApiUi",
- "producers": [
- "io.helidon.openapi.ui.OpenApiUiConfig#create(io.helidon.common.config.Config)",
- "io.helidon.openapi.ui.OpenApiUiConfig#builder()",
- "io.helidon.openapi.ui.OpenApiUi#create(io.helidon.openapi.ui.OpenApiUiConfig)"
- ],
- "options": [
- {
- "description": "Full web context (not just the suffix).\n\n @return full web context path",
- "key": "web-context",
- "method": "io.helidon.openapi.ui.OpenApiUiConfig.Builder#webContext(java.lang.String)"
- },
- {
- "description": "Merges implementation-specific UI options.\n\n @return options for the UI to merge",
- "key": "options",
- "kind": "MAP",
- "method": "io.helidon.openapi.ui.OpenApiUiConfig.Builder#options(java.lang.String)"
- },
- {
- "defaultValue": "true",
- "description": "Sets whether the service should be enabled.\n\n @return `true` if enabled, `false` otherwise",
- "key": "enabled",
- "method": "io.helidon.openapi.ui.OpenApiUiConfig.Builder#isEnabled(java.lang.Boolean)",
- "type": "java.lang.Boolean"
- }
- ]
- }
- ]
- }
-]
-[
- {
- "module": "io.helidon.openapi",
- "types": [
- {
- "annotatedType": "io.helidon.openapi.OpenApiFeatureConfig",
- "prefix": "openapi",
- "type": "io.helidon.openapi.OpenApiFeature",
- "standalone": true,
- "producers": [
- "io.helidon.openapi.OpenApiFeatureConfig#create(io.helidon.common.config.Config)",
- "io.helidon.openapi.OpenApiFeatureConfig#builder()",
- "io.helidon.openapi.OpenApiFeature#create(io.helidon.openapi.OpenApiFeatureConfig)"
- ],
- "provides": [
- "io.helidon.webserver.spi.ServerFeatureProvider"
- ],
- "options": [
- {
- "defaultValue": "/openapi",
- "description": "Web context path for the OpenAPI endpoint.\n\n @return webContext to use",
- "key": "web-context",
- "method": "io.helidon.openapi.OpenApiFeatureConfig.Builder#webContext(java.lang.String)"
- },
- {
- "description": "CORS config.\n\n @return CORS config",
- "key": "cors",
- "method": "io.helidon.openapi.OpenApiFeatureConfig.Builder#cors(java.util.Optional\n
\n \n
\n\n @return format string, such as `%h %l %u %t %r %b %{Referer`i}",
- "key": "format",
- "method": "io.helidon.webserver.accesslog.AccessLogConfig.Builder#format(java.util.Optional\n \n %h \n IP address of the remote host \n HostLogEntry \n \n \n %l \n The client identity. This is always undefined in Helidon. \n UserIdLogEntry \n \n \n %u \n User ID as asserted by Helidon Security. \n UserLogEntry \n \n \n %t \n The timestamp \n TimestampLogEntry \n \n \n %r \n The request line (`\"GET /favicon.ico HTTP/1.0\"`) \n RequestLineLogEntry \n \n \n %s \n The status code returned to the client \n StatusLogEntry \n \n \n %b \n The entity size in bytes \n SizeLogEntry \n \n \n %D \n The time taken in microseconds (start of request until last byte written) \n TimeTakenLogEntry \n \n \n %T \n The time taken in seconds (start of request until last byte written), integer \n TimeTakenLogEntry \n \n \n %{header-name}i \n Value of header `header-name` \n HeaderLogEntry \n \n
\n\n @return set of regular expression patterns for keys, where values should be excluded from output",
- "key": "secrets",
- "kind": "LIST",
- "method": "io.helidon.webserver.observe.config.ConfigObserverConfig.Builder#secrets(java.util.Set
\n If root endpoint is `/observe` (the default), and default health endpoint is `health` (relative),\n health endpoint would be `/observe/health`.\n\n @return endpoint to use",
- "key": "endpoint",
- "method": "io.helidon.webserver.observe.ObserveFeatureConfig.Builder#endpoint(java.lang.String)"
- },
- {
- "description": "Sockets the observability endpoint should be exposed on. If not defined, defaults to the default socket\n ({@value io.helidon.webserver.WebServer#DEFAULT_SOCKET_NAME}.\n Each observer may have its own configuration of sockets that are relevant to it, this only controls the endpoints!\n\n @return list of sockets to register observe endpoint on",
- "key": "sockets",
- "kind": "LIST",
- "method": "io.helidon.webserver.observe.ObserveFeatureConfig.Builder#sockets(java.util.List\n
\n\n @return duration\n @see ISO_8601 Durations",
- "key": "flow-control-timeout",
- "method": "io.helidon.webserver.http2.Http2Config.Builder#flowControlTimeout(java.time.Duration)",
- "type": "java.time.Duration"
- },
- {
- "defaultValue": "true",
- "description": "If set to false, any path is accepted (even containing illegal characters).\n\n @return whether to validate path",
- "key": "validate-path",
- "method": "io.helidon.webserver.http2.Http2Config.Builder#validatePath(boolean)",
- "type": "java.lang.Boolean"
- },
- {
- "defaultValue": "10",
- "description": "Maximum number of consecutive empty frames allowed on connection.\n\n @return max number of consecutive empty frames",
- "key": "max-empty-frames",
- "method": "io.helidon.webserver.http2.Http2Config.Builder#maxEmptyFrames(int)",
- "type": "java.lang.Integer"
- }
- ]
- }
- ]
- }
-]
-[
- {
- "module": "io.helidon.webserver",
- "types": [
- {
- "annotatedType": "io.helidon.webserver.WebServerConfig",
- "prefix": "server",
- "type": "io.helidon.webserver.WebServer",
- "standalone": true,
- "inherits": [
- "io.helidon.webserver.ListenerConfig"
- ],
- "producers": [
- "io.helidon.webserver.WebServerConfig#create(io.helidon.common.config.Config)",
- "io.helidon.webserver.WebServerConfig#builder()",
- "io.helidon.webserver.WebServer#create(io.helidon.webserver.WebServerConfig)"
- ],
- "options": [
- {
- "description": "Server features allow customization of the server, listeners, or routings.\n\n @return server features",
- "key": "features",
- "kind": "LIST",
- "method": "io.helidon.webserver.WebServerConfig.Builder#features(java.util.List \n PT0.1S 100 milliseconds \n PT0.5S 500 milliseconds \n PT2S 2 seconds \n protocols:\n providers:\n http_1_1:\n max-prologue-length: 8192\n http_2:\n max-frame-size: 4096\n websocket:\n ....\n
\n\n @return all defined protocol configurations, loaded from service loader by default",
- "key": "protocols",
- "kind": "LIST",
- "method": "io.helidon.webserver.ListenerConfig.Builder#protocols(java.util.List\n
\n For example, a rate of 20 means that while these conditions are met one thread will be added for every 5 submitted\n tasks.\n \n
\n\n @return whether soft fail is enabled",
- "key": "soft-fail-enabled",
- "method": "io.helidon.common.tls.RevocationConfig.Builder#softFailEnabled(boolean)",
- "type": "java.lang.Boolean"
- },
- {
- "description": "The URI that identifies the location of the OCSP responder. This\n overrides the `ocsp.responderURL` security property and any\n responder specified in a certificate's Authority Information Access\n Extension, as defined in RFC 5280.\n\n @return OCSP responder URI",
- "key": "ocsp-responder-uri",
- "method": "io.helidon.common.tls.RevocationConfig.Builder#ocspResponderUri(java.util.Optional
\n If the primary method for revocation checking fails to verify the revocation status of a certificate\n (such as using a CRL or OCSP), the checker will attempt alternative methods. This option ensures\n whether revocation checking is performed strictly according to the specified method, or should fallback\n to the one less preferred. OCSP is preferred over the CRL by default.\n\n @return whether to allow fallback to the less preferred checking option",
- "key": "fallback-enabled",
- "method": "io.helidon.common.tls.RevocationConfig.Builder#fallbackEnabled(boolean)",
- "type": "java.lang.Boolean"
- },
- {
- "defaultValue": "false",
- "description": "Flag indicating whether this revocation config is enabled.\n\n @return enabled flag",
- "key": "enabled",
- "method": "io.helidon.common.tls.RevocationConfig.Builder#enabled(boolean)",
- "type": "java.lang.Boolean"
- }
- ]
- }
- ]
- }
-]
-[
- {
- "module": "io.helidon.common.socket",
- "types": [
- {
- "annotatedType": "io.helidon.common.socket.SocketOptions",
- "type": "io.helidon.common.socket.SocketOptions",
- "producers": [
- "io.helidon.common.socket.SocketOptions#create(io.helidon.common.config.Config)",
- "io.helidon.common.socket.SocketOptions#builder()"
- ],
- "options": [
- {
- "defaultValue": "PT30S",
- "description": "Socket read timeout. Default is 30 seconds.\n\n @return read timeout duration",
- "key": "read-timeout",
- "method": "io.helidon.common.socket.SocketOptions.Builder#readTimeout(java.time.Duration)",
- "type": "java.time.Duration"
- },
- {
- "description": "Socket send buffer size.\n\n @return buffer size, in bytes\n @see java.net.StandardSocketOptions#SO_SNDBUF",
- "key": "socket-send-buffer-size",
- "method": "io.helidon.common.socket.SocketOptions.Builder#socketSendBufferSize(java.util.Optional
@@ -342,7 +342,7 @@ principal when running it in an oci compute instance.
### Run the application
-1. Default with no profile will use `config_file,instance_principals,resource_principal` authentication strategy
+1. Default with no profile will use `config-file,instance-principals,resource-principal` authentication strategy
```bash
java -jar server/target/{{artifactId}}.jar
```
diff --git a/archetypes/archetypes/src/main/archetype/se/custom/database-output.xml b/archetypes/archetypes/src/main/archetype/se/custom/database-output.xml
index b1eac23deea..7163f50a199 100644
--- a/archetypes/archetypes/src/main/archetype/se/custom/database-output.xml
+++ b/archetypes/archetypes/src/main/archetype/se/custom/database-output.xml
@@ -201,14 +201,12 @@ docker run --rm --name mongo -p 27017:27017 mongo
-
> enumValues(String property, Class<
return AnnotationSupport.asEnums(typeName(), values(), property, type);
}
+ /**
+ * Check if {@link io.helidon.common.types.Annotation#metaAnnotations()} contains an annotation of the provided type.
+ *
+ *
+ *
+ * The signature has well-defined {@code hashCode} and {@code equals} methods,
+ * so it can be safely used as a key in a {@link java.util.Map}.
+ *
+ *
+ *
+ * @return type of this element, never used for equals or hashCode
+ */
+ TypeName type();
+
+ /**
+ * Name of the element. For constructor, this always returns {@code
+ *
+ *
+ * @return text representation
+ */
+ String text();
+}
diff --git a/builder/tests/common-types/src/main/java/io/helidon/common/types/ElementSignatures.java b/builder/tests/common-types/src/main/java/io/helidon/common/types/ElementSignatures.java
new file mode 100644
index 00000000000..4f5be563f29
--- /dev/null
+++ b/builder/tests/common-types/src/main/java/io/helidon/common/types/ElementSignatures.java
@@ -0,0 +1,268 @@
+/*
+ * Copyright (c) 2024 Oracle and/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 io.helidon.common.types;
+
+import java.util.List;
+import java.util.Objects;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+
+final class ElementSignatures {
+ private ElementSignatures() {
+ }
+
+ static ElementSignature createNone() {
+ return new NoSignature();
+ }
+
+ static ElementSignature createField(TypeName type,
+ String name) {
+ Objects.requireNonNull(type);
+ Objects.requireNonNull(name);
+ return new FieldSignature(type, name);
+ }
+
+ static ElementSignature createConstructor(List