FlowableSerializable.java 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. package com.flow.flowable.loader;
  2. import org.apache.ibatis.javassist.*;
  3. import java.util.List;
  4. public class FlowableSerializable {
  5. List<String> serializableFlowableClassList;
  6. public FlowableSerializable() {
  7. }
  8. public List<String> getSerializableFlowableClassList() {
  9. return serializableFlowableClassList;
  10. }
  11. public void setSerializableFlowableClassList(List<String> serializableFlowableClassList) {
  12. this.serializableFlowableClassList = serializableFlowableClassList;
  13. }
  14. public void execute() throws Exception {
  15. ClassPool classPool = ClassPool.getDefault();
  16. classPool.insertClassPath(new LoaderClassPath(FlowableSerializable.class.getClassLoader()));
  17. for (String serializableFlowableClass : serializableFlowableClassList) {
  18. CtClass ctClass = classPool.get(serializableFlowableClass);
  19. ctClass.addInterface(classPool.get("java.io.Serializable"));
  20. if ("org.flowable.common.engine.impl.el.function.AbstractFlowableVariableExpressionFunction".equals(serializableFlowableClass)) {
  21. CtField[] fields = ctClass.getFields();
  22. for (CtField field : fields) {
  23. field.setModifiers(Modifier.TRANSIENT);
  24. }
  25. }
  26. if (!ctClass.isInterface()) {
  27. CtField field = CtField.make("private static final long serialVersionUID = 1L;", ctClass);
  28. ctClass.addField(field);
  29. }
  30. ctClass.toClass();
  31. }
  32. classPool.importPackage("org.flowable.engine.impl.util.CommandContextUtil");
  33. CtClass ctClass = classPool.get("org.flowable.common.engine.impl.el.JuelExpression");
  34. ctClass.getField("expressionManager").setModifiers(Modifier.TRANSIENT);
  35. CtMethod[] methods = ctClass.getMethods();
  36. for (CtMethod method : methods) {
  37. if (method.getName().equals("getValue") || method.getName().equals("setValue")) {
  38. method.insertBefore("expressionManager = CommandContextUtil.getProcessEngineConfiguration().getExpressionManager();");
  39. }
  40. }
  41. ctClass.toClass();
  42. }
  43. }