[
https://issues.apache.org/jira/browse/CAMEL-26704?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Work on CAMEL-26704 started by shashank.
----------------------------------------
> camel-sql - DefaultJdbcOptimisticLockingExceptionMapper throws
> NullPointerException for an SQLException without SQLState
> ------------------------------------------------------------------------------------------------------------------------
>
> Key: CAMEL-26704
> URL: https://issues.apache.org/jira/browse/CAMEL-26704
> Project: Camel
> Issue Type: Bug
> Components: camel-sql
> Reporter: shashank
> Assignee: shashank
> Priority: Major
>
> {{DefaultJdbcOptimisticLockingExceptionMapper.isConstraintViolation}} calls
> {{e.getSQLState().startsWith("23")}}. The SQLState is optional in JDBC, and
> connection pools can report a pool timeout without one (Agroal, and
> HikariCP's {{SQLTransientConnectionException}} when the pool is exhausted).
> The mapper walks the cause chain from the root cause up, so the first
> {{SQLException}} without SQLState throws a {{NullPointerException}} out of
> {{isOptimisticLocking}}, before the {{DataIntegrityViolationException}} and
> class-name checks run. The only caller is the {{catch}} in
> {{JdbcAggregationRepository.add(camelContext, key, oldExchange,
> newExchange)}} (aggregate EIP with {{optimisticLocking}}). There the NPE
> replaces the real exception: it has no cause, so the SQL error is lost and
> {{onException(SQLException.class)}} (for example with redeliveries for
> transient database errors) no longer matches.
> {code:java}
> SQLException e = new SQLTransientConnectionException("Connection is not
> available, request timed out");
> new DefaultJdbcOptimisticLockingExceptionMapper().isOptimisticLocking(new
> CannotCreateTransactionException("Could not open connection", e));
> // NullPointerException: Cannot invoke "String.startsWith(String)" because
> the return value of "java.sql.SQLException.getSQLState()" is null
> {code}
> Expected: an {{SQLException}} without SQLState is not a constraint violation,
> and the other checks still run.
> Suggested fix: a null check in {{isConstraintViolation}}; no other change.
> _Filed with Claude Code on behalf of allthingssecurity._
--
This message was sent by Atlassian Jira
(v10.3.26#10030026)