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 1ea100c9dc7aa4564f359ddd9d4fd23019aa3433
Author: Luigi De Masi <[email protected]>
AuthorDate: Wed Sep 30 19:42:45 2026 +0200

    CAMEL-25178: Preserve case lookup and guard diagnostic labels
    
    Remove the redundant case alias from Switch while retaining the catalog
    part mapping that supplies the complete Switch sample for a case.
    
    Keep case labels available when an endpoint builder fails to produce its
    URI, without caching values that can become stale after builder mutation.
    Cover exact catalog lookup, diagnostic failure and recovery, and masking.
    
    Co-authored-by: Codex <[email protected]>
    Signed-off-by: Luigi De Masi <[email protected]>
---
 .../org/apache/camel/catalog/models/switch.json    |  2 +-
 .../camel/catalog/schemas/camelYamlDsl-model.json  |  2 +-
 .../META-INF/org/apache/camel/model/switch.json    |  2 +-
 .../apache/camel/model/SwitchCaseDefinition.java   |  8 ++++-
 .../org/apache/camel/model/SwitchDefinition.java   |  2 +-
 .../builder/endpoint/SwitchEndpointDslTest.java    | 40 ++++++++++++++++++++++
 .../jbang/core/commands/ai/CatalogSamplesTest.java |  2 ++
 .../resources/schema/camelYamlDsl-model.json       |  2 +-
 8 files changed, 54 insertions(+), 6 deletions(-)

diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/switch.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/switch.json
index 4befb27147a7..b0a91281d33d 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/switch.json
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/switch.json
@@ -8,7 +8,7 @@
     "firstVersion": "4.23.0",
     "label": "eip,routing",
     "javaType": "org.apache.camel.model.SwitchDefinition",
-    "aliases": [ "decision-table", "dispatch-table", "lookup-table", "case" ],
+    "aliases": [ "decision-table", "dispatch-table", "lookup-table" ],
     "abstract": false,
     "input": true,
     "output": false
diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/schemas/camelYamlDsl-model.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/schemas/camelYamlDsl-model.json
index eacf7a4d52cd..5962bfc01ece 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/schemas/camelYamlDsl-model.json
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/schemas/camelYamlDsl-model.json
@@ -8369,7 +8369,7 @@
       "title" : "Switch",
       "description" : "Evaluates a selector once and dispatches to a fixed 
endpoint by literal scalar values",
       "label" : "eip,routing",
