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

gnodet pushed a commit to branch backport/26102-to-camel-4.18.x
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 7f665d088ea884b9b7c55a1921f1bc869f80f7ca
Author: Guillaume Nodet <[email protected]>
AuthorDate: Sat Sep 5 08:19:34 2026 +0000

    [backport camel-4.18.x] camel-docling: honor the operationId URI path 
segment to select the operation
---
 .../camel/component/docling/DoclingComponent.java   | 10 ++++++++++
 .../component/docling/DoclingComponentTest.java     | 21 +++++++++++++++++++++
 2 files changed, 31 insertions(+)

diff --git 
a/components/camel-ai/camel-docling/src/main/java/org/apache/camel/component/docling/DoclingComponent.java
 
b/components/camel-ai/camel-docling/src/main/java/org/apache/camel/component/docling/DoclingComponent.java
index 21ffd8d5bd0d..07189516d3ae 100644
--- 
a/components/camel-ai/camel-docling/src/main/java/org/apache/camel/component/docling/DoclingComponent.java
+++ 
b/components/camel-ai/camel-docling/src/main/java/org/apache/camel/component/docling/DoclingComponent.java
@@ -23,6 +23,7 @@ import org.apache.camel.Endpoint;
 import org.apache.camel.spi.Metadata;
 import org.apache.camel.spi.annotations.Component;
 import org.apache.camel.support.DefaultComponent;
+import org.apache.camel.util.ObjectHelper;
 
 /**
  * Component for integrating with Docling document processing library.
@@ -45,6 +46,15 @@ public class DoclingComponent extends DefaultComponent {
     @Override
     protected Endpoint createEndpoint(String uri, String remaining, 
Map<String, Object> parameters) throws Exception {
         DoclingConfiguration config = this.configuration.copy();
+        // operationId (e.g. docling:CONVERT_TO_MARKDOWN) selects the 
operation; applied before
+        // setProperties() below so an explicit ?operation=... parameter still 
takes precedence.
+        if (ObjectHelper.isNotEmpty(remaining)) {
+            try {
+                config.setOperation(DoclingOperations.valueOf(remaining));
+            } catch (IllegalArgumentException e) {
+                // not a recognized operation name - leave the 
configured/default operation as-is
+            }
+        }
         DoclingEndpoint endpoint = new DoclingEndpoint(uri, this, remaining, 
config);
         setProperties(endpoint, parameters);
         return endpoint;
diff --git 
a/components/camel-ai/camel-docling/src/test/java/org/apache/camel/component/docling/DoclingComponentTest.java
 
b/components/camel-ai/camel-docling/src/test/java/org/apache/camel/component/docling/DoclingComponentTest.java
index a3bcb2211c37..25f94f081551 100644
--- 
a/components/camel-ai/camel-docling/src/test/java/org/apache/camel/component/docling/DoclingComponentTest.java
+++ 
b/components/camel-ai/camel-docling/src/test/java/org/apache/camel/component/docling/DoclingComponentTest.java
@@ -49,6 +49,27 @@ public class DoclingComponentTest extends CamelTestSupport {
         assertEquals("es", 
doclingEndpoint.getConfiguration().getOcrLanguage());
     }
 
+    @Test
+    public void testOperationIdSelectsOperation() throws Exception {
+        Endpoint endpoint = 
context.getEndpoint("docling:EXTRACT_STRUCTURED_DATA");
+        assertNotNull(endpoint);
+        assertTrue(endpoint instanceof DoclingEndpoint);
+
+        DoclingEndpoint doclingEndpoint = (DoclingEndpoint) endpoint;
+        assertEquals("EXTRACT_STRUCTURED_DATA", 
doclingEndpoint.getOperationId());
+        assertEquals(DoclingOperations.EXTRACT_STRUCTURED_DATA, 
doclingEndpoint.getConfiguration().getOperation());
+    }
+
+    @Test
+    public void testExplicitOperationParameterOverridesOperationId() throws 
Exception {
+        // a recognized operationId must still be overridable via an explicit 
"operation" parameter
+        Endpoint endpoint = 
context.getEndpoint("docling:CONVERT_TO_MARKDOWN?operation=EXTRACT_TEXT");
+        assertNotNull(endpoint);
+
+        DoclingEndpoint doclingEndpoint = (DoclingEndpoint) endpoint;
+        assertEquals(DoclingOperations.EXTRACT_TEXT, 
doclingEndpoint.getConfiguration().getOperation());
+    }
+
     @Test
     public void testProducerCreation() throws Exception {
         DoclingEndpoint endpoint = (DoclingEndpoint) 
context.getEndpoint("docling:convert");

Reply via email to