values, String prefix) {
}
}
- // Reflection helpers for JDK 20+ SSLParameters.getNamedGroups()/getSignatureSchemes()
- // These methods are not available with --release 17 compilation target
- private static String[] getNamedGroups(SSLParameters params) throws Exception {
- Method m = SSLParameters.class.getMethod("getNamedGroups");
- return (String[]) m.invoke(params);
- }
-
- private static String[] getSignatureSchemes(SSLParameters params) throws Exception {
- Method m = SSLParameters.class.getMethod("getSignatureSchemes");
- return (String[]) m.invoke(params);
- }
}
diff --git a/core/camel-main/src/generated/resources/META-INF/camel-main-configuration-metadata.json b/core/camel-main/src/generated/resources/META-INF/camel-main-configuration-metadata.json
index cd2101ee33b79..ddd3fcbbdbe87 100644
--- a/core/camel-main/src/generated/resources/META-INF/camel-main-configuration-metadata.json
+++ b/core/camel-main/src/generated/resources/META-INF/camel-main-configuration-metadata.json
@@ -474,19 +474,19 @@
{ "name": "camel.ssl.cipherSuitesInclude", "required": false, "description": "Filters TLS\/SSL cipher suites algorithms names. This filter is used for including algorithms that matches the naming pattern. Multiple names can be separated by comma. Notice that if the cipherSuites option has been configured then the include\/exclude filters are not in use.", "sourceType": "org.apache.camel.main.SSLConfigurationProperties", "type": "string", "javaType": "java.lang.String", "secret": false },
{ "name": "camel.ssl.clientAuthentication", "required": false, "description": "Sets the configuration for server-side client-authentication requirements", "sourceType": "org.apache.camel.main.SSLConfigurationProperties", "type": "enum", "javaType": "java.lang.String", "defaultValue": "NONE", "secret": false, "enum": [ "NONE", "WANT", "REQUIRE" ] },
{ "name": "camel.ssl.enabled", "required": false, "description": "Enables SSL in your Camel application.", "sourceType": "org.apache.camel.main.SSLConfigurationProperties", "type": "boolean", "javaType": "boolean", "defaultValue": false, "secret": false },
- { "name": "camel.ssl.keyManagerAlgorithm", "required": false, "description": "Algorithm name used for creating the KeyManagerFactory. See https:\/\/docs.oracle.com\/en\/java\/javase\/17\/docs\/specs\/security\/standard-names.html", "sourceType": "org.apache.camel.main.SSLConfigurationProperties", "type": "string", "javaType": "java.lang.String", "secret": false },
+ { "name": "camel.ssl.keyManagerAlgorithm", "required": false, "description": "Algorithm name used for creating the KeyManagerFactory. See https:\/\/docs.oracle.com\/en\/java\/javase\/21\/docs\/specs\/security\/standard-names.html", "sourceType": "org.apache.camel.main.SSLConfigurationProperties", "type": "string", "javaType": "java.lang.String", "secret": false },
{ "name": "camel.ssl.keyManagerProvider", "required": false, "description": "To use a specific provider for creating KeyManagerFactory. The list of available providers returned by java.security.Security.getProviders() or null to use the highest priority provider implementing the secure socket protocol.", "sourceType": "org.apache.camel.main.SSLConfigurationProperties", "type": "string", "javaType": "java.lang.String", "secret": false },
{ "name": "camel.ssl.keyStore", "required": false, "description": "The key store to load. The key store is by default loaded from classpath. If you must load from file system, then use file: as prefix. file:nameOfFile (to refer to the file system) classpath:nameOfFile (to refer to the classpath; default) http:uri (to load the resource using HTTP) ref:nameOfBean (to lookup an existing KeyStore instance from the registry, for example for testing and development).", "sourceType": "org.apache.camel.main.SSLConfigurationProperties", "type": "string", "javaType": "java.lang.String", "secret": false },
{ "name": "camel.ssl.keystorePassword", "required": false, "description": "Sets the SSL Keystore password.", "sourceType": "org.apache.camel.main.SSLConfigurationProperties", "type": "string", "javaType": "java.lang.String", "secret": true, "security": "secret" },
{ "name": "camel.ssl.keyStoreProvider", "required": false, "description": "To use a specific provider for creating KeyStore. The list of available providers returned by java.security.Security.getProviders() or null to use the highest priority provider implementing the secure socket protocol.", "sourceType": "org.apache.camel.main.SSLConfigurationProperties", "type": "string", "javaType": "java.lang.String", "secret": false },
- { "name": "camel.ssl.keyStoreType", "required": false, "description": "The type of the key store to load. See https:\/\/docs.oracle.com\/en\/java\/javase\/17\/docs\/specs\/security\/standard-names.html", "sourceType": "org.apache.camel.main.SSLConfigurationProperties", "type": "string", "javaType": "java.lang.String", "secret": false },
+ { "name": "camel.ssl.keyStoreType", "required": false, "description": "The type of the key store to load. See https:\/\/docs.oracle.com\/en\/java\/javase\/21\/docs\/specs\/security\/standard-names.html", "sourceType": "org.apache.camel.main.SSLConfigurationProperties", "type": "string", "javaType": "java.lang.String", "secret": false },
{ "name": "camel.ssl.namedGroups", "required": false, "description": "List of TLS\/SSL named groups (key exchange groups). Multiple names can be separated by comma. Named groups control which key exchange algorithms are available during the TLS handshake, including post-quantum hybrid groups such as X25519MLKEM768.", "sourceType": "org.apache.camel.main.SSLConfigurationProperties", "type": "string", "javaType": "java.lang.String", "secret": false },
{ "name": "camel.ssl.namedGroupsExclude", "required": false, "description": "Filters TLS\/SSL named groups. This filter is used for excluding named groups that match the naming pattern. Multiple names can be separated by comma. Notice that if the namedGroups option has been configured then the include\/exclude filters are not in use.", "sourceType": "org.apache.camel.main.SSLConfigurationProperties", "type": "string", "javaType": "java.lang.String", "secret": false },
{ "name": "camel.ssl.namedGroupsInclude", "required": false, "description": "Filters TLS\/SSL named groups. This filter is used for including named groups that match the naming pattern. Multiple names can be separated by comma. Notice that if the namedGroups option has been configured then the include\/exclude filters are not in use.", "sourceType": "org.apache.camel.main.SSLConfigurationProperties", "type": "string", "javaType": "java.lang.String", "secret": false },
{ "name": "camel.ssl.provider", "required": false, "description": "To use a specific provider for creating SSLContext. The list of available providers returned by java.security.Security.getProviders() or null to use the highest priority provider implementing the secure socket protocol.", "sourceType": "org.apache.camel.main.SSLConfigurationProperties", "type": "string", "javaType": "java.lang.String", "secret": false },
- { "name": "camel.ssl.secureRandomAlgorithm", "required": false, "description": "Algorithm name used for creating the SecureRandom. See https:\/\/docs.oracle.com\/en\/java\/javase\/17\/docs\/specs\/security\/standard-names.html", "sourceType": "org.apache.camel.main.SSLConfigurationProperties", "type": "string", "javaType": "java.lang.String", "secret": false },
+ { "name": "camel.ssl.secureRandomAlgorithm", "required": false, "description": "Algorithm name used for creating the SecureRandom. See https:\/\/docs.oracle.com\/en\/java\/javase\/21\/docs\/specs\/security\/standard-names.html", "sourceType": "org.apache.camel.main.SSLConfigurationProperties", "type": "string", "javaType": "java.lang.String", "secret": false },
{ "name": "camel.ssl.secureRandomProvider", "required": false, "description": "To use a specific provider for creating SecureRandom. The list of available providers returned by java.security.Security.getProviders() or null to use the highest priority provider implementing the secure socket protocol.", "sourceType": "org.apache.camel.main.SSLConfigurationProperties", "type": "string", "javaType": "java.lang.String", "secret": false },
- { "name": "camel.ssl.secureSocketProtocol", "required": false, "description": "The protocol for the secure sockets created by the SSLContext. See https:\/\/docs.oracle.com\/en\/java\/javase\/17\/docs\/specs\/security\/standard-names.html", "sourceType": "org.apache.camel.main.SSLConfigurationProperties", "type": "string", "javaType": "java.lang.String", "defaultValue": "TLSv1.3", "secret": false },
+ { "name": "camel.ssl.secureSocketProtocol", "required": false, "description": "The protocol for the secure sockets created by the SSLContext. See https:\/\/docs.oracle.com\/en\/java\/javase\/21\/docs\/specs\/security\/standard-names.html", "sourceType": "org.apache.camel.main.SSLConfigurationProperties", "type": "string", "javaType": "java.lang.String", "defaultValue": "TLSv1.3", "secret": false },
{ "name": "camel.ssl.selfSigned", "required": false, "description": "Whether to generate a self-signed certificate for development use when no keystore is configured. This can be used in development environment to easily enable HTTPS without providing a keystore. Do NOT use this in production as the certificate is not trusted and is regenerated on each restart.", "sourceType": "org.apache.camel.main.SSLConfigurationProperties", "type": "boolean", "javaType": "boolean", "defaultValue": false, "secret": false },
{ "name": "camel.ssl.selfSignedKeyType", "required": false, "description": "The key algorithm to use when generating the self-signed certificate for development use (requires selfSigned to be enabled). Supported values are EC (default, NIST P-256) and RSA (2048-bit).", "sourceType": "org.apache.camel.main.SSLConfigurationProperties", "type": "enum", "javaType": "java.lang.String", "defaultValue": "EC", "secret": false, "enum": [ "EC", "RSA" ] },
{ "name": "camel.ssl.sessionTimeout", "required": false, "description": "Timeout in seconds to use for SSLContext. The default is 24 hours.", "sourceType": "org.apache.camel.main.SSLConfigurationProperties", "type": "integer", "javaType": "int", "defaultValue": 86400, "secret": false },
diff --git a/core/camel-main/src/main/docs/main.adoc b/core/camel-main/src/main/docs/main.adoc
index a780e2eabb675..75306c4f9e1f1 100644
--- a/core/camel-main/src/main/docs/main.adoc
+++ b/core/camel-main/src/main/docs/main.adoc
@@ -356,19 +356,19 @@ The camel.ssl supports 28 options, which are listed below.
| `camel.ssl.cipherSuitesInclude` | Filters TLS/SSL cipher suites algorithms names. This filter is used for including algorithms that matches the naming pattern. Multiple names can be separated by comma. Notice that if the cipherSuites option has been configured then the include/exclude filters are not in use. | | String
| `camel.ssl.clientAuthentication` | Sets the configuration for server-side client-authentication requirements | NONE | String
| `camel.ssl.enabled` | Enables SSL in your Camel application. | false | boolean
-| `camel.ssl.keyManagerAlgorithm` | Algorithm name used for creating the KeyManagerFactory. See \https://docs.oracle.com/en/java/javase/17/docs/specs/security/standard-names.html | | String
+| `camel.ssl.keyManagerAlgorithm` | Algorithm name used for creating the KeyManagerFactory. See \https://docs.oracle.com/en/java/javase/21/docs/specs/security/standard-names.html | | String
| `camel.ssl.keyManagerProvider` | To use a specific provider for creating KeyManagerFactory. The list of available providers returned by java.security.Security.getProviders() or null to use the highest priority provider implementing the secure socket protocol. | | String
| `camel.ssl.keyStore` | The key store to load. The key store is by default loaded from classpath. If you must load from file system, then use file: as prefix. file:nameOfFile (to refer to the file system) classpath:nameOfFile (to refer to the classpath; default) http:uri (to load the resource using HTTP) ref:nameOfBean (to lookup an existing KeyStore instance from the registry, for example for testing and development). | | String
| `camel.ssl.keystorePassword` | Sets the SSL Keystore password. | | String
| `camel.ssl.keyStoreProvider` | To use a specific provider for creating KeyStore. The list of available providers returned by java.security.Security.getProviders() or null to use the highest priority provider implementing the secure socket protocol. | | String
-| `camel.ssl.keyStoreType` | The type of the key store to load. See \https://docs.oracle.com/en/java/javase/17/docs/specs/security/standard-names.html | | String
+| `camel.ssl.keyStoreType` | The type of the key store to load. See \https://docs.oracle.com/en/java/javase/21/docs/specs/security/standard-names.html | | String
| `camel.ssl.namedGroups` | List of TLS/SSL named groups (key exchange groups). Multiple names can be separated by comma. Named groups control which key exchange algorithms are available during the TLS handshake, including post-quantum hybrid groups such as X25519MLKEM768. | | String
| `camel.ssl.namedGroupsExclude` | Filters TLS/SSL named groups. This filter is used for excluding named groups that match the naming pattern. Multiple names can be separated by comma. Notice that if the namedGroups option has been configured then the include/exclude filters are not in use. | | String
| `camel.ssl.namedGroupsInclude` | Filters TLS/SSL named groups. This filter is used for including named groups that match the naming pattern. Multiple names can be separated by comma. Notice that if the namedGroups option has been configured then the include/exclude filters are not in use. | | String
| `camel.ssl.provider` | To use a specific provider for creating SSLContext. The list of available providers returned by java.security.Security.getProviders() or null to use the highest priority provider implementing the secure socket protocol. | | String
-| `camel.ssl.secureRandomAlgorithm` | Algorithm name used for creating the SecureRandom. See \https://docs.oracle.com/en/java/javase/17/docs/specs/security/standard-names.html | | String
+| `camel.ssl.secureRandomAlgorithm` | Algorithm name used for creating the SecureRandom. See \https://docs.oracle.com/en/java/javase/21/docs/specs/security/standard-names.html | | String
| `camel.ssl.secureRandomProvider` | To use a specific provider for creating SecureRandom. The list of available providers returned by java.security.Security.getProviders() or null to use the highest priority provider implementing the secure socket protocol. | | String
-| `camel.ssl.secureSocketProtocol` | The protocol for the secure sockets created by the SSLContext. See \https://docs.oracle.com/en/java/javase/17/docs/specs/security/standard-names.html | TLSv1.3 | String
+| `camel.ssl.secureSocketProtocol` | The protocol for the secure sockets created by the SSLContext. See \https://docs.oracle.com/en/java/javase/21/docs/specs/security/standard-names.html | TLSv1.3 | String
| `camel.ssl.selfSigned` | Whether to generate a self-signed certificate for development use when no keystore is configured. This can be used in development environment to easily enable HTTPS without providing a keystore. Do NOT use this in production as the certificate is not trusted and is regenerated on each restart. | false | boolean
| `camel.ssl.selfSignedKeyType` | The key algorithm to use when generating the self-signed certificate for development use (requires selfSigned to be enabled). Supported values are EC (default, NIST P-256) and RSA (2048-bit). | EC | String
| `camel.ssl.sessionTimeout` | Timeout in seconds to use for SSLContext. The default is 24 hours. | 86400 | int
diff --git a/core/camel-main/src/main/java/org/apache/camel/main/SSLConfigurationProperties.java b/core/camel-main/src/main/java/org/apache/camel/main/SSLConfigurationProperties.java
index 24ace35c44416..1b62137a90106 100644
--- a/core/camel-main/src/main/java/org/apache/camel/main/SSLConfigurationProperties.java
+++ b/core/camel-main/src/main/java/org/apache/camel/main/SSLConfigurationProperties.java
@@ -130,7 +130,7 @@ public String getSecureSocketProtocol() {
/**
* The protocol for the secure sockets created by the SSLContext.
*
- * See https://docs.oracle.com/en/java/javase/17/docs/specs/security/standard-names.html
+ * See https://docs.oracle.com/en/java/javase/21/docs/specs/security/standard-names.html
*/
public void setSecureSocketProtocol(String secureSocketProtocol) {
this.secureSocketProtocol = secureSocketProtocol;
@@ -317,7 +317,7 @@ public String getKeyStoreType() {
/**
* The type of the key store to load.
*
- * See https://docs.oracle.com/en/java/javase/17/docs/specs/security/standard-names.html
+ * See https://docs.oracle.com/en/java/javase/21/docs/specs/security/standard-names.html
*/
public void setKeyStoreType(String keyStoreType) {
this.keyStoreType = keyStoreType;
@@ -422,7 +422,7 @@ public String getKeyManagerAlgorithm() {
/**
* Algorithm name used for creating the KeyManagerFactory.
*
- * See https://docs.oracle.com/en/java/javase/17/docs/specs/security/standard-names.html
+ * See https://docs.oracle.com/en/java/javase/21/docs/specs/security/standard-names.html
*/
public void setKeyManagerAlgorithm(String keyManagerAlgorithm) {
this.keyManagerAlgorithm = keyManagerAlgorithm;
@@ -449,7 +449,7 @@ public String getSecureRandomAlgorithm() {
/**
* Algorithm name used for creating the SecureRandom.
*
- * See https://docs.oracle.com/en/java/javase/17/docs/specs/security/standard-names.html
+ * See https://docs.oracle.com/en/java/javase/21/docs/specs/security/standard-names.html
*/
public void setSecureRandomAlgorithm(String secureRandomAlgorithm) {
this.secureRandomAlgorithm = secureRandomAlgorithm;
@@ -502,7 +502,7 @@ public SSLConfigurationProperties withProvider(String provider) {
/**
* The optional protocol for the secure sockets created by the SSLContext.
*
- * See https://docs.oracle.com/en/java/javase/17/docs/specs/security/standard-names.html
+ * See https://docs.oracle.com/en/java/javase/21/docs/specs/security/standard-names.html
*/
public SSLConfigurationProperties withSecureSocketProtocol(String secureSocketProtocol) {
this.secureSocketProtocol = secureSocketProtocol;
@@ -650,7 +650,7 @@ public SSLConfigurationProperties withKeyStore(String keyStore) {
/**
* The type of the key store to load.
*
- * See https://docs.oracle.com/en/java/javase/17/docs/specs/security/standard-names.html
+ * See https://docs.oracle.com/en/java/javase/21/docs/specs/security/standard-names.html
*/
public SSLConfigurationProperties withKeyStoreType(String keyStoreType) {
this.keyStoreType = keyStoreType;
@@ -731,7 +731,7 @@ public SSLConfigurationProperties withSelfSignedKeyType(String selfSignedKeyType
/**
* Algorithm name used for creating the KeyManagerFactory.
*
- * See https://docs.oracle.com/en/java/javase/17/docs/specs/security/standard-names.html
+ * See https://docs.oracle.com/en/java/javase/21/docs/specs/security/standard-names.html
*/
public SSLConfigurationProperties withKeyManagerAlgorithm(String keyManagerAlgorithm) {
this.keyManagerAlgorithm = keyManagerAlgorithm;
@@ -752,7 +752,7 @@ public SSLConfigurationProperties withKeyManagerProvider(String keyManagerProvid
/**
* Algorithm name used for creating the SecureRandom.
*
- * See https://docs.oracle.com/en/java/javase/17/docs/specs/security/standard-names.html
+ * See https://docs.oracle.com/en/java/javase/21/docs/specs/security/standard-names.html
*/
public SSLConfigurationProperties withSecureRandomAlgorithm(String secureRandomAlgorithm) {
this.secureRandomAlgorithm = secureRandomAlgorithm;
diff --git a/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedAsyncProcessorAwaitManager.java b/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedAsyncProcessorAwaitManager.java
index a209b900e1e8c..7beddc6769e24 100644
--- a/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedAsyncProcessorAwaitManager.java
+++ b/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedAsyncProcessorAwaitManager.java
@@ -82,9 +82,7 @@ public TabularData browse() {
private static CompositeData toCompositeData(AsyncProcessorAwaitManager.AwaitThread entry, CompositeType ct)
throws OpenDataException {
- // TODO Update once baseline is Java 21
- // String id = Long.toString(entry.getBlockedThread().threadId());
- String id = Long.toString(entry.getBlockedThread().getId());
+ String id = Long.toString(entry.getBlockedThread().threadId());
String name = entry.getBlockedThread().getName();
String exchangeId = entry.getExchange().getExchangeId();
String routeId = entry.getRouteId();
diff --git a/core/camel-management/src/test/java/org/apache/camel/management/ManagedVirtualThreadExecutorTest.java b/core/camel-management/src/test/java/org/apache/camel/management/ManagedVirtualThreadExecutorTest.java
index f93bf97591c6d..d72184346268f 100644
--- a/core/camel-management/src/test/java/org/apache/camel/management/ManagedVirtualThreadExecutorTest.java
+++ b/core/camel-management/src/test/java/org/apache/camel/management/ManagedVirtualThreadExecutorTest.java
@@ -26,15 +26,12 @@
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.spi.LifecycleStrategy;
import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.condition.EnabledForJreRange;
-import org.junit.jupiter.api.condition.JRE;
import static org.apache.camel.management.DefaultManagementObjectNameStrategy.TYPE_THREAD_POOL;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;
-@EnabledForJreRange(min = JRE.JAVA_21)
public class ManagedVirtualThreadExecutorTest extends ManagementTestSupport {
private ExecutorService vte;
diff --git a/core/camel-util/pom.xml b/core/camel-util/pom.xml
index ac2fcea60d31e..0f9fe6b66e0fe 100644
--- a/core/camel-util/pom.xml
+++ b/core/camel-util/pom.xml
@@ -92,6 +92,17 @@