尝试从 Camunda 驾驶舱变量访问 pdf 以在 Java 类中作为电子邮件发送时出现投射问题

Casting problems when attempting to access pdf from Camunda cockpit variables to be sent as email in Java class

提问人:b_a9f 提问时间:11/6/2023 最后编辑:b_a9f 更新时间:11/7/2023 访问量:28

问:

我的目标是访问我之前上传的 pdf 类型的执行变量,然后使用服务任务中引用的 Java 类将此 pdf 作为电子邮件的附件发送。

驾驶舱变量

^我的目标是“proofOfRequestFile”。它的二进制数据在“pdf”中

尝试 1:

        FileValue pdfVariable = (FileValue) delegateExecution.getVariable("proofOfRequestFile");

返回错误:

class java.io.ByteArrayInputStream cannot be cast to class org.camunda.bpm.engine.variable.value.FileValue (java.io.ByteArrayInputStream 位于加载器 'bootstrap' 的 java.base 模块中; org.camunda.bpm.engine.variable.value.FileValue 位于加载器 org.springframework.boot.loader.LaunchedURLClassLoader @4f7d0008) 的未命名模块中)

PS:使用(File)而不是(FileValue)返回相同的错误

尝试 2:

byte[] pdfBytes = (byte[]) delegateExecution.getVariable("proofOfRequestFile");

返回错误:

class java.io.ByteArrayInputStream 不能强制转换为类 [B(java.io.ByteArrayInputStream 和 [B 位于加载器“bootstrap”的模块 java.base 中)

尝试 3:

我尝试使用包含pdf的二进制变量(如上图所示)

        byte[] pdfBytes = (byte[]) execution.getVariable("pdf");

返回错误:class java.lang.String cannot be cast to class [B(java.lang.String 和 [B 位于加载器“bootstrap”的 java.base 模块中)

Java PDF Casting Camunda Camunda-Modeler

评论

0赞 Sören 11/6/2023
不能将 Object 强制转换为完全不相关的类。是什么让你认为你可以做到这一点?

答:

0赞 Jan Rohwer 11/7/2023 #1

请改用 DelegateExecution 的 getVariableTyped 方法。然后,您将获得变量的类型化版本,您可以在其中浏览类型并访问正确的值。 它还支持第二个参数来反序列化值(我不确定这是否是只有一个参数的方法的默认值)。 在第三次尝试中,变量的类型是 String,因此您必须将其作为字符串访问并对其进行解码。