You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@camel.apache.org by "Johannes Boßle (Jira)" <ji...@apache.org> on 2023/10/16 14:30:00 UTC

[jira] [Updated] (CAMEL-19996) camel-lra NullPointerException when creating a saga with invalid lra-url

     [ https://issues.apache.org/jira/browse/CAMEL-19996?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Johannes Boßle updated CAMEL-19996:
-----------------------------------
    Component/s: camel-core-processor

> camel-lra NullPointerException when creating a saga with invalid lra-url
> ------------------------------------------------------------------------
>
>                 Key: CAMEL-19996
>                 URL: https://issues.apache.org/jira/browse/CAMEL-19996
>             Project: Camel
>          Issue Type: Bug
>          Components: camel-core-processor, camel-lra
>    Affects Versions: 4.1.0
>            Reporter: Johannes Boßle
>            Priority: Major
>
> There is a NullpointerException occurring, when
>  * you start a new saga (required, automatic completion)
>  * your configured lra is not valid (e.g. you get some arbitrary page from this url)
> As a result, the request never ends and runs infinite.
> {noformat}
> org.apache.camel.service.lra.LRAClient.newLRA()
>   is calling org.apache.camel.service.lra.LRAClient.toURL(Object)
>     -> throw new RuntimeCamelException(ex);
> --> this is kind of expected, but now the error is handled
> the call was initiated by 
> org.apache.camel.processor.saga.RequiredSagaProcessor.process(Exchange, AsyncCallback)
> and ends up finally in 
> org.apache.camel.processor.saga.SagaProcessor.ifNotException(Throwable, Exchange, boolean, CamelSagaCoordinator, CamelSagaCoordinator, AsyncCallback, Runnable) {
>             if (ex != null) {
>                exchange.setException(ex);
>             if (handleCompletion) {
>                 handleSagaCompletion(exchange, coordinator, previousCoordinator, callback);
>             } else {
> Since org.apache.camel.processor.saga.SagaProcessor.handleSagaCompletion(Exchange, CamelSagaCoordinator, CamelSagaCoordinator, AsyncCallback) is called 
> with completionMode == SagaCompletionMode.AUTO
>             if (exchange.getException() != null) {
>                 coordinator.compensate().whenComplete(...
>   coordinator is always null, because newSaga was not yet (sucessfully) executed{noformat}
> Since the NPE occurs during the errorHandling of the invalid URL itself, it is retried to infinity or something else happens, which never retunrs in awaitable time.
>  
> Proposal Fix
> A coordinator should only be null, if there is no saga present yet. So in this case it would be safe to call 
> {noformat}
> callback.done(false){noformat}
> instead of trying to call some methods of the coordinator to rollback.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)