You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by lb...@apache.org on 2021/01/11 13:40:28 UTC

[camel-k-runtime] branch master updated: Catalog json keys should be sorted #576

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

lburgazzoli pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel-k-runtime.git


The following commit(s) were added to refs/heads/master by this push:
     new 94b4c63  Catalog json keys should be sorted #576
94b4c63 is described below

commit 94b4c638743778b43c1435ba82602a99c7e70ca9
Author: Luca Burgazzoli <lb...@gmail.com>
AuthorDate: Mon Jan 11 12:45:14 2021 +0100

    Catalog json keys should be sorted #576
---
 .../org/apache/camel/k/catalog/model/Artifact.java | 34 ++++++++++++++-
 .../camel/k/catalog/model/CamelArtifact.java       | 34 +++++++++------
 .../camel/k/catalog/model/CamelCapability.java     | 10 ++---
 .../apache/camel/k/catalog/model/CamelLoader.java  | 22 +++++-----
 .../apache/camel/k/catalog/model/CamelScheme.java  | 17 ++++++--
 .../camel/k/catalog/model/CamelScopedArtifact.java | 14 +++---
 .../camel/k/catalog/model/MavenArtifact.java       | 50 ----------------------
 .../camel/k/catalog/model/k8s/ObjectMeta.java      |  7 +--
 .../k/catalog/model/k8s/crd/CamelCatalogSpec.java  | 19 ++++----
 .../camel/k/catalog/model/k8s/crd/RuntimeSpec.java | 24 ++++++-----
 .../camel/k/tooling/maven/GenerateCatalogMojo.java |  1 -
 .../maven/processors/CatalogProcessor3x.java       | 18 +++++---
 12 files changed, 131 insertions(+), 119 deletions(-)

diff --git a/support/camel-k-catalog-model/src/main/java/org/apache/camel/k/catalog/model/Artifact.java b/support/camel-k-catalog-model/src/main/java/org/apache/camel/k/catalog/model/Artifact.java
index 334acd9..8f3dc72 100644
--- a/support/camel-k-catalog-model/src/main/java/org/apache/camel/k/catalog/model/Artifact.java
+++ b/support/camel-k-catalog-model/src/main/java/org/apache/camel/k/catalog/model/Artifact.java
@@ -16,10 +16,42 @@
  */
 package org.apache.camel.k.catalog.model;
 
+import java.util.Comparator;
 import java.util.Optional;
 
