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 3eb4c51cb6eb CAMEL-26120: camel-bonita - startCase sets the id of the 
started case in a header, and a body that is not a Map fails with 
InvalidPayloadException (#28897)
3eb4c51cb6eb is described below

commit 3eb4c51cb6eb9ec034c04d595ae9c9142f79fd6a
Author: Claus Ibsen <[email protected]>
AuthorDate: Mon Nov 2 20:37:32 2026 +0100

    CAMEL-26120: camel-bonita - startCase sets the id of the started case in a 
header, and a body that is not a Map fails with InvalidPayloadException (#28897)
    
    … in a header, and a body that is not a Map fails with 
InvalidPayloadException
    
    The startCase producer ignored the CaseCreationResponse of Bonita, so the 
route
    could not know the id of the case it started. It is now set in the new
    CamelBonitaCaseId header; the body is unchanged.
    
    The producer read the body with getBody(Map.class), so a JSON text body (or 
no
    body) became null and failed with "The contract input is null". It now uses
    getMandatoryBody(Map.class), which fails with InvalidPayloadException naming
    the body type, before any request is sent to Bonita.
    
    Co-Authored-By: Claude Opus 5.5 <[email protected]>
    Signed-off-by: Claus Ibsen <[email protected]>
---
 .../apache/camel/catalog/components/bonita.json    |   7 +-
 .../camel/catalog/docs/bonita-component.adoc       |   5 +
 .../org/apache/camel/component/bonita/bonita.json  |   7 +-
 .../src/main/docs/bonita-component.adoc            |   5 +
 .../camel/component/bonita/BonitaConstants.java    |  32 +++++
 .../camel/component/bonita/BonitaEndpoint.java     |   7 +-
 .../bonita/producer/BonitaStartProducer.java       |   9 +-
 .../component/bonita/BonitaStartProducerTest.java  | 131 +++++++++++++++++++++
 .../ROOT/pages/camel-4x-upgrade-guide-4_24.adoc    |   8 ++
 .../builder/endpoint/EndpointHeaderBuilders.java   |  13 ++
 .../endpoint/dsl/BonitaEndpointBuilderFactory.java |  36 ++++++
 11 files changed, 252 insertions(+), 8 deletions(-)

diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/bonita.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/bonita.json
index 96428a8be75c..0d94c987e055 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/bonita.json
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/bonita.json
@@ -27,9 +27,12 @@
     "lazyStartProducer": { "index": 0, "kind": "property", "displayName": 
"Lazy Start Producer", "group": "producer", "label": "producer", "required": 
false, "type": "boolean", "javaType": "boolean", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": false, "description": 
"Whether the producer should be started lazy (on the first message). By 
starting lazy you can use this to allow CamelContext and routes to startup in 
situations where a producer may otherwise fail [...]
     "autowiredEnabled": { "index": 1, "kind": "property", "displayName": 
"Autowired Enabled", "group": "advanced", "label": "advanced", "required": 
false, "type": "boolean", "javaType": "boolean", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": true, "description": 
"Whether autowiring is enabled. This is used for automatic autowiring options 
(the option must be marked as autowired) by looking up in the registry to find 
if there is a single instance of matching t [...]
   },
+  "headers": {
+    "CamelBonitaCaseId": { "index": 0, "kind": "header", "displayName": "", 
"group": "producer", "label": "producer", "required": false, "javaType": 
"String", "deprecated": false, "deprecationNote": "", "autowired": false, 
"secret": false, "description": "The id of the case that the startCase 
operation started.", "constantName": 
"org.apache.camel.component.bonita.BonitaConstants#CASE_ID" }
+  },
   "bodyTypes": {
-    "producerIn": { "carriers": [ "map" ], "description": "The contract inputs 
of the process: a Map of the input names and their Serializable values, a 
FileInput for a file to upload. Any other body, also JSON text, fails as no 
contract input: unmarshal it to a Map first" },
-    "producerOut": { "carriers": [ "unchanged" ], "description": "The Map of 
the inputs, in which each FileInput is replaced by a Map of its filename and 
the tempPath of the upload. The id of the case started is not kept" }
+    "producerIn": { "carriers": [ "map" ], "description": "The contract inputs 
of the process: a Map of the input names and their Serializable values, a 
FileInput for a file to upload. Any other body, also JSON text, fails with an 
InvalidPayloadException: unmarshal it to a Map first" },
+    "producerOut": { "carriers": [ "unchanged" ], "description": "The Map of 
the inputs, in which each FileInput is replaced by a Map of its filename and 
the tempPath of the upload. The id of the case started is in the 
CamelBonitaCaseId header" }
   },
   "properties": {
     "operation": { "index": 0, "kind": "path", "displayName": "Operation", 
"group": "producer", "label": "", "required": true, "type": "enum", "javaType": 
"org.apache.camel.component.bonita.util.BonitaOperation", "enum": [ "startCase" 
], "deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "configurationClass": 
"org.apache.camel.component.bonita.BonitaConfiguration", "configurationField": 
"configuration", "description": "Operation to use" },
diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/bonita-component.adoc
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/bonita-component.adoc
index 570b385b9886..2ebe66b71ae8 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/bonita-component.adoc
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/bonita-component.adoc
@@ -34,6 +34,11 @@ include::partial$component-endpoint-headers.adoc[]
 
 For the startCase operation, the input variables are retrieved from the body 
message.
 This one has to contain a `Map<String,Serializable>`.
+Any other body, also JSON text, fails with an `InvalidPayloadException`: 
unmarshal JSON text to a `Map` first
+(for example with `unmarshal().json()`).
+
+After the operation, the body is still the `Map` of the inputs.
+The id of the started case is set in the `CamelBonitaCaseId` header.
 
 
 == Examples
diff --git 
a/components/camel-bonita/src/generated/resources/META-INF/org/apache/camel/component/bonita/bonita.json
 
b/components/camel-bonita/src/generated/resources/META-INF/org/apache/camel/component/bonita/bonita.json
index 96428a8be75c..0d94c987e055 100644
--- 
a/components/camel-bonita/src/generated/resources/META-INF/org/apache/camel/component/bonita/bonita.json
+++ 
b/components/camel-bonita/src/generated/resources/META-INF/org/apache/camel/component/bonita/bonita.json
@@ -27,9 +27,12 @@
     "lazyStartProducer": { "index": 0, "kind": "property", "displayName": 
"Lazy Start Producer", "group": "producer", "label": "producer", "required": 
false, "type": "boolean", "javaType": "boolean", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": false, "description": 
"Whether the producer should be started lazy (on the first message). By 
starting lazy you can use this to allow CamelContext and routes to startup in 
situations where a producer may otherwise fail [...]
     "autowiredEnabled": { "index": 1, "kind": "property", "displayName": 
"Autowired Enabled", "group": "advanced", "label": "advanced", "required": 
false, "type": "boolean", "javaType": "boolean", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": true, "description": 
"Whether autowiring is enabled. This is used for automatic autowiring options 
(the option must be marked as autowired) by looking up in the registry to find 
if there is a single instance of matching t [...]
   },
+  "headers": {
+    "CamelBonitaCaseId": { "index": 0, "kind": "header", "displayName": "", 
"group": "producer", "label": "producer", "required": false, "javaType": 
"String", "deprecated": false, "deprecationNote": "", "autowired": false, 
"secret": false, "description": "The id of the case that the startCase 
operation started.", "constantName": 
"org.apache.camel.component.bonita.BonitaConstants#CASE_ID" }
+  },
   "bodyTypes": {
-    "producerIn": { "carriers": [ "map" ], "description": "The contract inputs 
of the process: a Map of the input names and their Serializable values, a 
FileInput for a file to upload. Any other body, also JSON text, fails as no 
contract input: unmarshal it to a Map first" },
-    "producerOut": { "carriers": [ "unchanged" ], "description": "The Map of 
the inputs, in which each FileInput is replaced by a Map of its filename and 
the tempPath of the upload. The id of the case started is not kept" }
+    "producerIn": { "carriers": [ "map" ], "description": "The contract inputs 
of the process: a Map of the input names and their Serializable values, a 
FileInput for a file to upload. Any other body, also JSON text, fails with an 
InvalidPayloadException: unmarshal it to a Map first" },
+    "producerOut": { "carriers": [ "unchanged" ], "description": "The Map of 
the inputs, in which each FileInput is replaced by a Map of its filename and 
the tempPath of the upload. The id of the case started is in the 
CamelBonitaCaseId header" }
   },
   "properties": {
     "operation": { "index": 0, "kind": "path", "displayName": "Operation", 
"group": "producer", "label": "", "required": true, "type": "enum", "javaType": 
"org.apache.camel.component.bonita.util.BonitaOperation", "enum": [ "startCase" 
], "deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "configurationClass": 
"org.apache.camel.component.bonita.BonitaConfiguration", "configurationField": 
"configuration", "description": "Operation to use" },
diff --git a/components/camel-bonita/src/main/docs/bonita-component.adoc 
b/components/camel-bonita/src/main/docs/bonita-component.adoc
index 570b385b9886..2ebe66b71ae8 100644
--- a/components/camel-bonita/src/main/docs/bonita-component.adoc
+++ b/components/camel-bonita/src/main/docs/bonita-component.adoc
@@ -34,6 +34,11 @@ include::partial$component-endpoint-headers.adoc[]
 
 For the startCase operation, the input variables are retrieved from the body 
message.
 This one has to contain a `Map<String,Serializable>`.
+Any other body, also JSON text, fails with an `InvalidPayloadException`: 
unmarshal JSON text to a `Map` first
+(for example with `unmarshal().json()`).
+
+After the operation, the body is still the `Map` of the inputs.
+The id of the started case is set in the `CamelBonitaCaseId` header.
 
 
 == Examples
diff --git 
a/components/camel-bonita/src/main/java/org/apache/camel/component/bonita/BonitaConstants.java
 
b/components/camel-bonita/src/main/java/org/apache/camel/component/bonita/BonitaConstants.java
new file mode 100644
index 000000000000..f2391f8b2b59
--- /dev/null
+++ 
b/components/camel-bonita/src/main/java/org/apache/camel/component/bonita/BonitaConstants.java
@@ -0,0 +1,32 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.bonita;
+
+import org.apache.camel.spi.Metadata;
+
+/**
+ * The headers of the bonita component.
+ */
+public final class BonitaConstants {
+
+    @Metadata(label = "producer", description = "The id of the case that the 
startCase operation started.",
+              javaType = "String")
+    public static final String CASE_ID = "CamelBonitaCaseId";
+
+    private BonitaConstants() {
+    }
+}
diff --git 
a/components/camel-bonita/src/main/java/org/apache/camel/component/bonita/BonitaEndpoint.java
 
b/components/camel-bonita/src/main/java/org/apache/camel/component/bonita/BonitaEndpoint.java
index 90f6673ced81..3242cdff7d32 100644
--- 
a/components/camel-bonita/src/main/java/org/apache/camel/component/bonita/BonitaEndpoint.java
+++ 
b/components/camel-bonita/src/main/java/org/apache/camel/component/bonita/BonitaEndpoint.java
@@ -37,15 +37,16 @@ import org.apache.camel.support.DefaultEndpoint;
  * Communicate with a remote Bonita BPM process engine.
  */
 @UriEndpoint(firstVersion = "2.19.0", scheme = "bonita", title = "Bonita", 
syntax = "bonita:operation", producerOnly = true,
-             category = { Category.WORKFLOW })
+             category = { Category.WORKFLOW }, headersClass = 
BonitaConstants.class)
 @BodyTypes(producerIn = @BodyType(value = Carrier.MAP,
                                   description = "The contract inputs of the 
process: a Map of the input names and their"
                                                 + " Serializable values, a 
FileInput for a file to upload. Any other body,"
-                                                + " also JSON text, fails as 
no contract input: unmarshal it to a Map first"),
+                                                + " also JSON text, fails with 
an InvalidPayloadException: unmarshal it to a"
+                                                + " Map first"),
            producerOut = @BodyType(value = Carrier.UNCHANGED,
                                    description = "The Map of the inputs, in 
which each FileInput is replaced by a Map of its"
                                                  + " filename and the tempPath 
of the upload. The id of the case started is"
-                                                 + " not kept"))
+                                                 + " in the CamelBonitaCaseId 
header"))
 public class BonitaEndpoint extends DefaultEndpoint implements 
EndpointServiceLocation {
 
     @UriParam
diff --git 
a/components/camel-bonita/src/main/java/org/apache/camel/component/bonita/producer/BonitaStartProducer.java
 
b/components/camel-bonita/src/main/java/org/apache/camel/component/bonita/producer/BonitaStartProducer.java
index 34827b503018..4a0ef06c5f18 100644
--- 
a/components/camel-bonita/src/main/java/org/apache/camel/component/bonita/producer/BonitaStartProducer.java
+++ 
b/components/camel-bonita/src/main/java/org/apache/camel/component/bonita/producer/BonitaStartProducer.java
@@ -23,9 +23,11 @@ import jakarta.ws.rs.client.ClientBuilder;
 
 import org.apache.camel.Exchange;
 import org.apache.camel.component.bonita.BonitaConfiguration;
+import org.apache.camel.component.bonita.BonitaConstants;
 import org.apache.camel.component.bonita.BonitaEndpoint;
 import org.apache.camel.component.bonita.api.BonitaAPI;
 import org.apache.camel.component.bonita.api.BonitaAPIBuilder;
+import org.apache.camel.component.bonita.api.model.CaseCreationResponse;
 import org.apache.camel.component.bonita.api.model.ProcessDefinitionResponse;
 import org.apache.camel.component.bonita.api.util.BonitaAPIConfig;
 
@@ -65,10 +67,15 @@ public class BonitaStartProducer extends BonitaProducer {
 
     @Override
     public void process(Exchange exchange) throws Exception {
+        // a body that is not a Map (such as JSON text) fails here with its 
type, not as a null contract input
+        Map inputs = exchange.getIn().getMandatoryBody(Map.class);
         String processName = this.configuration.getProcessName();
         BonitaAPI api = bonitaApi;
         ProcessDefinitionResponse processDefinition = 
api.getProcessDefinition(processName);
-        api.startCase(processDefinition, exchange.getIn().getBody(Map.class));
+        CaseCreationResponse response = api.startCase(processDefinition, 
inputs);
+        if (response != null) {
+            exchange.getMessage().setHeader(BonitaConstants.CASE_ID, 
response.getCaseId());
+        }
     }
 
 }
diff --git 
a/components/camel-bonita/src/test/java/org/apache/camel/component/bonita/BonitaStartProducerTest.java
 
b/components/camel-bonita/src/test/java/org/apache/camel/component/bonita/BonitaStartProducerTest.java
new file mode 100644
index 000000000000..16254e135eb6
--- /dev/null
+++ 
b/components/camel-bonita/src/test/java/org/apache/camel/component/bonita/BonitaStartProducerTest.java
@@ -0,0 +1,131 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.bonita;
+
+import java.io.Serializable;
+import java.util.HashMap;
+import java.util.Map;
+
+import com.github.tomakehurst.wiremock.WireMockServer;
+import com.github.tomakehurst.wiremock.core.WireMockConfiguration;
+import org.apache.camel.CamelContext;
+import org.apache.camel.Exchange;
+import org.apache.camel.InvalidPayloadException;
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.impl.DefaultCamelContext;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import static com.github.tomakehurst.wiremock.client.WireMock.aResponse;
+import static com.github.tomakehurst.wiremock.client.WireMock.anyRequestedFor;
+import static com.github.tomakehurst.wiremock.client.WireMock.equalTo;
+import static com.github.tomakehurst.wiremock.client.WireMock.get;
+import static com.github.tomakehurst.wiremock.client.WireMock.post;
+import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo;
+import static com.github.tomakehurst.wiremock.client.WireMock.urlPathEqualTo;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertInstanceOf;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertSame;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+/**
+ * Starts cases on a Bonita server (WireMock) and checks what the exchange 
carries afterwards: the id of the started
+ * case, or the failure of a body that is not a Map of contract inputs.
+ */
+class BonitaStartProducerTest {
+
+    private static final String LOGIN = "/bonita/loginservice";
+    private static final String PROCESS = "/bonita/API/bpm/process";
+    private static final String INSTANTIATION = 
"/bonita/API/bpm/process/7/instantiation";
+
+    private WireMockServer server;
+    private CamelContext context;
+    private ProducerTemplate template;
+
+    @BeforeEach
+    void setup() throws Exception {
+        server = new 
WireMockServer(WireMockConfiguration.options().dynamicPort());
+        server.start();
+        server.stubFor(post(urlEqualTo(LOGIN))
+                .willReturn(aResponse().withHeader("Set-Cookie", 
"JSESSIONID=session", "X-Bonita-API-Token=token")));
+        server.stubFor(get(urlPathEqualTo(PROCESS)).withQueryParam("s", 
equalTo("orders"))
+                .willReturn(aResponse().withHeader("Content-Type", 
"application/json")
+                        
.withBody("[{\"id\":\"7\",\"name\":\"orders\",\"version\":\"1.0\"}]")));
+        server.stubFor(post(urlEqualTo(INSTANTIATION))
+                .willReturn(aResponse().withHeader("Content-Type", 
"application/json").withBody("{\"caseId\":\"4021\"}")));
+
+        context = new DefaultCamelContext();
+        context.addRoutes(new RouteBuilder() {
+            @Override
+            public void configure() {
+                from("direct:start")
+                        .to("bonita:startCase?hostname=localhost&port=" + 
server.port()
+                            + 
"&processName=orders&username=user&password=pass");
+            }
+        });
+        context.start();
+        template = context.createProducerTemplate();
+    }
+
+    @AfterEach
+    void tearDown() {
+        if (template != null) {
+            template.stop();
+        }
+        if (context != null) {
+            context.stop();
+        }
+        if (server != null) {
+            server.stop();
+        }
+    }
+
+    @Test
+    void caseIdOfTheStartedCaseIsInAHeader() {
+        Map<String, Serializable> inputs = new HashMap<>();
+        inputs.put("amount", 1);
+
+        Exchange exchange = template.send("direct:start", e -> 
e.getIn().setBody(inputs));
+
+        assertNull(exchange.getException(), "exception of the exchange");
+        assertEquals("4021", 
exchange.getMessage().getHeader(BonitaConstants.CASE_ID), "case id header");
+        assertSame(inputs, exchange.getMessage().getBody(), "body after the 
case started");
+        assertEquals(1, 
server.findAll(anyRequestedFor(urlEqualTo(INSTANTIATION))).size(), "cases 
started");
+    }
+
+    @Test
+    void jsonTextBodyFailsWithItsType() {
+        Exchange exchange = template.send("direct:start", e -> 
e.getIn().setBody("{\"amount\":1}"));
+
+        InvalidPayloadException cause = 
assertInstanceOf(InvalidPayloadException.class, exchange.getException());
+        assertEquals(Map.class, cause.getType(), "required body type");
+        assertTrue(cause.getMessage().contains("java.lang.String"), "message 
names the body type: " + cause.getMessage());
+        assertNull(exchange.getMessage().getHeader(BonitaConstants.CASE_ID), 
"case id header");
+        assertEquals(0, 
server.findAll(anyRequestedFor(urlEqualTo(INSTANTIATION))).size(), "cases 
started");
+    }
+
+    @Test
+    void missingBodyFailsAsNoBody() {
+        Exchange exchange = template.send("direct:start", e -> 
e.getIn().setBody(null));
+
+        assertInstanceOf(InvalidPayloadException.class, 
exchange.getException());
+        assertEquals(0, 
server.findAll(anyRequestedFor(urlEqualTo(INSTANTIATION))).size(), "cases 
started");
+    }
+}
diff --git 
a/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_24.adoc 
b/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_24.adoc
index f00682a2b3e4..603bc21117e4 100644
--- a/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_24.adoc
+++ b/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_24.adoc
@@ -4682,3 +4682,11 @@ stopped and started again now fires again, and so does a 
once route after the Ca
 again; before, the start failed with `IllegalStateException: Task already 
scheduled or cancelled`.
 
 The protected method `OnceConsumer.scheduleTask(TimerTask, Timer)` is replaced 
by `scheduleTask()`.
+
+=== camel-bonita - startCase fails with InvalidPayloadException for a body 
that is not a Map
+
+The `startCase` operation now fails with 
`org.apache.camel.InvalidPayloadException` when the body is missing or cannot
+be converted to a `Map`, such as JSON text. Before, it failed with 
`IllegalArgumentException: The contract input is
+null`, also when a body was sent. Unmarshal JSON text to a `Map` before the 
bonita endpoint.
+
+The id of the started case is now set in the `CamelBonitaCaseId` header.
diff --git 
a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/EndpointHeaderBuilders.java
 
b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/EndpointHeaderBuilders.java
index f33dda1a3c1e..3599c5ad2da7 100644
--- 
a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/EndpointHeaderBuilders.java
+++ 
b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/EndpointHeaderBuilders.java
@@ -905,6 +905,19 @@ public class EndpointHeaderBuilders {
     public static QueueEndpointBuilderFactory.QueueHeaderNameBuilder 
azureStorageQueue() {
         return QueueEndpointBuilderFactory.QueueHeaderNameBuilder.INSTANCE;
     }
+    /**
+     * Bonita (camel-bonita)
+     * Communicate with a remote Bonita BPM process engine.
+     * 
+     * Category: workflow
+     * Since: 2.19
+     * Maven coordinates: org.apache.camel:camel-bonita
+     * 
+     * @return the dsl builder for the headers' name.
+     */
+    public static BonitaEndpointBuilderFactory.BonitaHeaderNameBuilder 
bonita() {
+        return BonitaEndpointBuilderFactory.BonitaHeaderNameBuilder.INSTANCE;
+    }
     /**
      * Box (camel-box)
      * Upload, download and manage files, folders, groups, collaborations, etc.
diff --git 
a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/BonitaEndpointBuilderFactory.java
 
b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/BonitaEndpointBuilderFactory.java
index 64088c4a3a21..9b1e49e9f2f4 100644
--- 
a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/BonitaEndpointBuilderFactory.java
+++ 
b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/BonitaEndpointBuilderFactory.java
@@ -177,6 +177,19 @@ public interface BonitaEndpointBuilderFactory {
     }
 
     public interface BonitaBuilders {
+        /**
+         * Bonita (camel-bonita)
+         * Communicate with a remote Bonita BPM process engine.
+         * 
+         * Category: workflow
+         * Since: 2.19
+         * Maven coordinates: org.apache.camel:camel-bonita
+         * 
+         * @return the dsl builder for the headers' name.
+         */
+        default BonitaHeaderNameBuilder bonita() {
+            return BonitaHeaderNameBuilder.INSTANCE;
+        }
         /**
          * Bonita (camel-bonita)
          * Communicate with a remote Bonita BPM process engine.
@@ -221,6 +234,29 @@ public interface BonitaEndpointBuilderFactory {
         }
 
     }
+    /**
+     * The builder of headers' name for the Bonita component.
+     */
+    public static class BonitaHeaderNameBuilder {
+        /**
+         * The internal instance of the builder used to access to all the
+         * methods representing the name of headers.
+         */
+        public static final BonitaHeaderNameBuilder INSTANCE = new 
BonitaHeaderNameBuilder();
+
+        /**
+         * The id of the case that the startCase operation started.
+         * 
+         * The option is a: {@code String} type.
+         * 
+         * Group: producer
+         * 
+         * @return the name of the header {@code BonitaCaseId}.
+         */
+        public String bonitaCaseId() {
+            return "CamelBonitaCaseId";
+        }
+    }
     static BonitaEndpointBuilder endpointBuilder(String componentName, String 
path) {
         class BonitaEndpointBuilderImpl extends AbstractEndpointBuilder 
implements BonitaEndpointBuilder, AdvancedBonitaEndpointBuilder {
             public BonitaEndpointBuilderImpl(String path) {

Reply via email to