{"record":{"id":"8dee55a03c08355b","repo":"flowable/flowable-engine","slug":"unabled-to-find-expressionfactory-of-type-classn","errorCode":null,"errorMessage":"Unabled to find ExpressionFactory of type ${className}","messagePattern":"Unabled to find ExpressionFactory of type (.+?)","errorType":"exception","errorClass":"ELException","httpStatus":null,"severity":"error","filePath":"modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/javax/el/ExpressionFactory.java","lineNumber":182,"sourceCode":"                final Lock writeLock = cacheValue.getLock().writeLock();\n                writeLock.lock();\n                try {\n                    className = cacheValue.getFactoryClassName();\n                    if (className == null) {\n                        className = discoverClassName(tccl);\n                        cacheValue.setFactoryClassName(className);\n                    }\n                    if (tccl == null) {\n                        clazz = Class.forName(className);\n                    } else {\n                        clazz = tccl.loadClass(className);\n                    }\n                    cacheValue.setFactoryClass(clazz);\n                } finally {\n                    writeLock.unlock();\n                }\n            } catch (ClassNotFoundException e) {\n                throw new ELException(\"Unabled to find ExpressionFactory of type \" + className, e);\n            }\n        }\n\n        ExpressionFactory result;\n\n        try {\n            Constructor<?> constructor = null;\n            // Do we need to look for a constructor that will take properties?\n            if (properties != null) {\n                try {\n                    constructor = clazz.getConstructor(Properties.class);\n                } catch (SecurityException se) {\n                    throw new ELException(se);\n                } catch (NoSuchMethodException nsme) {\n                    // This can be ignored\n                    // This is OK for this constructor not to exist\n                }\n            }","sourceCodeStart":164,"sourceCodeEnd":200,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/javax/el/ExpressionFactory.java#L164-L200","documentation":"ExpressionFactory.newInstance(className, properties) wraps ClassNotFoundException in ELException when the configured ExpressionFactory implementation class cannot be loaded by the class loader. The message says 'Unabled to find'.","triggerScenarios":"Setting javax.el.ExpressionFactory system property or a custom class name in a properties file to a class not on the classpath.","commonSituations":"Upgrading Flowable/moving from JUEL to the EL implementation where old factory class names linger in config; fat-jar classpath issues; typos in fully-qualified class names.","solutions":["Correct the factory class name in the configuration/system property","Add the JAR containing the factory class to the classpath","Remove the custom property so the default discovery mechanism is used","Verify with Class.forName(\"<className>\") in the same classloader"],"exampleFix":"// before\n-Djavax.el.ExpressionFactory=org.flowable.el.MyFactory // class missing\n// after\n-Djavax.el.ExpressionFactory=de.odysseus.el.ExpressionFactoryImpl // with juel jar on classpath","handlingStrategy":"validation","validationCode":"try {\n  Class.forName(factoryClassName, false, Thread.currentThread().getContextClassLoader());\n} catch (ClassNotFoundException e) {\n  throw new IllegalStateException(\"ExpressionFactory class missing: \" + factoryClassName, e);\n}","typeGuard":null,"tryCatchPattern":"try {\n  return ExpressionFactory.newInstance(className, properties);\n} catch (ELException e) {\n  return ExpressionFactory.newInstance(); // fallback to default factory\n}","preventionTips":["Keep the factory implementation JAR on the runtime classpath","Avoid stale custom javax.el.ExpressionFactory settings after upgrades","Test EL setup at application startup, not on first expression evaluation"],"tags":["el","classpath","reflection","configuration"],"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-14T05:17:10.506Z"}