123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- package com.flow.flowable.loader;
- import org.apache.ibatis.javassist.*;
- import java.util.List;
- public class FlowableSerializable {
- List<String> serializableFlowableClassList;
- public FlowableSerializable() {
- }
- public List<String> getSerializableFlowableClassList() {
- return serializableFlowableClassList;
- }
- public void setSerializableFlowableClassList(List<String> 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();
- }
- }
|