package com.flow.flowable.loader; import org.apache.ibatis.javassist.*; import java.util.List; public class FlowableSerializable { List serializableFlowableClassList; public FlowableSerializable() { } public List getSerializableFlowableClassList() { return serializableFlowableClassList; } public void setSerializableFlowableClassList(List serializableFlowableClassList) { this.serializableFlowableClassList = serializableFlowableClassList; } public void execute() throws Exception { ClassPool classPool = ClassPool.getDefault(); classPool.insertClassPath(new LoaderClassPath(FlowableSerializable.class.getClassLoader())); for (String serializableFlowableClass : serializableFlowableClassList) { CtClass ctClass = classPool.get(serializableFlowableClass); ctClass.addInterface(classPool.get("java.io.Serializable")); if ("org.flowable.common.engine.impl.el.function.AbstractFlowableVariableExpressionFunction".equals(serializableFlowableClass)) { CtField[] fields = ctClass.getFields(); for (CtField field : fields) { field.setModifiers(Modifier.TRANSIENT); } } if (!ctClass.isInterface()) { CtField field = CtField.make("private static final long serialVersionUID = 1L;", ctClass); ctClass.addField(field); } ctClass.toClass(); } classPool.importPackage("org.flowable.engine.impl.util.CommandContextUtil"); CtClass ctClass = classPool.get("org.flowable.common.engine.impl.el.JuelExpression"); ctClass.getField("expressionManager").setModifiers(Modifier.TRANSIENT); CtMethod[] methods = ctClass.getMethods(); for (CtMethod method : methods) { if (method.getName().equals("getValue") || method.getName().equals("setValue")) { method.insertBefore("expressionManager = CommandContextUtil.getProcessEngineConfiguration().getExpressionManager();"); } } ctClass.toClass(); } }