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 b9649aafde2c camel-docling: honor the operationId URI path segment to
select the operation
b9649aafde2c is described below
commit b9649aafde2c743723b78edf753c56f1eecb40d7
Author: Federico Mariani <[email protected]>
AuthorDate: Sat Sep 5 10:10:21 2026 +0200
camel-docling: honor the operationId URI path segment to select the
operation
DoclingComponent.createEndpoint() now parses the operationId URI path
segment
(e.g. docling:EXTRACT_STRUCTURED_DATA) into a DoclingOperations value and
applies it before setProperties() runs, so an explicit ?operation=... query
parameter still takes precedence. An unrecognized operationId is silently
ignored, preserving the existing docling:convert style. Fixes a silent bug
where endpoints using the path-segment syntax always ran CONVERT_TO_MARKDOWN
regardless of the specified operation.
Closes #26102
Co-Authored-By: Claude Sonnet 5 <[email protected]>
---
.../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 767d4354646f..7d4defa95587 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
@@ -29,6 +29,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;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -83,6 +84,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 cf56c9d7160d..4c6c8ec219d0 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");