quarkusio/quarkus · error · RuntimeException
Unknown Reactive Sql Client <client>
Error message
Unknown Reactive Sql Client <client>
What it means
OidcDbTokenStateManagerProcessor.produceDbTokenStateManagerBean throws when the selected Reactive SQL client does not match any of the supported clients (PostgreSQL, MySQL, MSSQL, DB2, Oracle). Each supported client requires its own parameter placeholder syntax for building SQL statements.
Source
Thrown at extensions/oidc-db-token-state-manager/deployment/src/main/java/io/quarkus/oidc/db/token/state/manager/OidcDbTokenStateManagerProcessor.java:58
@Record(STATIC_INIT)
@BuildStep
SyntheticBeanBuildItem produceDbTokenStateManagerBean(OidcDbTokenStateManagerRecorder recorder,
ReactiveSqlClientBuildItem sqlClientBuildItem) {
final String[] queryParamPlaceholders;
switch (sqlClientBuildItem.reactiveClient) {
case REACTIVE_PG_CLIENT:
queryParamPlaceholders = new String[] { "$1", "$2", "$3", "$4", "$5", "$6", "$7" };
break;
case REACTIVE_MSSQL_CLIENT:
queryParamPlaceholders = new String[] { "@p1", "@p2", "@p3", "@p4", "@p5", "@p6", "@p7" };
break;
case REACTIVE_MYSQL_CLIENT:
case REACTIVE_DB2_CLIENT:
case REACTIVE_ORACLE_CLIENT:
queryParamPlaceholders = new String[] { "?", "?", "?", "?", "?", "?", "?" };
break;
default:
throw new RuntimeException("Unknown Reactive Sql Client " + sqlClientBuildItem.reactiveClient);
}
String deleteStatement = format("DELETE FROM oidc_db_token_state_manager WHERE id = %s", queryParamPlaceholders[0]);
String getQuery = format(
"SELECT id_token, access_token, refresh_token, access_token_expires_in, access_token_scope FROM oidc_db_token_state_manager WHERE "
+
"id = %s",
queryParamPlaceholders[0]);
String insertStatement = format("INSERT INTO oidc_db_token_state_manager (id_token, access_token, refresh_token," +
" access_token_expires_in, access_token_scope, expires_in, id) VALUES (%s, %s, %s, %s, %s, %s, %s)",
queryParamPlaceholders[0],
queryParamPlaceholders[1],
queryParamPlaceholders[2], queryParamPlaceholders[3], queryParamPlaceholders[4], queryParamPlaceholders[5],
queryParamPlaceholders[6]);
return SyntheticBeanBuildItem
.configure(OidcDbTokenStateManager.class)
.alternative(true)
.priority(1)
.addType(TokenStateManager.class)View on GitHub (pinned to e1c734241f)
Solutions
- Use one of the supported reactive SQL clients: PostgreSQL, MySQL, MSSQL, DB2, or Oracle
- Check which reactive SQL client extensions are present and remove the unsupported one
- Upgrade quarkus-oidc-db-token-state-manager to a version supporting your client
Example fix
// before dependencies: quarkus-reactive-<unsupported>-client only // after add io.quarkus:quarkus-reactive-pg-client (or mysql/mssql/db2/oracle)
Defensive patterns
Strategy: validation
Validate before calling
Set<ReactiveSqlClient> supported = Set.of(REACTIVE_PG_CLIENT, REACTIVE_MYSQL_CLIENT,
REACTIVE_MSSQL_CLIENT, REACTIVE_DB2_CLIENT, REACTIVE_ORACLE_CLIENT);
if (!supported.contains(reactiveClient)) {
throw new IllegalArgumentException("Unsupported reactive SQL client: " + reactiveClient);
} Prevention
- Pin application dependencies to supported reactive SQL clients only
- Check extension compatibility after Quarkus upgrades
- Avoid pulling multiple database extensions transitively
When it happens
Trigger: The detected ReactiveSqlClientBuildItem.reactiveClient is not one of REACTIVE_PG_CLIENT, REACTIVE_MYSQL_CLIENT, REACTIVE_MSSQL_CLIENT, REACTIVE_DB2_CLIENT, REACTIVE_ORACLE_CLIENT in the switch/default in the bean producer.
Common situations: A new/unsupported reactive SQL client extension is on the classpath and wins detection; internal wiring passes an unexpected enum value; future Quarkus versions add new client types not yet handled by this extension.
Related errors
- The '%s' property can only be set to 'idtoken' for WEB_APP a
- '%s' must be enabled to use '%s'
- UserInfo is required but DefaultTokenStateManager is configu
- Access token is required to check the roles but DefaultToken
- UserInfo path is missing but 'verifyAccessTokenWithUserInfo'
AI-assisted analysis of quarkusio/quarkus@e1c734241f (2026-09-05).
Data as JSON: /api/errors/7e7b23f7260f3ea5.
Report an issue: GitHub.