flowable中反序列化流程变量失败Couldn‘t deserialize object in variable ‘xxxx‘

flowable中反序列化流程变量失败Couldn't deserialize object in variable 'xxxx'

devops自动化项目中使用flowable(类似于activiti的流程引擎)来进行自动化流程编排,需要将每个步骤执行的结果使用流程变量来保存,由于数据类型未知,采用fastjson来保存对象变量,使用flowable的api进行变量存储:

Map<String, Object> rootNodeMap = new HashMap<>();
String responseNode = "response";
String requestNode = "request";
// 省略resultMap处理
// 省略resultMap处理
rootNodeMap.put(responseNode, resultMap);
rootNodeMap.put(requestNode, requestMap);
runtimeService.setVariable(processInstanceId, "rootNode", rootNodeMap);

由于流程变量中包含有对象嵌套数组的情况,在使用fastjson的JSONObject保存了主节点以后,在后续使用rootNode变量时,会出现反序列化失败的情况。具体错误堆栈如下:

org.flowable.common.engine.api.FlowableException: Couldn't deserialize object in variable 'rootNode'
   at org.flowable.variable.service.impl.types.SerializableType.deserialize(SerializableType.java:117)
   at org.flowable.variable.service.impl.types.SerializableType.getValue(SerializableType.java:65)
   at org.flowable.variable.service.impl.persistence.entity.VariableInstanceEntityImpl.getValue(VariableInstanceEntityImpl.java:132)
   at org.flowable.variable.service.impl.persistence.entity.VariableScopeImpl.getVariable(VariableScopeImpl.java:271)
   at org.flowable.variable.service.impl.persistence.entity.VariableScopeImpl.getVariable(VariableScopeImpl.java:250)
   at org.flowable.common.engine.impl.el.VariableContainerELResolver.getValue(VariableContainerELResolver.java:39)
   at org.flowable.engine.impl.el.ProcessVariableScopeELResolver.getValue(ProcessVariableScopeELResolver.java:57)
   at org.flowable.common.engine.impl.javax.el.CompositeELResolver.getValue(CompositeELResolver.java:234)
   at org.flowable.common.engine.impl.de.odysseus.el.tree.impl.ast.AstIdentifier.eval(AstIdentifier.java:95)
   at org.flowable.common.engine.impl.de.odysseus.el.tree.impl.ast.AstProperty.eval(AstProperty.java:68)
   at org.flowable.common.engine.impl.de.odysseus.el.tree.impl.ast.AstProperty.eval(AstProperty.java:68)
   at org.flowable.common.engine.impl.de.odysseus.el.tree.impl.ast.AstBinary$SimpleOperator.eval(AstBinary.java:31)
   at org.flowable.common.engine.impl.de.odysseus.el.tree.impl.ast.AstBinary.eval(AstBinary.java:112)
   at org.flowable.common.engine.impl.de.odysseus.el.tree.impl.ast.AstEval.eval(AstEval.java:53)
   at org.flowable.common.engine.impl.de.odysseus.el.tree.impl.ast.AstNode.getValue(AstNode.java:31)
   at org.flowable.common.engine.impl.de.odysseus.el.TreeValueExpression.getValue(TreeValueExpression.java:122)
   at org.flowable.engine.impl.delegate.invocation.ExpressionGetInvocation.invoke(ExpressionGetInvocation.java:34)
   at org.flowable.engine.impl.delegate.invocation.DelegateInvocation.proceed(DelegateInvocation.java:35)
   at org.flowable.engine.impl.delegate.invocation.DefaultDelegateInterceptor.handleInvocation(DefaultDelegateInterceptor.java:26)
   at org.flowable.engine.impl.el.JuelExpression.resolveGetValueExpression(JuelExpression.java:44)
   at org.flowable.common.engine.impl.el.JuelExpression.getValue(JuelExpression.java:48)
   at org.flowable.engine.impl.el.UelExpressionCondition.evaluate(UelExpressionCondition.java:37)
   at org.flowable.engine.impl.util.condition.ConditionUtil.hasTrueCondition(ConditionUtil.java:47)
   at org.flowable.engine.impl.bpmn.behavior.ExclusiveGatewayActivityBehavior.leave(ExclusiveGatewayActivityBehavior.java:84)
   at org.flowable.engine.impl.bpmn.behavior.FlowNodeActivityBehavior.execute(FlowNodeActivityBehavior.java:39)
   at org.flowable.engine.impl.agenda.ContinueProcessOperation.executeActivityBehavior(ContinueProcessOperation.java:275)
   at org.flowable.engine.impl.agenda.ContinueProcessOperation.executeSynchronous(ContinueProcessOperation.java:159)
   at org.flowable.engine.impl.agenda.ContinueProcessOperation.continueThroughFlowNode(ContinueProcessOperation.java:114)
   at org.flowable.engine.impl.agenda.ContinueProcessOperation.continueThroughSequenceFlow(ContinueProcessOperation.java:327)
   at org.flowable.engine.impl.agenda.ContinueProcessOperation.run(ContinueProcessOperation.java:80)
   at org.flowable.engine.impl.interceptor.CommandInvoker.executeOperation(CommandInvoker.java:88)
   at org.flowable.engine.impl.interceptor.CommandInvoker.executeOperations(CommandInvoker.java:72)
   at org.flowable.engine.impl.interceptor.CommandInvoker.execute(CommandInvoker.java:56)
   at org.flowable.engine.impl.interceptor.BpmnOverrideContextInterceptor.execute(BpmnOverrideContextInterceptor.java:25)
   at org.flowable.common.engine.impl.interceptor.TransactionContextInterceptor.execute(TransactionContextInterceptor.java:53)
   at org.flowable.common.engine.impl.interceptor.CommandContextInterceptor.execute(CommandContextInterceptor.java:72)
   at org.flowable.common.spring.SpringTransactionInterceptor.lambda$execute$0(SpringTransactionInterceptor.java:56)
   at org.flowable.common.spring.SpringTransactionInterceptor$$Lambda$532/1508152985.doInTransaction(Unknown Source)
   at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:140)
   at org.flowable.common.spring.SpringTransactionInterceptor.execute(SpringTransactionInterceptor.java:56)
   at org.flowable.common.engine.impl.interceptor.LogInterceptor.execute(LogInterceptor.java:30)
   at org.flowable.common.engine.impl.cfg.CommandExecutorImpl.execute(CommandExecutorImpl.java:56)
   at org.flowable.common.engine.impl.cfg.CommandExecutorImpl.execute(CommandExecutorImpl.java:51)
   at org.flowable.engine.impl.TaskServiceImpl.complete(TaskServiceImpl.java:208)
   at com.dashuf.srgp.workflow.devops.DevopsTaskAutoCompletedHandler.autoComplete(DevopsTaskAutoCompletedHandler.java:41)
   at com.dashuf.srgp.workflow.devops.DevopsTaskAutoCompletedHandler$$FastClassBySpringCGLIB$$f48068ba.invoke(<generated>)
   at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
   at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:749)
   at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
   at org.springframework.aop.interceptor.AsyncExecutionInterceptor.lambda$invoke$0(AsyncExecutionInterceptor.java:115)
   at org.springframework.aop.interceptor.AsyncExecutionInterceptor$$Lambda$663/1969812924.call(Unknown Source)
   at com.dashuf.srgp.config.CustomThreadPoolTaskExecutor.lambda$submit$8(CustomThreadPoolTaskExecutor.java:46)
   at com.dashuf.srgp.config.CustomThreadPoolTaskExecutor$$Lambda$664/488650178.call(Unknown Source)
   at java.util.concurrent.FutureTask.run$$$capture(FutureTask.java:266)
   at java.util.concurrent.FutureTask.run(FutureTask.java)
   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
   at java.lang.Thread.run(Thread.java:745)