-      "aliases" : [ "decision-table", "dispatch-table", "lookup-table", "case" 
],
+      "aliases" : [ "decision-table", "dispatch-table", "lookup-table" ],
       "input" : true,
       "isListItem" : true,
       "children" : [ {
diff --git 
a/core/camel-core-model/src/generated/resources/META-INF/org/apache/camel/model/switch.json
 
b/core/camel-core-model/src/generated/resources/META-INF/org/apache/camel/model/switch.json
index 4befb27147a7..b0a91281d33d 100644
--- 
a/core/camel-core-model/src/generated/resources/META-INF/org/apache/camel/model/switch.json
+++ 
b/core/camel-core-model/src/generated/resources/META-INF/org/apache/camel/model/switch.json
@@ -8,7 +8,7 @@
     "firstVersion": "4.23.0",
     "label": "eip,routing",
     "javaType": "org.apache.camel.model.SwitchDefinition",
-    "aliases": [ "decision-table", "dispatch-table", "lookup-table", "case" ],
+    "aliases": [ "decision-table", "dispatch-table", "lookup-table" ],
     "abstract": false,
     "input": true,
     "output": false
diff --git 
a/core/camel-core-model/src/main/java/org/apache/camel/model/SwitchCaseDefinition.java
 
b/core/camel-core-model/src/main/java/org/apache/camel/model/SwitchCaseDefinition.java
index 99de82bbc378..46786eae7989 100644
--- 
a/core/camel-core-model/src/main/java/org/apache/camel/model/SwitchCaseDefinition.java
+++ 
b/core/camel-core-model/src/main/java/org/apache/camel/model/SwitchCaseDefinition.java
@@ -141,7 +141,13 @@ public class SwitchCaseDefinition extends 
OptionalIdentifiedDefinition<SwitchCas
 
     @Override
     public String getLabel() {
-        return "case[" + value + " -> " + 
URISupport.sanitizeUri(getEndpointUri()) + "]";
+        String endpointUri = null;
+        try {
+            endpointUri = getEndpointUri();
+        } catch (RuntimeException e) {
+            // Keep diagnostic output available when the endpoint URI cannot 
be built.
+        }
+        return "case[" + value + " -> " + URISupport.sanitizeUri(endpointUri) 
+ "]";
     }
 
     @Override
diff --git 
a/core/camel-core-model/src/main/java/org/apache/camel/model/SwitchDefinition.java
 
b/core/camel-core-model/src/main/java/org/apache/camel/model/SwitchDefinition.java
index 65eff9dd77d5..0e79be39ae5c 100644
--- 
a/core/camel-core-model/src/main/java/org/apache/camel/model/SwitchDefinition.java
+++ 
b/core/camel-core-model/src/main/java/org/apache/camel/model/SwitchDefinition.java
@@ -36,7 +36,7 @@ import org.apache.camel.spi.Metadata;
 
 /** Routes a message to one fixed endpoint using a literal lookup table. */
 @Metadata(firstVersion = "4.23.0", label = "eip,routing",
-          aliases = { "decision-table", "dispatch-table", "lookup-table", 
"case" },
+          aliases = { "decision-table", "dispatch-table", "lookup-table" },
           description = "Evaluates a selector once and dispatches to a fixed 
endpoint by literal scalar values")
 @XmlRootElement(name = "switch")
 @XmlAccessorType(XmlAccessType.FIELD)
diff --git 
a/dsl/camel-endpointdsl/src/test/java/org/apache/camel/builder/endpoint/SwitchEndpointDslTest.java
 
b/dsl/camel-endpointdsl/src/test/java/org/apache/camel/builder/endpoint/SwitchEndpointDslTest.java
index 057ec3e308cd..c030df31ebb5 100644
--- 
a/dsl/camel-endpointdsl/src/test/java/org/apache/camel/builder/endpoint/SwitchEndpointDslTest.java
+++ 
b/dsl/camel-endpointdsl/src/test/java/org/apache/camel/builder/endpoint/SwitchEndpointDslTest.java
@@ -22,18 +22,22 @@ import java.util.concurrent.BlockingQueue;
 import java.util.concurrent.LinkedBlockingQueue;
 
 import org.apache.camel.Exchange;
+import org.apache.camel.builder.EndpointProducerBuilder;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.model.RouteDefinition;
+import org.apache.camel.model.SwitchCaseDefinition;
 import org.apache.camel.model.SwitchDefinition;
 import org.apache.camel.xml.jaxb.JaxbHelper;
 import org.apache.camel.xml.jaxb.JaxbModelToXMLDumper;
 import org.junit.jupiter.api.Test;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertNotSame;
 import static org.junit.jupiter.api.Assertions.assertNull;
 import static org.junit.jupiter.api.Assertions.assertSame;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
 public class SwitchEndpointDslTest extends BaseEndpointDslTest {
@@ -86,6 +90,42 @@ public class SwitchEndpointDslTest extends 
BaseEndpointDslTest {
         MockEndpoint.assertIsSatisfied(context);
     }
 
+    @Test
+    public void caseLabelToleratesBuilderFailureAndReflectsLaterChanges() {
+        class FailingEndpointBuilder extends AbstractEndpointBuilder 
implements EndpointProducerBuilder {
+            private boolean failing;
+
+            FailingEndpointBuilder() {
+                super("direct", "billing");
+            }
+
+            @Override
+            public String getRawUri() {
+                if (failing) {
+                    throw new IllegalStateException("Cannot build endpoint 
URI");
+                }
+                return super.getRawUri();
+            }
+        }
+
+        FailingEndpointBuilder builder = new FailingEndpointBuilder();
+        SwitchCaseDefinition c = new SwitchCaseDefinition();
+        c.setValue("billing");
+        c.setEndpointProducerBuilder(builder);
+        assertEquals("case[billing -> direct://billing]", c.getLabel());
+
+        builder.failing = true;
+        assertEquals("case[billing -> null]", c.getLabel());
+        assertEquals(c.getLabel(), c.toString());
+        assertThrows(IllegalStateException.class, c::getEndpointUri);
+
+        builder.failing = false;
+        builder.doSetProperty("password", "secret");
+        assertTrue(c.getLabel().startsWith("case[billing -> 
direct://billing?password="));
+        assertFalse(c.getLabel().contains("secret"));
+        assertEquals(c.getLabel(), c.toString());
+    }
+
     @Override
     protected RouteBuilder createRouteBuilder() {
         return new EndpointRouteBuilder() {
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/ai/CatalogSamplesTest.java
 
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/ai/CatalogSamplesTest.java
index 091b463f93d8..716eda767050 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/ai/CatalogSamplesTest.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/ai/CatalogSamplesTest.java
@@ -99,6 +99,8 @@ public class CatalogSamplesTest {
             assertThat(yaml(sample, 0)).contains("switch:", "uri: 
direct:billing", "uri: direct:technical",
                     "uri: direct:review");
         }
+        assertThat(catalog.eipModel("case").getName()).isEqualTo("case");
+        assertThat(catalog.suggestEipNames("case", 0)).containsExactly("case");
         for (String term : List.of("case", "switchOtherwise")) {
             assertThat(CatalogSamples.sample(catalog, term, 
1).getString("partOf")).isEqualTo("switch");
         }
diff --git 
a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camelYamlDsl-model.json
 
b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camelYamlDsl-model.json
index eacf7a4d52cd..5962bfc01ece 100644
--- 
a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camelYamlDsl-model.json
+++ 
b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camelYamlDsl-model.json
@@ -8369,7 +8369,7 @@
       "title" : "Switch",
       "description" : "Evaluates a selector once and dispatches to a fixed 
endpoint by literal scalar values",
       "label" : "eip,routing",
-      "aliases" : [ "decision-table", "dispatch-table", "lookup-table", "case" 
],
+      "aliases" : [ "decision-table", "dispatch-table", "lookup-table" ],
       "input" : true,
       "isListItem" : true,
       "children" : [ {

Reply via email to