A community extension for Camunda Platform 7 to use Camunda REST API in Java. Java-Client is generated from OpenAPI-Definition.
<plugin>
<groupId>org.openapitools</groupId>
<artifactId>openapi-generator-maven-plugin</artifactId>
<version>${openapi-generator.version}</version>
<executions>
<execution>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<inputSpec>/openapi.json</inputSpec>
<generatorName>java</generatorName>
<generateApiTests>false</generateApiTests>
<generateModelTests>false</generateModelTests>
<configOptions>
<library>resttemplate</library>
<basePackage>org.camunda.bpm.rest.client</basePackage>
<apiPackage>org.camunda.bpm.rest.client.api</apiPackage>
<modelPackage>org.camunda.bpm.rest.client.model</modelPackage>
<java8>${openapi-generator.java8}</java8>
<useSpringBoot3>${openapi-generator.useSpringBoot3}</useSpringBoot3>
<useJakartaEe>${openapi-generator.useJakartaEe}</useJakartaEe>
<dateLibrary>legacy</dateLibrary>
<openApiNullable>false</openApiNullable>
<!-- Set containers (array, set, map) default to null (default false), see
https://github.com/OpenAPITools/openapi-generator/blob/master/docs/generators/java.md#config-options
https://github.com/OpenAPITools/openapi-generator/pull/14130 -->
<containerDefaultToNull>true</containerDefaultToNull>
</configOptions>
<globalProperties>
<skipFormModel>false</skipFormModel>
</globalProperties>
</configuration>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.camunda.bpm</groupId>
<artifactId>camunda-engine-rest-openapi</artifactId>
<version>${camunda.version}</version>
</dependency>
</dependencies>
</plugin>We support 2 Versions:
- Version for Spring Boot 2 (last Version 2.7.18, see here) and JDK8+
- camunda-bpm-restclient-spring (Spring 5.x)
- camunda-bpm-restclient-spring-boot-starter
- Version for Spring Boot 3 (actual 3.3.5) and JDK17+
- camunda-bpm-restclient-spring6 (Spring 6.x)
- camunda-bpm-restclient-spring-boot3-starter
With Spring Boot Starter:
<dependency>
<groupId>camunda-bpm-examples</groupId>
<artifactId>camunda-bpm-restclient-spring-boot3-starter</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>Starter-Activation: application.properties
# Camunda REST API
camunda.rest.url=http://localhost:8080/engine-rest
camunda.rest.user=admin
camunda.rest.password=adminService:
import java.util.Map;
import org.camunda.bpm.rest.client.model.CompleteTaskDto;
import org.camunda.bpm.rest.client.model.VariableValueDto;
import org.camunda.bpm.rest.client.util.WorkflowHelper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.google.common.collect.Maps;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@Service
public class CamundaService {
@Autowired
private WorkflowHelper workflowHelper;
public void completeTask(String taskId, Map<String, Object> variables) {
log.info("Completing task '{}': {}", taskId, variables);
Map<String, VariableValueDto> taskVariables = Maps.newHashMap();
variables.forEach((key, value) -> taskVariables.put(key, new VariableValueDto().value(value)));
var taskDto = new CompleteTaskDto()
.variables(taskVariables);
workflowHelper.getTaskApi().complete(taskId, taskDto);
}
}Without Spring Boot Starter:
<dependency>
<groupId>camunda-bpm-examples</groupId>
<artifactId>camunda-bpm-restclient-spring6</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>Spring Config:
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
import org.camunda.bpm.rest.client.ApiClient;
import org.camunda.bpm.rest.client.api.TaskApi;
@Configuration
public class CamundaConfig {
private static final String BASE_PATH = "http://localhost:8080/engine-rest";
public static final String BASIC_AUTH_USERNAME = "admin";
public static final String BASIC_AUTH_PASSWORD = "admin";
@Bean
public ApiClient apiClient(@Qualifier("camundaRestTemplate") RestTemplate restTemplate) {
var apiClient = new ApiClient(restTemplate).setBasePath(BASE_PATH);
apiClient.setUsername(BASIC_AUTH_USERNAME);
apiClient.setPassword(BASIC_AUTH_PASSWORD);
return apiClient;
}
@Bean
public TaskApi taskApi(ApiClient apiClient) {
return new TaskApi(apiClient);
}
}mvn dependency-check:aggregate -Pdependency-check
