{"record":{"id":"d6c0a1a71135cedd","repo":"flowable/flowable-engine","slug":"message","errorCode":null,"errorMessage":"${message}","messagePattern":"\\$\\{message\\}","errorType":"exception","errorClass":"FlowableClassLoadingException","httpStatus":null,"severity":"error","filePath":"modules/flowable5-compatibility/src/main/java/org/flowable/compatibility/DefaultFlowable5CompatibilityHandler.java","lineNumber":1165,"sourceCode":"        activity5Job.setJobHandlerType(job.getJobHandlerType());\n        activity5Job.setEndDate(job.getEndDate());\n        activity5Job.setRepeat(job.getRepeat());\n        activity5Job.setProcessDefinitionId(job.getProcessDefinitionId());\n        activity5Job.setProcessInstanceId(job.getProcessInstanceId());\n        activity5Job.setRetries(job.getRetries());\n        activity5Job.setRevision(job.getRevision());\n        activity5Job.setTenantId(job.getTenantId());\n        activity5Job.setExceptionMessage(job.getExceptionMessage());\n        return activity5Job;\n    }\n\n    protected void handleActivitiException(org.activiti.engine.ActivitiException e) {\n        if (e instanceof org.activiti.engine.delegate.BpmnError) {\n            org.activiti.engine.delegate.BpmnError activiti5BpmnError = (org.activiti.engine.delegate.BpmnError) e;\n            throw new BpmnError(activiti5BpmnError.getErrorCode(), activiti5BpmnError.getMessage());\n\n        } else if (e instanceof org.activiti.engine.ActivitiClassLoadingException) {\n            throw new FlowableClassLoadingException(e.getMessage(), e.getCause());\n\n        } else if (e instanceof org.activiti.engine.ActivitiObjectNotFoundException) {\n            org.activiti.engine.ActivitiObjectNotFoundException activiti5ObjectNotFoundException = (org.activiti.engine.ActivitiObjectNotFoundException) e;\n            throw new FlowableObjectNotFoundException(activiti5ObjectNotFoundException.getMessage(),\n                    activiti5ObjectNotFoundException.getObjectClass(), activiti5ObjectNotFoundException.getCause());\n\n        } else if (e instanceof org.activiti.engine.ActivitiOptimisticLockingException) {\n            throw new FlowableOptimisticLockingException(e.getMessage());\n\n        } else if (e instanceof org.activiti.engine.ActivitiIllegalArgumentException) {\n            throw new FlowableIllegalArgumentException(e.getMessage(), e.getCause());\n\n        } else {\n            if (e.getCause() instanceof org.activiti.engine.delegate.BpmnError) {\n                org.activiti.engine.delegate.BpmnError activiti5BpmnError = (org.activiti.engine.delegate.BpmnError) e.getCause();\n                throw new BpmnError(activiti5BpmnError.getErrorCode(), activiti5BpmnError.getMessage());\n                \n            } else if (e.getCause() instanceof org.flowable.engine.delegate.BpmnError) {","sourceCodeStart":1147,"sourceCodeEnd":1183,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable5-compatibility/src/main/java/org/flowable/compatibility/DefaultFlowable5CompatibilityHandler.java#L1147-L1183","documentation":"An Activiti 5 ActivitiClassLoadingException raised inside compatibility-handled commands is translated to the Flowable equivalent FlowableClassLoadingException, preserving message and cause. It indicates a class needed by the v5-style execution could not be loaded.","triggerScenarios":"Any compatibility-handler operation whose underlying v5 code fails to load a class (delegate class, listener, custom type) — e.g., the delegateExpression points to a class absent from the classpath.","commonSituations":"Deployed v5 process definitions referencing old package names (org.activiti.*) after migration; missing jars in the Flowable deployment; fat-jar classpath differences between environments.","solutions":["Read the cause for the missing class name and add the jar containing it to the classpath","Update delegate/listener expressions to the migrated Flowable package names","Redeploy the process definitions with corrected class references"],"exampleFix":"// before\n<serviceTask flowable:delegateExpression=\"${com.old.MyDelegate}\"/>\n// after\n<serviceTask flowable:delegateExpression=\"${com.new.MyDelegate}\"/>","handlingStrategy":"try-catch","validationCode":"String cls = delegateExpressionClassName;\ntry { Class.forName(cls); } catch (ClassNotFoundException e) { throw new IllegalStateException(\"Missing class on classpath: \" + cls); }","typeGuard":null,"tryCatchPattern":"try {\n    handler.executeJob(job);\n} catch (FlowableClassLoadingException e) {\n    log.error(\"Cannot load {}: check deployment classpath\", e.getCause());\n    throw e;\n}","preventionTips":["Replicate all Activiti 5 delegate classes into the Flowable application classpath","Migrate org.activiti.* imports to org.flowable.* before redeploying definitions","Smoke-test migrated definitions in a staging environment with an identical classpath"],"tags":["compatibility","classloading","activiti5"],"backgroundTag":"class-not-found","analyzedSha":"d6d39ce1c69ff244f2d9dc6af756a9b95e865586","analyzedAt":"2026-09-11T06:41:19.413Z","contentChangedAt":"2026-09-11T06:41:19.413Z","schemaVersion":2},"datasetVersion":"2026-09-18T11:17:12.947Z"}