Caused by: com.alibaba.fastjson.JSONException: autoType is not support. [B
   at com.alibaba.fastjson.parser.ParserConfig.checkAutoType(ParserConfig.java:920)
   at com.alibaba.fastjson.parser.ParserConfig.checkAutoType(ParserConfig.java:911)
   at com.alibaba.fastjson.JSONObject$SecureObjectInputStream.resolveClass(JSONObject.java:548)
   at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1613)
   at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1518)
   at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1664)
   at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1345)
   at java.io.ObjectInputStream.access$300(ObjectInputStream.java:206)
   at java.io.ObjectInputStream$GetFieldImpl.readFields(ObjectInputStream.java:2157)
   at java.io.ObjectInputStream.readFields(ObjectInputStream.java:541)
   at java.math.BigInteger.readObject(BigInteger.java:4258)
   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
   at java.lang.reflect.Method.invoke(Method.java:483)
   at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1017)
   at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1896)
   at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1801)
   at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1351)
   at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1993)
   at java.io.ObjectInputStream.defaultReadObject(ObjectInputStream.java:501)
   at java.math.BigDecimal.readObject(BigDecimal.java:3748)
   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
   at java.lang.reflect.Method.invoke(Method.java:483)
   at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1017)
   at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1896)
   at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1801)
   at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1351)
   at java.io.ObjectInputStream.readObject(ObjectInputStream.java:371)
   at java.util.HashMap.readObject(HashMap.java:1396)
   at sun.reflect.GeneratedMethodAccessor1139.invoke(Unknown Source)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
   at java.lang.reflect.Method.invoke(Method.java:483)
   at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1017)
   at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1896)
   at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1801)
   at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1351)
   at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1993)
   at java.io.ObjectInputStream.defaultReadObject(ObjectInputStream.java:501)
   at com.alibaba.fastjson.JSONObject.readObject(JSONObject.java:488)
   at sun.reflect.GeneratedMethodAccessor1138.invoke(Unknown Source)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
   at java.lang.reflect.Method.invoke(Method.java:483)
   at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1017)
   at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1896)
   at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1801)
   at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1351)
   at java.io.ObjectInputStream.readObject(ObjectInputStream.java:371)
   at java.util.HashMap.readObject(HashMap.java:1396)
   at sun.reflect.GeneratedMethodAccessor1139.invoke(Unknown Source)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
   at java.lang.reflect.Method.invoke(Method.java:483)
   at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1017)
   at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1896)
   at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1801)
   at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1351)
   at java.io.ObjectInputStream.readObject(ObjectInputStream.java:371)
   at java.util.HashMap.readObject(HashMap.java:1396)
   at sun.reflect.GeneratedMethodAccessor1139.invoke(Unknown Source)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
   at java.lang.reflect.Method.invoke(Method.java:483)
   at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1017)
   at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1896)
   at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1801)
   at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1351)
   at java.io.ObjectInputStream.readObject(ObjectInputStream.java:371)
   at org.flowable.variable.service.impl.types.SerializableType.deserialize(SerializableType.java:113)
   ... 57 common frames omitted

看字面意思理解,应该是无法识别关键字[B,猜测应该是fastjson在序列化的时候写入class的数据类型,看起来像是Byte数组之类,目前使用的fastjson版本是1.2.49版本,在github搜索了一下,目前最新版本已经到1.2.76,并且中间有一些issue提到Array、Map等,和我的应用场景比较相似,这些issue已经进行了升级解决。

于是尝试着将fastjson版本升级到1.2.76,再次执行,成功通过,问题解决。

这个问题排查定位从上周五的晚上一直到本周一的早上,持续时间很长,但是修改方式却非常简单,只是升级了fastjson的版本而已,之前一直没有怀疑是fastjson的问题,而是将重点放在自己的中间数据处理上面。所以后续遇到类似问题,可以先尝试这种快捷的方案,节约时间。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值