[ 
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)

Reply via email to