簡體   English   中英

Camunda Rest 響應是否有 Java 類?

[英]Are there Java classes for Camunda Rest responses?

我目前正在嘗試使用 camunda rest741A5DA5E7D1D1Z 將 REST 調用從 Spring 設置到我的本地 camunda 實例。

這是我的設置方式:

  1. Started a local camunda docker container on my localhost:8080 like this: https://hub.docker.com/r/camunda/camunda-bpm-platform (i've tested calls with postman and they are working)

  2. 在我的pom.xml中使用幾個 camunda 和 rest 依賴項構建了一個 maven 項目:

        <dependency>
            <groupId>org.camunda.bpm.springboot</groupId>
            <artifactId>camunda-bpm-spring-boot-starter</artifactId>
            <version>3.3.1</version>
        </dependency>

        <dependency>
            <groupId>org.camunda.bpm</groupId>
            <artifactId>camunda-engine-rest-core</artifactId>
            <version>7.11.0</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-webflux</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectreactor</groupId>
            <artifactId>reactor-spring</artifactId>
            <version>1.0.1.RELEASE</version>
        </dependency>
  1. Wrote a simple service to make rest calls from Spring (taken from https://docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#boot-features-webclient ):
import org.camunda.bpm.engine.impl.persistence.entity.ProcessDefinitionEntity;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Service;
import org.springframework.web.reactive.function.client.WebClient;
import reactor.core.publisher.Mono;

@Service
public class MyExampleService {

    private final WebClient webClient;

    public MyExampleService (WebClient.Builder webClientBuilder) {
        this.webClient = webClientBuilder.baseUrl("http://localhost:8080").build();
    }

    @Override
    public ProcessDefinitionEntity[] getCamundaProcesses() {

        ProcessDefinitionEntity[] myResponse = this.webClient.get().uri("/engine-rest/process-definition/")
                .retrieve()
                .onStatus(HttpStatus::is4xxClientError, response -> {
                    System.out.println("4xx eror");
                    return Mono.error(new RuntimeException("4xx"));
                })
                .onStatus(HttpStatus::is5xxServerError, response -> {
                    System.out.println("5xx eror");
                    return Mono.error(new RuntimeException("5xx"));
                })
                .bodyToMono(ProcessDefinitionEntity[].class)
                .block();

        return myResponse;
}

So I basically used Spring WebClient to make a rest call to localhost:8080/engine-rest/deployment/ which should give me a list of all processes as JSON (according to https://docs.camunda.org/manual/latest/參考/休息/部署/獲取查詢/ )。

現在,當我將響應直接轉換為 ProcessDefinitionEntity[] 時,它不會將 JSON 轉換為它。 我還嘗試了來自camunda Java API( https://docs.camunda.org/javadoc/camunda-bpm-platform ProcessDefinitionDto的其他類

似乎沒有一個課程適合我從 camunda 得到的回應。 響應如下所示:

[
    {
        "id": "invoice:1:cdbc3f02-e6a1-11e9-8de8-0242ac110002",
        "key": "invoice",
        "category": "http://www.omg.org/spec/BPMN/20100524/MODEL",
        "description": null,
        "name": "Invoice Receipt",
        "version": 1,
        "resource": "invoice.v1.bpmn",
        "deploymentId": "cda115de-e6a1-11e9-8de8-0242ac110002",
        "diagram": null,
        "suspended": false,
        "tenantId": null,
        "versionTag": "V1.0",
        "historyTimeToLive": 30,
        "startableInTasklist": true
    },
    {
        "id": "invoice:2:ce03f66c-e6a1-11e9-8de8-0242ac110002",
        "key": "invoice",
        "category": "http://www.omg.org/spec/BPMN/20100524/MODEL",
        "description": null,
        "name": "Invoice Receipt",
        "version": 2,
        "resource": "invoice.v2.bpmn",
        "deploymentId": "cdfbb908-e6a1-11e9-8de8-0242ac110002",
        "diagram": null,
        "suspended": false,
        "tenantId": null,
        "versionTag": "V2.0",
        "historyTimeToLive": 45,
        "startableInTasklist": true
    }
]

(這只是 docker 容器中的兩個標准進程)

camunda java api 中是否有正確匹配來自 camunda rest74D7A38 的響應的類?

PS:我從 maven 依賴項(位於package org.camunda.bpm.engine.rest.dto.repository.ProcessDefinitionDto中獲得的 ProcessDefinitionDto 看起來像 this)

public class ProcessDefinitionDto {
    protected String id;
    protected String key;
    protected String category;
    protected String description;
    protected String name;
    protected int version;
    protected String resource;
    protected String deploymentId;
    protected String diagram;
    protected boolean suspended;
    protected String tenantId;
    protected String versionTag;
    protected Integer historyTimeToLive;
    protected boolean isStartableInTasklist;
...

我從 postman 調用http://localhost:8080/engine-rest/process-definition得到的響應如下所示:

[
    {
        "id": "b506eb34-e6b1-11e9-8de8-0242ac110002",
        "key": "example_workflow",
        "category": "http://bpmn.io/schema/bpmn",
        "description": null,
        "name": "Just an Example",
        "version": 1,
        "resource": "example_workflow.bpmn",
        "deploymentId": "b503b6e2-e6b1-11e9-8de8-0242ac110002",
        "diagram": null,
        "suspended": false,
        "tenantId": null,
        "versionTag": null,
        "historyTimeToLive": null,
        "startableInTasklist": true
    },
    {
        "id": "invoice:1:cdbc3f02-e6a1-11e9-8de8-0242ac110002",
        "key": "invoice",
        "category": "http://www.omg.org/spec/BPMN/20100524/MODEL",
        "description": null,
        "name": "Invoice Receipt",
        "version": 1,
        "resource": "invoice.v1.bpmn",
        "deploymentId": "cda115de-e6a1-11e9-8de8-0242ac110002",
        "diagram": null,
        "suspended": false,
        "tenantId": null,
        "versionTag": "V1.0",
        "historyTimeToLive": 30,
        "startableInTasklist": true
    },
    {
        "id": "invoice:2:ce03f66c-e6a1-11e9-8de8-0242ac110002",
        "key": "invoice",
        "category": "http://www.omg.org/spec/BPMN/20100524/MODEL",
        "description": null,
        "name": "Invoice Receipt",
        "version": 2,
        "resource": "invoice.v2.bpmn",
        "deploymentId": "cdfbb908-e6a1-11e9-8de8-0242ac110002",
        "diagram": null,
        "suspended": false,
        "tenantId": null,
        "versionTag": "V2.0",
        "historyTimeToLive": 45,
        "startableInTasklist": true
    }
]

中的班級

org.camunda.bpm.engine.rest.dto.runtime

是合適的。 https://github.com/camunda/camunda-bpm-platform/tree/master/engine-rest/engine-rest/src/main/java/org/camunda/bpm/engine/rest/dto

<dependency>
  <groupId>org.camunda.bpm</groupId>
  <artifactId>camunda-engine-rest-core</artifactId>
</dependency>

在您的情況下,它將是帶有 Spring REST 模板的ProcessDefinitionDto使用示例:

@Service
@Slf4j
public class RuntimeServiceImpl implements RuntimeService {

    private final RestTemplate rest;
    @Value("${camunda.server.rest.url}")
    private String restURL;

    public RuntimeServiceImpl(RestTemplateBuilder builder) {
        this.rest = builder.build();
    }

    public ProcessDefinitionDto[] getProcessDefinitions() {

        ResponseEntity<ProcessDefinitionDto[]> response = rest.getForEntity(restURL + "process-definition/",
                ProcessDefinitionDto[].class);
        ProcessDefinitionDto[] processes = response.getBody();

        Arrays.stream(processes).forEach(pd -> log.info("Found process definition {} with id {} and key {}", pd.getName(), pd.getId(), pd.getKey()));

        return processes;
    }
}

完整的客戶端項目: https://github.com/rob2universe/camunda-rest-client

外部 class 客戶端包含更多可以重用的接口和 DTO,例如

org.camunda.bpm.client.topic.impl.dto.FetchAndLockRequestDto; org.camunda.bpm.client.topic.impl.dto.TopicRequestDto;

或者只是使用 / fork 完整的客戶端項目。 那里已經為您完成了很多工作。

Ps 以下評論:響應包括具有這些字段的流程定義數組:

[
    {
        "id": "AccountOpening:1:a6f88770-0ae7-11ea-9ef3-00155d00d800",
        "key": "AccountOpening",
        "category": "http://bpmn.io/schema/bpmn",
        "description": null,
        "name": "Account Opening",
        "version": 1,
        "resource": "C:\\account-opening\\target\\classes\\bpmn\\AccountOpening.bpmn",
        "deploymentId": "a6cc4747-0ae7-11ea-9ef3-00155d00d800",
        "diagram": null,
        "suspended": false,
        "tenantId": null,
        "versionTag": null,
        "historyTimeToLive": null,
        "startableInTasklist": true
    }

package org.camunda.bpm.engine.rest.dto.repository中的目標數據結構包含相同的字段:

public class ProcessDefinitionDto {
    protected String id;
    protected String key;
    protected String category;
    protected String description;
    protected String name;
    protected int version;
    protected String resource;
    protected String deploymentId;
    protected String diagram;
    protected boolean suspended;
    protected String tenantId;
    protected String versionTag;
    protected Integer historyTimeToLive;
    protected boolean isStartableInTasklist;
   ...}

如果反序列化失敗,請確保您使用的是正確的 package(例如 org.camunda.bpm.cockpit.impl.plugin.base.dto)

你在看正確的 package 嗎? Camunda 代碼庫中有多個 ProcessDefinitionDto 類。 您正在尋找的是 package org.camunda.bpm.engine.rest.dto.repository in camunda-engine-rest-core.Z68995FCBF432492D140Z84DAC

class 看起來像這樣,與您的 output 完全匹配:

package org.camunda.bpm.engine.rest.dto.repository;

import org.camunda.bpm.engine.repository.ProcessDefinition;

public class ProcessDefinitionDto {

  protected String id;
  protected String key;
  protected String category;
  protected String description;
  protected String name;
  protected int version;
  protected String resource;
  protected String deploymentId;
  protected String diagram;
  protected boolean suspended;
  protected String tenantId;
  protected String versionTag;
  protected Integer historyTimeToLive;
  protected boolean isStartableInTasklist;

  ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM