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 1061b7bcc641 camel-docling: declare the headers
CHECK_CONVERSION_STATUS sets (#29543)
1061b7bcc641 is described below
commit 1061b7bcc64108d261fec67a3e0eacc78378e0af
Author: dhairya05 <[email protected]>
AuthorDate: Tue Nov 10 18:40:22 2026 +0530
camel-docling: declare the headers CHECK_CONVERSION_STATUS sets (#29543)
checkConversionStatus set CamelDoclingTaskStatus, CamelDoclingTaskProgress,
CamelDoclingResult and CamelDoclingErrorMessage as string literals, so they
were missing from the catalog and the component page. Declare them in
DoclingHeaders with the same names, use the constants in the producer, and
assert them in DoclingAsyncConversionTest.
---
.../apache/camel/catalog/components/docling.json | 6 ++-
.../apache/camel/component/docling/docling.json | 6 ++-
.../camel/component/docling/DoclingHeaders.java | 14 ++++++
.../camel/component/docling/DoclingProducer.java | 8 ++--
.../docling/DoclingAsyncConversionTest.java | 12 ++++++
.../dsl/DoclingEndpointBuilderFactory.java | 50 ++++++++++++++++++++++
6 files changed, 90 insertions(+), 6 deletions(-)
diff --git
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/docling.json
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/docling.json
index 888016d0e876..94cf7371543e 100644
---
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/docling.json
+++
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/docling.json
@@ -115,7 +115,11 @@
"CamelDoclingMetadataRaw": { "index": 28, "kind": "header", "displayName":
"", "group": "common", "label": "", "required": false, "javaType": "Map<String,
Object>", "deprecated": false, "deprecationNote": "", "autowired": false,
"secret": false, "description": "Raw metadata fields as a Map", "constantName":
"org.apache.camel.component.docling.DoclingHeaders#METADATA_RAW" },
"CamelDoclingChunkingTokenizer": { "index": 29, "kind": "header",
"displayName": "", "group": "common", "label": "", "required": false,
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "Tokenizer for hybrid chunking (e.g.
sentence-transformers\/all-MiniLM-L6-v2)", "constantName":
"org.apache.camel.component.docling.DoclingHeaders#CHUNKING_TOKENIZER" },
"CamelDoclingChunkingMaxTokens": { "index": 30, "kind": "header",
"displayName": "", "group": "common", "label": "", "required": false,
"javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "Maximum tokens per chunk for hybrid
chunking", "constantName":
"org.apache.camel.component.docling.DoclingHeaders#CHUNKING_MAX_TOKENS" },
- "CamelDoclingChunkingMergePeers": { "index": 31, "kind": "header",
"displayName": "", "group": "common", "label": "", "required": false,
"javaType": "Boolean", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "Whether to merge peer chunks in hybrid
chunking", "constantName":
"org.apache.camel.component.docling.DoclingHeaders#CHUNKING_MERGE_PEERS" }
+ "CamelDoclingChunkingMergePeers": { "index": 31, "kind": "header",
"displayName": "", "group": "common", "label": "", "required": false,
"javaType": "Boolean", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "Whether to merge peer chunks in hybrid
chunking", "constantName":
"org.apache.camel.component.docling.DoclingHeaders#CHUNKING_MERGE_PEERS" },
+ "CamelDoclingTaskStatus": { "index": 32, "kind": "header", "displayName":
"", "group": "common", "label": "", "required": false, "javaType": "String",
"deprecated": false, "deprecationNote": "", "autowired": false, "secret":
false, "description": "Status of the async conversion task checked by
CHECK_CONVERSION_STATUS: PENDING, IN_PROGRESS, COMPLETED, FAILED or UNKNOWN",
"constantName": "org.apache.camel.component.docling.DoclingHeaders#TASK_STATUS"
},
+ "CamelDoclingTaskProgress": { "index": 33, "kind": "header",
"displayName": "", "group": "common", "label": "", "required": false,
"javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "Progress of the async conversion task,
when the server reports one", "constantName":
"org.apache.camel.component.docling.DoclingHeaders#TASK_PROGRESS" },
+ "CamelDoclingResult": { "index": 34, "kind": "header", "displayName": "",
"group": "common", "label": "", "required": false, "javaType": "String",
"deprecated": false, "deprecationNote": "", "autowired": false, "secret":
false, "description": "The converted document of a completed async conversion
task", "constantName":
"org.apache.camel.component.docling.DoclingHeaders#TASK_RESULT" },
+ "CamelDoclingErrorMessage": { "index": 35, "kind": "header",
"displayName": "", "group": "common", "label": "", "required": false,
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "The error message of a failed async
conversion task", "constantName":
"org.apache.camel.component.docling.DoclingHeaders#TASK_ERROR_MESSAGE" }
},
"bodyTypes": {
"consumerOut": { "carriers": [ "text" ], "description": "The document of
an async conversion that completed (SUBMIT_ASYNC_CONVERSION on the same
component), as text in the outputFormat it was submitted with: markdown by
default, JSON text for json. The task id is in the CamelDoclingTaskId header,
and a failed conversion goes to the error handler" },
diff --git
a/components/camel-ai/camel-docling/src/generated/resources/META-INF/org/apache/camel/component/docling/docling.json
b/components/camel-ai/camel-docling/src/generated/resources/META-INF/org/apache/camel/component/docling/docling.json
index 888016d0e876..94cf7371543e 100644
---
a/components/camel-ai/camel-docling/src/generated/resources/META-INF/org/apache/camel/component/docling/docling.json
+++
b/components/camel-ai/camel-docling/src/generated/resources/META-INF/org/apache/camel/component/docling/docling.json
@@ -115,7 +115,11 @@
"CamelDoclingMetadataRaw": { "index": 28, "kind": "header", "displayName":
"", "group": "common", "label": "", "required": false, "javaType": "Map<String,
Object>", "deprecated": false, "deprecationNote": "", "autowired": false,
"secret": false, "description": "Raw metadata fields as a Map", "constantName":
"org.apache.camel.component.docling.DoclingHeaders#METADATA_RAW" },
"CamelDoclingChunkingTokenizer": { "index": 29, "kind": "header",
"displayName": "", "group": "common", "label": "", "required": false,
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "Tokenizer for hybrid chunking (e.g.
sentence-transformers\/all-MiniLM-L6-v2)", "constantName":
"org.apache.camel.component.docling.DoclingHeaders#CHUNKING_TOKENIZER" },
"CamelDoclingChunkingMaxTokens": { "index": 30, "kind": "header",
"displayName": "", "group": "common", "label": "", "required": false,
"javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "Maximum tokens per chunk for hybrid
chunking", "constantName":
"org.apache.camel.component.docling.DoclingHeaders#CHUNKING_MAX_TOKENS" },
- "CamelDoclingChunkingMergePeers": { "index": 31, "kind": "header",
"displayName": "", "group": "common", "label": "", "required": false,
"javaType": "Boolean", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "Whether to merge peer chunks in hybrid
chunking", "constantName":
"org.apache.camel.component.docling.DoclingHeaders#CHUNKING_MERGE_PEERS" }
+ "CamelDoclingChunkingMergePeers": { "index": 31, "kind": "header",
"displayName": "", "group": "common", "label": "", "required": false,
"javaType": "Boolean", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "Whether to merge peer chunks in hybrid
chunking", "constantName":
"org.apache.camel.component.docling.DoclingHeaders#CHUNKING_MERGE_PEERS" },
+ "CamelDoclingTaskStatus": { "index": 32, "kind": "header", "displayName":
"", "group": "common", "label": "", "required": false, "javaType": "String",
"deprecated": false, "deprecationNote": "", "autowired": false, "secret":
false, "description": "Status of the async conversion task checked by
CHECK_CONVERSION_STATUS: PENDING, IN_PROGRESS, COMPLETED, FAILED or UNKNOWN",
"constantName": "org.apache.camel.component.docling.DoclingHeaders#TASK_STATUS"
},
+ "CamelDoclingTaskProgress": { "index": 33, "kind": "header",
"displayName": "", "group": "common", "label": "", "required": false,
"javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "Progress of the async conversion task,
when the server reports one", "constantName":
"org.apache.camel.component.docling.DoclingHeaders#TASK_PROGRESS" },
+ "CamelDoclingResult": { "index": 34, "kind": "header", "displayName": "",
"group": "common", "label": "", "required": false, "javaType": "String",
"deprecated": false, "deprecationNote": "", "autowired": false, "secret":
false, "description": "The converted document of a completed async conversion
task", "constantName":
"org.apache.camel.component.docling.DoclingHeaders#TASK_RESULT" },
+ "CamelDoclingErrorMessage": { "index": 35, "kind": "header",
"displayName": "", "group": "common", "label": "", "required": false,
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "The error message of a failed async
conversion task", "constantName":
"org.apache.camel.component.docling.DoclingHeaders#TASK_ERROR_MESSAGE" }
},
"bodyTypes": {
"consumerOut": { "carriers": [ "text" ], "description": "The document of
an async conversion that completed (SUBMIT_ASYNC_CONVERSION on the same
component), as text in the outputFormat it was submitted with: markdown by
default, JSON text for json. The task id is in the CamelDoclingTaskId header,
and a failed conversion goes to the error handler" },
diff --git
a/components/camel-ai/camel-docling/src/main/java/org/apache/camel/component/docling/DoclingHeaders.java
b/components/camel-ai/camel-docling/src/main/java/org/apache/camel/component/docling/DoclingHeaders.java
index 8c4aac66e4cd..ee529b2118c0 100644
---
a/components/camel-ai/camel-docling/src/main/java/org/apache/camel/component/docling/DoclingHeaders.java
+++
b/components/camel-ai/camel-docling/src/main/java/org/apache/camel/component/docling/DoclingHeaders.java
@@ -117,6 +117,20 @@ public final class DoclingHeaders {
@Metadata(description = "Whether to merge peer chunks in hybrid chunking",
javaType = "Boolean")
public static final String CHUNKING_MERGE_PEERS =
"CamelDoclingChunkingMergePeers";
+ @Metadata(description = "Status of the async conversion task checked by
CHECK_CONVERSION_STATUS: PENDING,"
+ + " IN_PROGRESS, COMPLETED, FAILED or UNKNOWN",
+ javaType = "String")
+ public static final String TASK_STATUS = "CamelDoclingTaskStatus";
+
+ @Metadata(description = "Progress of the async conversion task, when the
server reports one", javaType = "Integer")
+ public static final String TASK_PROGRESS = "CamelDoclingTaskProgress";
+
+ @Metadata(description = "The converted document of a completed async
conversion task", javaType = "String")
+ public static final String TASK_RESULT = "CamelDoclingResult";
+
+ @Metadata(description = "The error message of a failed async conversion
task", javaType = "String")
+ public static final String TASK_ERROR_MESSAGE = "CamelDoclingErrorMessage";
+
private DoclingHeaders() {
}
diff --git
a/components/camel-ai/camel-docling/src/main/java/org/apache/camel/component/docling/DoclingProducer.java
b/components/camel-ai/camel-docling/src/main/java/org/apache/camel/component/docling/DoclingProducer.java
index 2a234f11a013..6d0be017149f 100644
---
a/components/camel-ai/camel-docling/src/main/java/org/apache/camel/component/docling/DoclingProducer.java
+++
b/components/camel-ai/camel-docling/src/main/java/org/apache/camel/component/docling/DoclingProducer.java
@@ -416,18 +416,18 @@ public class DoclingProducer extends DefaultProducer {
// Set individual status fields as headers for easy access
exchange.getIn().setHeader(DoclingHeaders.TASK_ID, status.getTaskId());
- exchange.getIn().setHeader("CamelDoclingTaskStatus",
status.getStatus().toString());
+ exchange.getIn().setHeader(DoclingHeaders.TASK_STATUS,
status.getStatus().toString());
if (status.getProgress() != null) {
- exchange.getIn().setHeader("CamelDoclingTaskProgress",
status.getProgress());
+ exchange.getIn().setHeader(DoclingHeaders.TASK_PROGRESS,
status.getProgress());
}
if (status.isCompleted() && status.getResult() != null) {
- exchange.getIn().setHeader("CamelDoclingResult",
status.getResult());
+ exchange.getIn().setHeader(DoclingHeaders.TASK_RESULT,
status.getResult());
}
if (status.isFailed() && status.getErrorMessage() != null) {
- exchange.getIn().setHeader("CamelDoclingErrorMessage",
status.getErrorMessage());
+ exchange.getIn().setHeader(DoclingHeaders.TASK_ERROR_MESSAGE,
status.getErrorMessage());
}
}
diff --git
a/components/camel-ai/camel-docling/src/test/java/org/apache/camel/component/docling/DoclingAsyncConversionTest.java
b/components/camel-ai/camel-docling/src/test/java/org/apache/camel/component/docling/DoclingAsyncConversionTest.java
index b989129f092f..7845ed018a26 100644
---
a/components/camel-ai/camel-docling/src/test/java/org/apache/camel/component/docling/DoclingAsyncConversionTest.java
+++
b/components/camel-ai/camel-docling/src/test/java/org/apache/camel/component/docling/DoclingAsyncConversionTest.java
@@ -115,6 +115,14 @@ class DoclingAsyncConversionTest extends CamelTestSupport {
assertEquals(ConversionStatus.Status.COMPLETED, status.getStatus());
assertNotNull(status.getResult(), "Result should contain the converted
content");
+ // the status fields are also exposed as headers, under the names
DoclingHeaders declares
+ assertEquals("test-task-1",
exchange.getIn().getHeader(DoclingHeaders.TASK_ID));
+ assertEquals("COMPLETED",
exchange.getIn().getHeader(DoclingHeaders.TASK_STATUS));
+ assertEquals(status.getResult(),
exchange.getIn().getHeader(DoclingHeaders.TASK_RESULT));
+
assertNull(exchange.getIn().getHeader(DoclingHeaders.TASK_ERROR_MESSAGE));
+ // progress is only set when the status reports one, and a locally
tracked task does not
+ assertNull(exchange.getIn().getHeader(DoclingHeaders.TASK_PROGRESS));
+
// Future should be removed from map after completion
assertFalse(pendingTasks.containsKey("test-task-1"),
"Completed task should be removed from pending map");
@@ -141,6 +149,10 @@ class DoclingAsyncConversionTest extends CamelTestSupport {
assertInstanceOf(ConversionStatus.class, body);
ConversionStatus status = (ConversionStatus) body;
assertEquals(ConversionStatus.Status.IN_PROGRESS, status.getStatus());
+ assertEquals("IN_PROGRESS",
exchange.getIn().getHeader(DoclingHeaders.TASK_STATUS));
+ assertNull(exchange.getIn().getHeader(DoclingHeaders.TASK_RESULT));
+
assertNull(exchange.getIn().getHeader(DoclingHeaders.TASK_ERROR_MESSAGE));
+ assertNull(exchange.getIn().getHeader(DoclingHeaders.TASK_PROGRESS));
// Future should remain in map since it's not done yet
assertTrue(pendingTasks.containsKey("test-task-2"),
diff --git
a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/DoclingEndpointBuilderFactory.java
b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/DoclingEndpointBuilderFactory.java
index b41645d3c91d..731d2362de6a 100644
---
a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/DoclingEndpointBuilderFactory.java
+++
b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/DoclingEndpointBuilderFactory.java
@@ -5492,6 +5492,56 @@ public interface DoclingEndpointBuilderFactory {
public String doclingChunkingMergePeers() {
return "CamelDoclingChunkingMergePeers";
}
+ /**
+ * Status of the async conversion task checked by
+ * CHECK_CONVERSION_STATUS: PENDING, IN_PROGRESS, COMPLETED, FAILED or
+ * UNKNOWN.
+ *
+ * The option is a: {@code String} type.
+ *
+ * Group: common
+ *
+ * @return the name of the header {@code DoclingTaskStatus}.
+ */
+ public String doclingTaskStatus() {
+ return "CamelDoclingTaskStatus";
+ }
+ /**
+ * Progress of the async conversion task, when the server reports one.
+ *
+ * The option is a: {@code Integer} type.
+ *
+ * Group: common
+ *
+ * @return the name of the header {@code DoclingTaskProgress}.
+ */
+ public String doclingTaskProgress() {
+ return "CamelDoclingTaskProgress";
+ }
+ /**
+ * The converted document of a completed async conversion task.
+ *
+ * The option is a: {@code String} type.
+ *
+ * Group: common
+ *
+ * @return the name of the header {@code DoclingResult}.
+ */
+ public String doclingResult() {
+ return "CamelDoclingResult";
+ }
+ /**
+ * The error message of a failed async conversion task.
+ *
+ * The option is a: {@code String} type.
+ *
+ * Group: common
+ *
+ * @return the name of the header {@code DoclingErrorMessage}.
+ */
+ public String doclingErrorMessage() {
+ return "CamelDoclingErrorMessage";
+ }
}
static DoclingEndpointBuilder endpointBuilder(String componentName, String
path) {
class DoclingEndpointBuilderImpl extends AbstractEndpointBuilder
implements DoclingEndpointBuilder, AdvancedDoclingEndpointBuilder {