This is an automated email from the ASF dual-hosted git repository.

luigidemasi pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 66d9af9abffdf2cba79f69505484df2568ef6d6d
Author: Luigi De Masi <[email protected]>
AuthorDate: Tue Jun 16 22:43:48 2026 +0200

    CAMEL-23775: Preserve same-order YAML deserializer resolvers
    
    Co-Authored-By: Claude Opus 4.6 <[email protected]>
---
 .../camel/dsl/yaml/common/YamlDeserializationContext.java  | 13 +++++++------
 .../camel/dsl/yaml/common/ConstructorResolverTest.groovy   | 14 ++++++++++++--
 2 files changed, 19 insertions(+), 8 deletions(-)

diff --git 
a/dsl/camel-yaml-dsl/camel-yaml-dsl-common/src/main/java/org/apache/camel/dsl/yaml/common/YamlDeserializationContext.java
 
b/dsl/camel-yaml-dsl/camel-yaml-dsl-common/src/main/java/org/apache/camel/dsl/yaml/common/YamlDeserializationContext.java
index 95db37f659b9..5f6fe334326e 100644
--- 
a/dsl/camel-yaml-dsl/camel-yaml-dsl-common/src/main/java/org/apache/camel/dsl/yaml/common/YamlDeserializationContext.java
+++ 
b/dsl/camel-yaml-dsl/camel-yaml-dsl-common/src/main/java/org/apache/camel/dsl/yaml/common/YamlDeserializationContext.java
@@ -16,23 +16,22 @@
  */
 package org.apache.camel.dsl.yaml.common;
 
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
-import java.util.Comparator;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 import java.util.Optional;
-import java.util.Set;
-import java.util.TreeSet;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.CamelContextAware;
-import org.apache.camel.Ordered;
 import org.apache.camel.Service;
 import org.apache.camel.dsl.yaml.common.exception.DuplicateKeyException;
 import org.apache.camel.dsl.yaml.common.exception.UnknownNodeIdException;
 import org.apache.camel.dsl.yaml.common.exception.YamlDeserializationException;
 import org.apache.camel.spi.Resource;
+import org.apache.camel.support.OrderedComparator;
 import org.apache.camel.util.ObjectHelper;
 import org.slf4j.Logger;
 import org.snakeyaml.engine.v2.api.ConstructNode;
@@ -45,7 +44,7 @@ import org.snakeyaml.engine.v2.nodes.ScalarNode;
 
 public class YamlDeserializationContext extends StandardConstructor implements 
CamelContextAware, Service {
 
-    private final Set<YamlDeserializerResolver> resolvers;
+    private final List<YamlDeserializerResolver> resolvers;
     private final Map<String, ConstructNode> constructors;
     private CamelContext camelContext;
     private Resource resource;
@@ -54,12 +53,13 @@ public class YamlDeserializationContext extends 
StandardConstructor implements C
 
     public YamlDeserializationContext(LoadSettings settings) {
         super(settings);
-        this.resolvers = new 
TreeSet<>(Comparator.comparing(Ordered::getOrder));
+        this.resolvers = new ArrayList<>();
         this.constructors = new HashMap<>();
     }
 
     public void addResolver(YamlDeserializerResolver resolver) {
         this.resolvers.add(resolver);
+        this.resolvers.sort(OrderedComparator.get());
     }
 
     public void addResolvers(YamlDeserializerResolver... resolvers) {
@@ -68,6 +68,7 @@ public class YamlDeserializationContext extends 
StandardConstructor implements C
 
     public void addResolvers(Collection<YamlDeserializerResolver> resolvers) {
         this.resolvers.addAll(resolvers);
+        this.resolvers.sort(OrderedComparator.get());
     }
 
     public Resource getResource() {
diff --git 
a/dsl/camel-yaml-dsl/camel-yaml-dsl-common/src/test/groovy/org/apache/camel/dsl/yaml/common/ConstructorResolverTest.groovy
 
b/dsl/camel-yaml-dsl/camel-yaml-dsl-common/src/test/groovy/org/apache/camel/dsl/yaml/common/ConstructorResolverTest.groovy
index 25fb7ae3523c..cd8b85ac4f0d 100644
--- 
a/dsl/camel-yaml-dsl/camel-yaml-dsl-common/src/test/groovy/org/apache/camel/dsl/yaml/common/ConstructorResolverTest.groovy
+++ 
b/dsl/camel-yaml-dsl/camel-yaml-dsl-common/src/test/groovy/org/apache/camel/dsl/yaml/common/ConstructorResolverTest.groovy
@@ -41,7 +41,8 @@ class ConstructorResolverTest extends Specification {
         when:
             def ctr = new YamlDeserializationContext(settings)
             ctr.setCamelContext(new DefaultCamelContext())
-            ctr.addResolver(new LocalResolver())
+            ctr.addResolver(new MyNodeResolver())
+            ctr.addResolver(new MyNestedResolver())
 
             def load = new Load(settings, ctr)
 
@@ -65,13 +66,22 @@ class ConstructorResolverTest extends Specification {
     }
 
 
-    static class LocalResolver implements YamlDeserializerResolver {
+    static class MyNodeResolver implements YamlDeserializerResolver {
         @Override
         ConstructNode resolve(String id) {
             switch (id) {
                 case 'my-node':
                 case 
'org.apache.camel.dsl.yaml.common.ConstructorResolverTest$MyNode':
                     return new MyNodeConstructor()
+            }
+            return null
+        }
+    }
+
+    static class MyNestedResolver implements YamlDeserializerResolver {
+        @Override
+        ConstructNode resolve(String id) {
+            switch (id) {
                 case 'nested':
                 case 
'org.apache.camel.dsl.yaml.common.ConstructorResolverTest$MyNested':
                     return new MyNestedConstructor()

Reply via email to