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()
