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

Otavio Rodolfo Piske updated CAMEL-19607:
-----------------------------------------
    Description: 
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]

  was:
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`
```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;
    }
```

from `DefaultErrorHandlerDefinition`
```java
    public RedeliveryPolicyDefinition getRedeliveryPolicy() {
        if (redeliveryPolicy == null) {
            redeliveryPolicy = createRedeliveryPolicy();
        }
        return redeliveryPolicy;
    }
```

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`

```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;
    }
```

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


> Checking redelivery reference while error handler creation
> ----------------------------------------------------------
>
>                 Key: CAMEL-19607
>                 URL: https://issues.apache.org/jira/browse/CAMEL-19607
>             Project: Camel
>          Issue Type: Bug
>    Affects Versions: 3.20.6
>            Reporter: Dmitrii Antonov
>            Priority: Minor
>
> 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)

Reply via email to