Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 带SpringBoot的Camunda:JSON在64KB后被切断_Java_Linux_Ssl_Camunda - Fatal编程技术网

Java 带SpringBoot的Camunda:JSON在64KB后被切断

Java 带SpringBoot的Camunda:JSON在64KB后被切断,java,linux,ssl,camunda,Java,Linux,Ssl,Camunda,我们对卡蒙达比较陌生,目前正在做一个让我们头疼的项目 我们有一个带有角度前端的SpringBoot应用程序,它应该获取数据来启动一个进程,并通过REST-API将数据发送到我们的Camunda引擎。除了常规字符串和整数值之外,我们还需要文件(主要是PDF和Word),这些文件在角度前端进行base64编码,因此可以变得更大一些 问题是,变量(包括文件)被编码到JSON中,当JSON的大小超过64KB时,我们会得到一个“VALUE_STRING中输入的意外结束”异常。我们的应用程序是通过SSL加密

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

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

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

一些要点也与此相关:

  • 在本地(运行Windows 10或CentOS上的VM),它工作正常
  • 当尝试通过Camunda任务列表启动流程时,它仅在没有附加大于64kb的文件时才起作用,如果没有这些文件,流程将正常启动
  • 出现问题的服务器是运行Ubuntu的Strato虚拟机,使用OpenJDK13.0.1和PostgreSQL数据库
  • 通常我们也连接到AzureAD(这就是我们需要SSL的原因),但是在测试时关闭了它,所以这不应该是问题所在。以防万一
有人遇到过这样的事情吗


以下是所讨论的例外情况的最主要部分:

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
有人知道是什么导致了我们的问题吗?
提前谢谢,干杯

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

但是,如果您将JSON存储在流程变量中,则不要将其存储为字符串,而是作为对象,并告诉Camunda它是如何反序列化的(SerializationDataFormat)

此示例向您展示了如何使用JAVA API完成此操作:


将二进制数据保存为camunda变量不是个好主意。Camunda将所有旧变量值保存在历史记录中。二进制文件将破坏您的历史记录。更好地发送dokumentId,process可以从某些服务获取dokumentId内容,因此基本上这是一种更好的方法,我们的前端将文档保存在其他地方,比如自己的数据库或表,而不与Camunda DB或表相接触,只需传递某种ID作为流程变量?在我看来,在工作流引擎中保存大量数据通常不是问题。例如,设计用于存储任意数量的数据,包括与流程实例相关的文档。从架构和维护的角度来看,这可能不是一个技术问题,我强烈建议不要使用它。引擎不是记录系统,不应该拥有业务数据。例如,如果与数据隐私和/或加密相关,您还可以邀请完整的添加列表。挑战进入引擎领域。在记录系统中,这些问题只能解决一次。然后是DBMS维护、备份、索引、表空间大小等,。。。。一切都需要更长的时间。流程和业务数据的不同保留要求。。。明确区分关注点有很多原因。“Imixs工作流引擎使用的数据库架构非常简单,只包含一个名为“DOCUMENT”的表。在部署期间,JPA将JPA类org.Imixs.Workflow.engine.JPA.DOCUMENT自动映射到数据库,并创建相应的数据表。”你会认为这是一个高度可伸缩的设计,对大量的数据具有不同的存储需求(索引,保留,访问模式,加密,数据隐私,…)?是的,我这样做。如果业务数据被认为是业务流程的基本部分,那么这就是一个保证数据一致性和安全控制的解决方案。