带有 SpringBoot 的 Camunda:JSON 在 64 KB 后被截断

Camunda with SpringBoot: JSON gets cut off after 64 KB

我们对 Camunda 比较陌生,目前正在做一个让我们头疼的项目。

我们有一个带有 Angular 前端的 SpringBoot 应用程序,它应该获取数据以启动进程并通过 REST-API 将它们发送到我们的 Camunda 引擎。除了常规的字符串和整数值,我们还需要文件(主要是 PDF 和 Word),它们在 Angular-Frontend 中采用 base64 编码,因此可以变得更大。

问题是,变量(包括文件)被编码为 JSON,当 JSON 的大小超过 64 KB 时,我们会得到一个“意外的输入结束VALUE_STRING”-异常。我们的应用程序是通过 SSL 加密的(openSSL,我们自己通过 certbot 创建了证书并将配置添加到 application.yaml),如果这会有所不同的话。

一些相关的要点:

有没有人遇到过这样的事情?


这里是有问题的异常的最上面部分:

Unexpected end-of-input in VALUE_STRING
at [Source: (org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$UnCloseableInputStream); line: 1, column: 65] (through reference chain: org.camunda.bpm.engine.rest.dto.PatchVariablesDto[“modifications”]->java.util.LinkedHashMap[“file_b5b5576b_Object”]->org.camunda.bpm.engine.rest.dto.VariableValueDto[“value”])

这里是我们 application.yaml

的 SSL 部分
  ssl:
    key-store-type: PKCS12
    key-store: classpath:keystore.p12
    key-alias: tomcat
    key-store-password: asdfGH12
    enabled: true

有人知道是什么导致了我们的问题吗? 提前致谢并干杯!

Wladmir 的评论是正确的。您不应在工作流引擎的审计跟踪中存储大量数据,也不应将其用作记录系统。取而代之的是拥有数据的服务,并且只在流程变量中携带数据对象的引用/主键(原因包括关注点分离、性能、可维护性、来自其他客户端的可访问性、数据隐私、加密......) .

但是,如果您将 JSON 存储在流程变量中,请不要将其存储为字符串,而是作为对象,并告诉 Camunda 它是如何 de/serialized (SerializationDataFormat)。

此示例向您展示如何使用 JAVA API:

https://github.com/camunda-consulting/code/blob/4a62d4b44efb126b50f22a6f17273c7c98f8b6da/snippets/rest-service-task-spring/src/main/java/org/camunda/example/service/RestDelegate.java#L33