You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@camel.apache.org by "Dmitrii Antonov (Jira)" <ji...@apache.org> on 2023/07/14 10:47:00 UTC
[jira] [Updated] (CAMEL-19607) Checking redelivery reference while error handler creation
[ https://issues.apache.org/jira/browse/CAMEL-19607?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Dmitrii Antonov updated CAMEL-19607:
------------------------------------
Summary: Checking redelivery reference while error handler creation (was: Checking redelivery reference in error handlers)
> 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`
> ```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
--
This message was sent by Atlassian Jira
(v8.20.10#820010)