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

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


The following commit(s) were added to refs/heads/main by this push:
     new 63dbd043956b CAMEL-24115: camel-rest-openapi - Write generated 
operationId back to Operation for dispatch (#24781)
63dbd043956b is described below

commit 63dbd043956b42e786cff510689a0fbe44d17a66
Author: Claus Ibsen <[email protected]>
AuthorDate: Thu Jul 16 15:39:37 2026 +0200

    CAMEL-24115: camel-rest-openapi - Write generated operationId back to 
Operation for dispatch (#24781)
    
    Co-Authored-By: Claude Opus 4.6 <[email protected]>
---
 .../DefaultRestOpenapiProcessorStrategy.java       |  6 +++-
 .../openapi/RestOpenapiProcessorStrategyTest.java  | 38 ++++++++++++++++++++++
 2 files changed, 43 insertions(+), 1 deletion(-)

diff --git 
a/components/camel-rest-openapi/src/main/java/org/apache/camel/component/rest/openapi/DefaultRestOpenapiProcessorStrategy.java
 
b/components/camel-rest-openapi/src/main/java/org/apache/camel/component/rest/openapi/DefaultRestOpenapiProcessorStrategy.java
index ebf6c45b4d5f..43b6056540c8 100644
--- 
a/components/camel-rest-openapi/src/main/java/org/apache/camel/component/rest/openapi/DefaultRestOpenapiProcessorStrategy.java
+++ 
b/components/camel-rest-openapi/src/main/java/org/apache/camel/component/rest/openapi/DefaultRestOpenapiProcessorStrategy.java
@@ -83,7 +83,11 @@ public class DefaultRestOpenapiProcessorStrategy extends 
ServiceSupport
         for (var e : openAPI.getPaths().entrySet()) {
             for (var o : e.getValue().readOperationsMap().entrySet()) {
                 Operation op = o.getValue();
-                String id = op.getOperationId() != null ? op.getOperationId() 
: generateOperationId(e.getKey(), o.getKey());
+                String id = op.getOperationId();
+                if (id == null) {
+                    id = generateOperationId(e.getKey(), o.getKey());
+                    op.setOperationId(id);
+                }
                 ids.add(component + "://" + id);
             }
         }
diff --git 
a/components/camel-rest-openapi/src/test/java/org/apache/camel/component/rest/openapi/RestOpenapiProcessorStrategyTest.java
 
b/components/camel-rest-openapi/src/test/java/org/apache/camel/component/rest/openapi/RestOpenapiProcessorStrategyTest.java
index 567c48352626..54dc21d2d39e 100644
--- 
a/components/camel-rest-openapi/src/test/java/org/apache/camel/component/rest/openapi/RestOpenapiProcessorStrategyTest.java
+++ 
b/components/camel-rest-openapi/src/test/java/org/apache/camel/component/rest/openapi/RestOpenapiProcessorStrategyTest.java
@@ -17,6 +17,7 @@
 package org.apache.camel.component.rest.openapi;
 
 import io.swagger.v3.oas.models.OpenAPI;
+import io.swagger.v3.oas.models.Operation;
 import org.apache.camel.CamelContext;
 import org.apache.camel.RoutesBuilder;
 import org.apache.camel.builder.RouteBuilder;
@@ -50,6 +51,43 @@ class RestOpenapiProcessorStrategyTest extends 
ManagedCamelTestSupport {
 
     }
 
+    @Test
+    void testMissingOperationIdSetsGeneratedIdOnOperation() throws Exception {
+        // Add routes matching the generated GENOPID names so validation passes
+        camelContext.addRoutes(new RouteBuilder() {
+            @Override
+            public void configure() {
+                from("direct:GENOPID_GET.users").setBody(constant("ok"));
+                from("direct:GENOPID_GET.user._id_").setBody(constant("ok"));
+            }
+        });
+
+        DefaultRestOpenapiProcessorStrategy strategy = new 
DefaultRestOpenapiProcessorStrategy();
+        strategy.setCamelContext(camelContext);
+        strategy.setMissingOperation("fail");
+
+        OpenAPI openAPI = getOpenApi();
+
+        // Verify operationIds are initially null
+        for (var entry : openAPI.getPaths().entrySet()) {
+            for (Operation op : entry.getValue().readOperations()) {
+                assertNull(op.getOperationId(),
+                        "operationId should be null initially for path: " + 
entry.getKey());
+            }
+        }
+
+        // Validation should pass since routes match the generated IDs
+        strategy.validateOpenApi(openAPI, null, 
mock(PlatformHttpConsumerAware.class));
+
+        // Verify generated operationIds were written back to the Operations
+        // so that process() can dispatch to the correct direct endpoint
+        Operation usersOp = openAPI.getPaths().get("/users").getGet();
+        assertEquals("GENOPID_GET.users", usersOp.getOperationId());
+
+        Operation userByIdOp = openAPI.getPaths().get("/user/{id}").getGet();
+        assertEquals("GENOPID_GET.user._id_", userByIdOp.getOperationId());
+    }
+
     private OpenAPI getOpenApi() {
         return RestOpenApiEndpoint.loadSpecificationFrom(camelContext, 
"missing-opid.yaml");
     }

Reply via email to