Spring Boot Camunda中的自定义REST端点

zaqlnxep  于 2023-05-17  发布在  Spring
关注(0)|答案(1)|浏览(266)

我正在尝试在Camunda中创建自定义REST API。我的Camunda应用程序是独立的,我想创建一个自定义REST API来完成任务并发送响应。
我创建了一个单独的REST项目来创建一个端点,外部应用程序可以调用它来完成任务并获得响应。
https://github.com/harish2610/camunda-custom-rest/tree/master/camunda_rest_endpoint/src/main/java/com/camunda/custom/rest/endpoint
当我运行这个项目时,我得到以下错误。
com.camunda.custom.rest.endpoint.service.TaskCompletionService中的字段引擎需要类型为“org.camunda.bpm.engine.ProcessEngine”的Bean,但找不到该Bean。
我有另一个项目,其中我有Camunda独立应用程序,我希望我的自定义REST端点能够执行此项目下定义的工作流任务:
https://github.com/harish2610/camunda-custom-rest/tree/master/my-project/src/main/java/com/example/workflow
我的REST端点应该看起来像这样:

http://localhost:8088/engine-rest/api/completeTask

我的问题是:
1.在Camunda中构建自定义REST API端点是否可行?
1.如果是这样,我如何将我的REST项目和Camunda项目集成在一起,以便它们一起工作并给予响应。
请让我知道我在方法上做错了什么?或者有没有更好的方法在Camunda中创建自定义休息端点?
这是我尝试从postman触发API的方式。

谢谢

rt4zxlrg

rt4zxlrg1#

A)自定义REST API需要使用流程引擎。只有当它与流程引擎在同一个Spring上下文中运行时,它才能这样做。目前,您有两个完整的独立Sping Boot 项目。你可以用不同的方式解决这个问题。

  • 构建端点jar(没有完整的spring Boot 应用程序,只有端点),mvn将其安装到本地maven repo中,然后将其作为依赖项添加到引擎项目中。
  • 使用maven多模块项目(例如https://www.baeldung.com/maven-multi-module),因此在开发时将端点和引擎项目分开,但在构建时将它们合并。我在这里使用了这种方法:https://github.com/rob2universe/camunda-custom-rest-endpoint/blob/9a6c3aa22c9ef218cabdf871f71a4699d160d82b/pom.xml#L11

Camunda和Spring使用不同的框架来公开REST服务。Camunda使用标准的JAX-RS实现,因此它也可以在没有Spring的情况下工作。Spring使用Spring MVC提供的自己的实现(参见Difference between JAX-RS and Spring Rest

  • engine-rest* 是流程引擎公开其基于JAX-RS的REST API的上下文。不能在同一上下文下混合使用Spring端点。
  • 或者使用Spring,但在单独的上下文中公开API
  • 或者让您的REST服务使用Camunda起诉的JAX-RS(Jersey)实现。

在本例中,我使用了一个Maven多模块项目,并使用自定义服务https://github.com/rob2universe/camunda-custom-rest-endpoint/tree/main扩展了Camunda JAX-RS REST API
但是,如果您正在编写自定义Facade,则可能根本不打算向客户端公开Camunda REST API。在这种情况下,最好将您的自定义服务放在单独的上下文中,这样您就只能公开该上下文,而不允许从外部访问Camunda REST API。

相关问题