-public interface Artifact {
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+
+@JsonPropertyOrder({"groupId", "artifactId", "version"})
+public interface Artifact extends Comparable<Artifact> {
     String getGroupId();;
     String getArtifactId();
     Optional<String> getVersion();
+
+    @Override
+    default int compareTo(Artifact o) {
+        return Comparator
+            .comparing(Artifact::getGroupId)
+            .thenComparing(Artifact::getArtifactId)
+            .thenComparing(Artifact::getVersion, Comparator.comparing(c -> c.orElse("")))
+            .compare(this, o);
+    }
+
+    static Artifact from(String groupId, String artifactId) {
+        return new Artifact() {
+            @Override
+            public String getGroupId() {
+                return groupId;
+            }
+
+            @Override
+            public String getArtifactId() {
+                return artifactId;
+            }
+
+            @Override
+            public Optional<String> getVersion() {
+                return Optional.empty();
+            }
+        };
+    }
 }
diff --git a/support/camel-k-catalog-model/src/main/java/org/apache/camel/k/catalog/model/CamelArtifact.java b/support/camel-k-catalog-model/src/main/java/org/apache/camel/k/catalog/model/CamelArtifact.java
index 7cce932..40928d3 100644
--- a/support/camel-k-catalog-model/src/main/java/org/apache/camel/k/catalog/model/CamelArtifact.java
+++ b/support/camel-k-catalog-model/src/main/java/org/apache/camel/k/catalog/model/CamelArtifact.java
@@ -17,7 +17,7 @@
 package org.apache.camel.k.catalog.model;
 
 import java.util.Collections;
-import java.util.Set;
+import java.util.SortedSet;
 
 import com.fasterxml.jackson.annotation.JsonPropertyOrder;
 import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
@@ -30,38 +30,44 @@ import org.immutables.value.Value;
 public interface CamelArtifact extends Artifact {
     @Value.Auxiliary
     @Value.Default
-    default Set<CamelScheme> getSchemes() {
-        return Collections.emptySet();
+    @Value.NaturalOrder
+    default SortedSet<CamelScheme> getSchemes() {
+        return Collections.emptySortedSet();
     }
 
     @Value.Auxiliary
     @Value.Default
-    default Set<String> getLanguages() {
-        return Collections.emptySet();
+    @Value.NaturalOrder
+    default SortedSet<String> getLanguages() {
+        return Collections.emptySortedSet();
     }
 
     @Value.Auxiliary
     @Value.Default
-    default Set<String> getDataformats() {
-        return Collections.emptySet();
+    @Value.NaturalOrder
+    default SortedSet<String> getDataformats() {
+        return Collections.emptySortedSet();
     }
 
     @Value.Auxiliary
     @Value.Default
-    default Set<Artifact> getDependencies() {
-        return Collections.emptySet();
+    @Value.NaturalOrder
+    default SortedSet<Artifact> getDependencies() {
+        return Collections.emptySortedSet();
     }
 
     @Value.Auxiliary
     @Value.Default
-    default Set<Artifact> getExclusions() {
-        return Collections.emptySet();
+    @Value.NaturalOrder
+    default SortedSet<Artifact> getExclusions() {
+        return Collections.emptySortedSet();
     }
 
     @Value.Auxiliary
     @Value.Default
-    default Set<String> getJavaTypes() {
-        return Collections.emptySet();
+    @Value.NaturalOrder
+    default SortedSet<String> getJavaTypes() {
+        return Collections.emptySortedSet();
     }
 
     static Builder from(String groupId, String artifactId) {
@@ -70,7 +76,7 @@ public interface CamelArtifact extends Artifact {
 
     class Builder extends ImmutableCamelArtifact.Builder {
         public Builder addDependency(String groupId, String artifactId) {
-            return super.addDependencies(MavenArtifact.from(groupId, artifactId));
+            return super.addDependencies(Artifact.from(groupId, artifactId));
         }
     }
 }
diff --git a/support/camel-k-catalog-model/src/main/java/org/apache/camel/k/catalog/model/CamelCapability.java b/support/camel-k-catalog-model/src/main/java/org/apache/camel/k/catalog/model/CamelCapability.java
index ec18dbe..0b6c640 100644
--- a/support/camel-k-catalog-model/src/main/java/org/apache/camel/k/catalog/model/CamelCapability.java
+++ b/support/camel-k-catalog-model/src/main/java/org/apache/camel/k/catalog/model/CamelCapability.java
@@ -17,7 +17,7 @@
 package org.apache.camel.k.catalog.model;
 
 import java.util.Collections;
-import java.util.Set;
+import java.util.SortedSet;
 
 import com.fasterxml.jackson.annotation.JsonPropertyOrder;
 import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
@@ -30,8 +30,9 @@ import org.immutables.value.Value;
 public interface CamelCapability {
     @Value.Auxiliary
     @Value.Default
-    default Set<Artifact> getDependencies() {
-        return Collections.emptySet();
+    @Value.NaturalOrder
+    default SortedSet<Artifact> getDependencies() {
+        return Collections.emptySortedSet();
     }
 
     static CamelCapability forArtifact(String groupId, String artifactId) {
@@ -40,8 +41,7 @@ public interface CamelCapability {
 
     class Builder extends ImmutableCamelCapability.Builder {
         public Builder addDependency(String groupId, String artifactId) {
-            addDependencies(MavenArtifact.from(groupId, artifactId));
-            return this;
+            return super.addDependencies(Artifact.from(groupId, artifactId));
         }
     }
 }
diff --git a/support/camel-k-catalog-model/src/main/java/org/apache/camel/k/catalog/model/CamelLoader.java b/support/camel-k-catalog-model/src/main/java/org/apache/camel/k/catalog/model/CamelLoader.java
index 2912508..83a56f5 100644
--- a/support/camel-k-catalog-model/src/main/java/org/apache/camel/k/catalog/model/CamelLoader.java
+++ b/support/camel-k-catalog-model/src/main/java/org/apache/camel/k/catalog/model/CamelLoader.java
@@ -17,8 +17,8 @@
 package org.apache.camel.k.catalog.model;
 
 import java.util.Collections;
-import java.util.Map;
-import java.util.Set;
+import java.util.SortedMap;
+import java.util.SortedSet;
 
 import com.fasterxml.jackson.annotation.JsonPropertyOrder;
 import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
@@ -31,20 +31,23 @@ import org.immutables.value.Value;
 public interface CamelLoader extends Artifact {
     @Value.Auxiliary
     @Value.Default
-    default Set<String> getLanguages() {
-        return Collections.emptySet();
+    @Value.NaturalOrder
+    default SortedSet<String> getLanguages() {
+        return Collections.emptySortedSet();
     }
 
     @Value.Auxiliary
     @Value.Default
-    default Set<Artifact> getDependencies() {
-        return Collections.emptySet();
+    @Value.NaturalOrder
+    default SortedSet<Artifact> getDependencies() {
+        return Collections.emptySortedSet();
     }
 
     @Value.Auxiliary
     @Value.Default
-    default Map<String, String> getMetadata() {
-        return Collections.emptyMap();
+    @Value.NaturalOrder
+    default SortedMap<String, String> getMetadata() {
+        return Collections.emptySortedMap();
     }
 
     static Builder fromArtifact(String groupId, String artifactId) {
@@ -53,8 +56,7 @@ public interface CamelLoader extends Artifact {
 
     class Builder extends ImmutableCamelLoader.Builder {
         public Builder addDependency(String groupId, String artifactId) {
-            addDependencies(MavenArtifact.from(groupId, artifactId));
-            return this;
+            return super.addDependencies(Artifact.from(groupId, artifactId));
         }
     }
 }
diff --git a/support/camel-k-catalog-model/src/main/java/org/apache/camel/k/catalog/model/CamelScheme.java b/support/camel-k-catalog-model/src/main/java/org/apache/camel/k/catalog/model/CamelScheme.java
index fea0a29..14b68a7 100644
--- a/support/camel-k-catalog-model/src/main/java/org/apache/camel/k/catalog/model/CamelScheme.java
+++ b/support/camel-k-catalog-model/src/main/java/org/apache/camel/k/catalog/model/CamelScheme.java
@@ -17,15 +17,16 @@
 package org.apache.camel.k.catalog.model;
 
 import java.util.Collections;
+import java.util.Comparator;
 import java.util.Optional;
-import java.util.Set;
+import java.util.SortedSet;
 
 import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
 import org.immutables.value.Value;
 
 @Value.Immutable
 @JsonDeserialize(builder = CamelScheme.Builder.class)
-public interface CamelScheme {
+public interface CamelScheme extends Comparable<CamelScheme> {
     String getId();
 
     @Value.Auxiliary
@@ -42,8 +43,9 @@ public interface CamelScheme {
 
     @Value.Auxiliary
     @Value.Default
-    default Set<String> getRequiredCapabilities() {
-        return Collections.emptySet();
+    @Value.NaturalOrder
+    default SortedSet<String> getRequiredCapabilities() {
+        return Collections.emptySortedSet();
     }
 
     @Value.Auxiliary
@@ -52,6 +54,13 @@ public interface CamelScheme {
     @Value.Auxiliary
     Optional<CamelScopedArtifact> getConsumer();
 
+    @Override
+    default int compareTo(CamelScheme o) {
+        return Comparator
+            .comparing(CamelScheme::getId)
+            .compare(this, o);
+    }
+
     class Builder extends ImmutableCamelScheme.Builder {
     }
 }
diff --git a/support/camel-k-catalog-model/src/main/java/org/apache/camel/k/catalog/model/CamelScopedArtifact.java b/support/camel-k-catalog-model/src/main/java/org/apache/camel/k/catalog/model/CamelScopedArtifact.java
index a72429b..667dce0 100644
--- a/support/camel-k-catalog-model/src/main/java/org/apache/camel/k/catalog/model/CamelScopedArtifact.java
+++ b/support/camel-k-catalog-model/src/main/java/org/apache/camel/k/catalog/model/CamelScopedArtifact.java
@@ -17,7 +17,7 @@
 package org.apache.camel.k.catalog.model;
 
 import java.util.Collections;
-import java.util.Set;
+import java.util.SortedSet;
 
 import com.fasterxml.jackson.annotation.JsonPropertyOrder;
 import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
@@ -30,19 +30,21 @@ import org.immutables.value.Value;
 public interface CamelScopedArtifact {
     @Value.Auxiliary
     @Value.Default
-    default Set<Artifact> getDependencies() {
-        return Collections.emptySet();
+    @Value.NaturalOrder
+    default SortedSet<Artifact> getDependencies() {
+        return Collections.emptySortedSet();
     }
 
     @Value.Auxiliary
     @Value.Default
-    default Set<String> getRequiredCapabilities() {
-        return Collections.emptySet();
+    @Value.NaturalOrder
+    default SortedSet<String> getRequiredCapabilities() {
+        return Collections.emptySortedSet();
     }
 
     class Builder extends ImmutableCamelScopedArtifact.Builder {
         public Builder addDependency(String groupId, String artifactId) {
-            return super.addDependencies(MavenArtifact.from(groupId, artifactId));
+            return super.addDependencies(Artifact.from(groupId, artifactId));
         }
     }
 }
diff --git a/support/camel-k-catalog-model/src/main/java/org/apache/camel/k/catalog/model/MavenArtifact.java b/support/camel-k-catalog-model/src/main/java/org/apache/camel/k/catalog/model/MavenArtifact.java
deleted file mode 100644
index d75faf1..0000000
--- a/support/camel-k-catalog-model/src/main/java/org/apache/camel/k/catalog/model/MavenArtifact.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.camel.k.catalog.model;
-
-import java.util.Optional;
-
-import com.fasterxml.jackson.annotation.JsonPropertyOrder;
-import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
-import org.immutables.value.Value;
-
-@Value.Immutable
-@JsonDeserialize(builder = MavenArtifact.Builder.class)
-@JsonPropertyOrder({"groupId", "artifactId", "version"})
-public interface MavenArtifact extends Artifact {
-    static MavenArtifact from(String groupId, String artifactId) {
-        return new MavenArtifact() {
-            @Override
-            public String getGroupId() {
-                return groupId;
-            }
-
-            @Override
-            public String getArtifactId() {
-                return artifactId;
-            }
-
-            @Override
-            public Optional<String> getVersion() {
-                return Optional.empty();
-            }
-        };
-    }
-
-    class Builder extends ImmutableMavenArtifact.Builder {
-    }
-}
diff --git a/support/camel-k-catalog-model/src/main/java/org/apache/camel/k/catalog/model/k8s/ObjectMeta.java b/support/camel-k-catalog-model/src/main/java/org/apache/camel/k/catalog/model/k8s/ObjectMeta.java
index 60d7aff..faa66f9 100644
--- a/support/camel-k-catalog-model/src/main/java/org/apache/camel/k/catalog/model/k8s/ObjectMeta.java
+++ b/support/camel-k-catalog-model/src/main/java/org/apache/camel/k/catalog/model/k8s/ObjectMeta.java
@@ -17,7 +17,7 @@
 package org.apache.camel.k.catalog.model.k8s;
 
 import java.util.Collections;
-import java.util.Map;
+import java.util.SortedMap;
 
 import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
 import org.immutables.value.Value;
@@ -28,8 +28,9 @@ public interface ObjectMeta {
     String getName();
 
     @Value.Default
-    default Map<String, String> getLabels() {
-        return Collections.emptyMap();
+    @Value.NaturalOrder
+    default SortedMap<String, String> getLabels() {
+        return Collections.emptySortedMap();
     }
 
     class Builder extends ImmutableObjectMeta.Builder {
diff --git a/support/camel-k-catalog-model/src/main/java/org/apache/camel/k/catalog/model/k8s/crd/CamelCatalogSpec.java b/support/camel-k-catalog-model/src/main/java/org/apache/camel/k/catalog/model/k8s/crd/CamelCatalogSpec.java
index 77360bb..d3b9cec 100644
--- a/support/camel-k-catalog-model/src/main/java/org/apache/camel/k/catalog/model/k8s/crd/CamelCatalogSpec.java
+++ b/support/camel-k-catalog-model/src/main/java/org/apache/camel/k/catalog/model/k8s/crd/CamelCatalogSpec.java
@@ -17,7 +17,7 @@
 package org.apache.camel.k.catalog.model.k8s.crd;
 
 import java.util.Collections;
-import java.util.Map;
+import java.util.SortedMap;
 
 import com.fasterxml.jackson.annotation.JsonPropertyOrder;
 import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
@@ -33,23 +33,24 @@ public interface CamelCatalogSpec {
     RuntimeSpec getRuntime();
 
     @Value.Default
-    default Map<String, CamelArtifact> getArtifacts() {
-        return Collections.emptyMap();
+    @Value.NaturalOrder
+    default SortedMap<String, CamelArtifact> getArtifacts() {
+        return Collections.emptySortedMap();
     }
 
     @Value.Default
-    default Map<String, CamelLoader> getLoaders() {
-        return Collections.emptyMap();
+    @Value.NaturalOrder
+    default SortedMap<String, CamelLoader> getLoaders() {
+        return Collections.emptySortedMap();
     }
 
     class Builder extends ImmutableCamelCatalogSpec.Builder {
         public Builder putArtifact(CamelArtifact artifact) {
-            putArtifact(artifact.getArtifactId(), artifact);
-            return this;
+            return putArtifact(artifact.getArtifactId(), artifact);
         }
+
         public Builder putArtifact(String groupId, String artifactId) {
-            putArtifact(new CamelArtifact.Builder().groupId(groupId).artifactId(artifactId).build());
-            return this;
+            return putArtifact(new CamelArtifact.Builder().groupId(groupId).artifactId(artifactId).build());
         }
     }
 }
diff --git a/support/camel-k-catalog-model/src/main/java/org/apache/camel/k/catalog/model/k8s/crd/RuntimeSpec.java b/support/camel-k-catalog-model/src/main/java/org/apache/camel/k/catalog/model/k8s/crd/RuntimeSpec.java
index a6b2d5a..730dc95 100644
--- a/support/camel-k-catalog-model/src/main/java/org/apache/camel/k/catalog/model/k8s/crd/RuntimeSpec.java
+++ b/support/camel-k-catalog-model/src/main/java/org/apache/camel/k/catalog/model/k8s/crd/RuntimeSpec.java
@@ -17,13 +17,13 @@
 package org.apache.camel.k.catalog.model.k8s.crd;
 
 import java.util.Collections;
-import java.util.Map;
-import java.util.Set;
+import java.util.SortedMap;
+import java.util.SortedSet;
 
 import com.fasterxml.jackson.annotation.JsonPropertyOrder;
 import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+import org.apache.camel.k.catalog.model.Artifact;
 import org.apache.camel.k.catalog.model.CamelCapability;
-import org.apache.camel.k.catalog.model.MavenArtifact;
 import org.immutables.value.Value;
 
 @Value.Immutable
@@ -36,24 +36,26 @@ public interface RuntimeSpec {
     String getApplicationClass();
 
     @Value.Default
-    default Map<String, String> getMetadata() {
-        return Collections.emptyMap();
+    @Value.NaturalOrder
+    default SortedMap<String, String> getMetadata() {
+        return Collections.emptySortedMap();
     }
 
     @Value.Default
-    default Set<MavenArtifact> getDependencies() {
-        return Collections.emptySet();
+    @Value.NaturalOrder
+    default SortedSet<Artifact> getDependencies() {
+        return Collections.emptySortedSet();
     }
 
     @Value.Default
-    default Map<String, CamelCapability> getCapabilities() {
-        return Collections.emptyMap();
+    @Value.NaturalOrder
+    default SortedMap<String, CamelCapability> getCapabilities() {
+        return Collections.emptySortedMap();
     }
 
     class Builder extends ImmutableRuntimeSpec.Builder {
         public Builder addDependency(String groupId, String artifactId) {
-            addDependencies(MavenArtifact.from(groupId, artifactId));
-            return this;
+            return super.addDependencies(Artifact.from(groupId, artifactId));
         }
     }
 }
diff --git a/support/camel-k-maven-plugin/src/main/java/org/apache/camel/k/tooling/maven/GenerateCatalogMojo.java b/support/camel-k-maven-plugin/src/main/java/org/apache/camel/k/tooling/maven/GenerateCatalogMojo.java
index 9590e37..0279087 100644
--- a/support/camel-k-maven-plugin/src/main/java/org/apache/camel/k/tooling/maven/GenerateCatalogMojo.java
+++ b/support/camel-k-maven-plugin/src/main/java/org/apache/camel/k/tooling/maven/GenerateCatalogMojo.java
@@ -148,7 +148,6 @@ public class GenerateCatalogMojo extends AbstractMojo {
             CamelCatalogSpec.Builder catalogSpec = new CamelCatalogSpec.Builder()
                 .runtime(runtimeSpec.build());
 
-
             StreamSupport.stream(ServiceLoader.load(CatalogProcessor.class).spliterator(), false)
                 .sorted(Comparator.comparingInt(CatalogProcessor::getOrder))
                 .filter(p -> p.accepts(catalog))
diff --git a/support/camel-k-maven-plugin/src/main/java/org/apache/camel/k/tooling/maven/processors/CatalogProcessor3x.java b/support/camel-k-maven-plugin/src/main/java/org/apache/camel/k/tooling/maven/processors/CatalogProcessor3x.java
index 2c7bd37..d4974e4 100644
--- a/support/camel-k-maven-plugin/src/main/java/org/apache/camel/k/tooling/maven/processors/CatalogProcessor3x.java
+++ b/support/camel-k-maven-plugin/src/main/java/org/apache/camel/k/tooling/maven/processors/CatalogProcessor3x.java
@@ -17,10 +17,12 @@
 package org.apache.camel.k.tooling.maven.processors;
 
 import java.util.Arrays;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
+import java.util.Set;
+import java.util.TreeMap;
+import java.util.TreeSet;
 
 import com.vdurmont.semver4j.Semver;
 import org.apache.camel.catalog.CamelCatalog;
@@ -93,7 +95,7 @@ public class CatalogProcessor3x implements CatalogProcessor {
 
     @Override
     public void process(MavenProject project, CamelCatalog catalog, CamelCatalogSpec.Builder specBuilder) {
-        Map<String, CamelArtifact> artifacts = new HashMap<>();
+        Map<String, CamelArtifact> artifacts = new TreeMap<>();
 
         processComponents(catalog, artifacts);
         processLanguages(catalog, artifacts);
@@ -221,7 +223,9 @@ public class CatalogProcessor3x implements CatalogProcessor {
     }
 
     private static void processComponents(CamelCatalog catalog, Map<String, CamelArtifact> artifacts) {
-        for (String name : catalog.findComponentNames()) {
+        final Set<String> elements = new TreeSet<>(catalog.findComponentNames());
+
+        for (String name : elements) {
             String json = catalog.componentJSonSchema(name);
             CatalogComponentDefinition definition = CatalogSupport.unmarshallComponent(json);
 
@@ -244,7 +248,9 @@ public class CatalogProcessor3x implements CatalogProcessor {
     }
 
     private static void processLanguages(CamelCatalog catalog, Map<String, CamelArtifact> artifacts) {
-        for (String name : catalog.findLanguageNames()) {
+        final Set<String> elements = new TreeSet<>(catalog.findLanguageNames());
+
+        for (String name : elements) {
             String json = catalog.languageJSonSchema(name);
             CatalogLanguageDefinition definition = CatalogSupport.unmarshallLanguage(json);
 
@@ -259,7 +265,9 @@ public class CatalogProcessor3x implements CatalogProcessor {
     }
 
     private static void processDataFormats(CamelCatalog catalog, Map<String, CamelArtifact> artifacts) {
-        for (String name : catalog.findDataFormatNames()) {
+        final Set<String> elements = new TreeSet<>(catalog.findDataFormatNames());
+
+        for (String name : elements) {
             String json = catalog.dataFormatJSonSchema(name);
             CatalogDataFormatDefinition definition = CatalogSupport.unmarshallDataFormat(json);