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 2026/07/11 17:37:00 UTC

[jira] [Updated] (CAMEL-23981) camel-yaml-dsl - springTransactionErrorHandler constructs JtaTransactionErrorHandlerDefinition instead of SpringTransactionErrorHandlerDefinition

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

Claus Ibsen updated CAMEL-23981:
--------------------------------
    Fix Version/s: 4.22.0

> camel-yaml-dsl - springTransactionErrorHandler constructs JtaTransactionErrorHandlerDefinition instead of SpringTransactionErrorHandlerDefinition
> -------------------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: CAMEL-23981
>                 URL: https://issues.apache.org/jira/browse/CAMEL-23981
>             Project: Camel
>          Issue Type: Bug
>          Components: camel-yaml-dsl
>    Affects Versions: 4.21.0
>            Reporter: Federico Mariani
>            Assignee: Claus Ibsen
>            Priority: Major
>             Fix For: 4.22.0
>
>
> In {{ErrorHandlerDeserializer}} ({{dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/ErrorHandlerDeserializer.java}}, lines 112-114) both keys fall into the same switch case:
> {code:java}
> case "jtaTransactionErrorHandler":
> case "springTransactionErrorHandler":
>     factory = asType(val, JtaTransactionErrorHandlerDefinition.class);
>     break;
> {code}
> However the {{@YamlProperty}} annotation on the same class (lines 68-70) declares {{springTransactionErrorHandler}} as {{object:org.apache.camel.model.errorhandler.SpringTransactionErrorHandlerDefinition}}, that class exists in camel-core-model, and camel-spring registers its error-handler reifier for exactly that class ({{SpringTransactionPolicy.java:54}}).
> {{ErrorHandlerReifier.reifier()}} looks up reifiers by *exact* definition class ({{ERROR_HANDLERS.get(definition.getClass())}}) and the core fallback only covers deadLetterChannel/default/no/ref. Consequences of the YAML DSL producing the JTA definition:
> * Spring application without camel-jta: startup fails with {{IllegalStateException: Unsupported definition}} (only camel-spring registered a reifier, but for the Spring definition class).
> * camel-jta present: silently uses JTA transaction semantics instead of the Spring transaction manager the user asked for.
> The case merge was introduced by CAMEL-20568 ({{c0228d4f12c6}}) with no comment justifying it, and there is no YAML test covering {{springTransactionErrorHandler}}.
> Fix: split the case and construct {{SpringTransactionErrorHandlerDefinition}} for the {{springTransactionErrorHandler}} key; add a YAML test.
> _Filed by Claude Code on behalf of Croway._



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