You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@camel.apache.org by "Claus Ibsen (Jira)" <ji...@apache.org> on 2023/07/14 20:12:00 UTC

[jira] [Commented] (CAMEL-19607) camel-core - Checking redelivery reference while error handler creation

    [ https://issues.apache.org/jira/browse/CAMEL-19607?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17743278#comment-17743278 ] 

Claus Ibsen commented on CAMEL-19607:
-------------------------------------

Thanks for reporting, yeah this looks wrong at first sight

> camel-core - Checking redelivery reference while error handler creation
> -----------------------------------------------------------------------
>
>                 Key: CAMEL-19607
>                 URL: https://issues.apache.org/jira/browse/CAMEL-19607
>             Project: Camel
>          Issue Type: Bug
>          Components: camel-core
>    Affects Versions: 3.20.6
>            Reporter: Dmitrii Antonov
>            Assignee: Claus Ibsen
>            Priority: Minor
>             Fix For: 3.20.7, 3.21.1, 3.22.0, 4.0.0, 4.0-RC2
>
>
> The default error handler can have a reference to a redelivery policy, but the `DefaultErrorHandlerReifier` first calls the getter `getRedeliveryPolicy()`, which always returns or creates a redelivery policy.
> from `DefaultErrorHandlerReifier`
> {code:java}
>     private RedeliveryPolicy resolveRedeliveryPolicy(DefaultErrorHandlerDefinition definition, CamelContext camelContext) {
>         RedeliveryPolicy answer = null;
>         RedeliveryPolicyDefinition def = definition.getRedeliveryPolicy(); // THIS ROW
>         if (def != null)
> {             answer = ErrorHandlerReifier.createRedeliveryPolicy(def, camelContext, null);         }
>         if (def == null && definition.getRedeliveryPolicyRef() != null) {             answer = mandatoryLookup(definition.getRedeliveryPolicyRef(), RedeliveryPolicy.class);         }
>         if (answer == null) {             answer = RedeliveryPolicy.DEFAULT_POLICY;         }
>         return answer;
>     }
> {code}
> from `DefaultErrorHandlerDefinition`
> {code:java}
>     public RedeliveryPolicyDefinition getRedeliveryPolicy() {
>         if (redeliveryPolicy == null) {             redeliveryPolicy = createRedeliveryPolicy();         }
>         return redeliveryPolicy;
>     }{code}
> That is, the execution will never reach the check of the code for the presence of a link. Therefore, I assume that the link to the redelivery policy does not work in the default handler.
> I assume a similar problem in other types of handlers with redeliverty, for example, in `DeadLetterChannelReifier`
>    
> {code:java}
> private RedeliveryPolicy resolveRedeliveryPolicy(DeadLetterChannelDefinition definition, CamelContext camelContext) {
>         RedeliveryPolicy answer = null;
>         RedeliveryPolicyDefinition def = definition.getRedeliveryPolicy();
>         if (def == null && definition.getRedeliveryPolicyRef() != null) {  // FIRST CHECK THE REF!!             // ref may point to a definition             def = lookupByNameAndType(definition.getRedeliveryPolicyRef(), RedeliveryPolicyDefinition.class);         }
>         if (def != null) {             answer = ErrorHandlerReifier.createRedeliveryPolicy(def, camelContext, null);         }
>  
>         if (def == null && definition.getRedeliveryPolicyRef() != null)
> {             answer = mandatoryLookup(definition.getRedeliveryPolicyRef(), RedeliveryPolicy.class);         }
>         if (answer == null)
> {             answer = RedeliveryPolicy.DEFAULT_POLICY;         }
>         return answer;
>     }
> {code}
> it inherits `DefaultErrorHandlerDefinition` without overriding `getRedeliveryPolicy`
> ```java
> public class DeadLetterChannelDefinition extends DefaultErrorHandlerDefinition
> ```
>  
> [https://camel.zulipchat.com/#narrow/stream/257298-camel/topic/Possible.20bug.20while.20checking.20redelivery.20reference]



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