flowable/flowable-engine · error · ELException
Failed to read ${PROPERTY_NAME}
Error message
Failed to read ${PROPERTY_NAME} What it means
During service-provider discovery, getClassNameJreDir reads a property file from the JRE directory; an IOException (other than file-not-found, which is ignored) while reading it is wrapped in ELException 'Failed to read ' + PROPERTY_NAME.
Source
Thrown at modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/javax/el/ExpressionFactory.java:404
}
return result.getClass().getName();
}
private static String getClassNameJreDir() {
File file = new File(PROPERTY_FILE);
if (file.canRead()) {
try (InputStream is = new FileInputStream(file)) {
Properties props = new Properties();
props.load(is);
String value = props.getProperty(PROPERTY_NAME);
if (value != null && !value.trim().isEmpty()) {
return value.trim();
}
} catch (FileNotFoundException e) {
// Should not happen - ignore it if it does
} catch (IOException ioe) {
throw new ELException("Failed to read " + PROPERTY_NAME, ioe);
}
}
return null;
}
private static String getClassNameSysProp() {
String value = System.getProperty(PROPERTY_NAME);
if (value != null && !value.trim().isEmpty()) {
return value.trim();
}
return null;
}
}View on GitHub (pinned to d6d39ce1c6)
Solutions
- Check read permissions on the property file under the JRE home directory
- Remove or repair the corrupted property file
- Set the javax.el.ExpressionFactory system property instead so discovery via the JRE file is skipped
- Verify java.home points to a valid JRE/JDK installation
Example fix
// before (broken file in jre/lib) <jre>/lib/javax.el.ExpressionFactory // unreadable // after -Djavax.el.ExpressionFactory=de.odysseus.el.ExpressionFactoryImpl
Defensive patterns
Strategy: fallback
Validate before calling
java.io.File f = new File(System.getProperty("java.home"), "lib/javax.el.ExpressionFactory");
boolean readable = f.canRead(); Try / catch
try {
factory = ExpressionFactory.newInstance();
} catch (ELException e) {
logger.warn("Discovery failed ({}), setting system property instead", e.getMessage());
System.setProperty("javax.el.ExpressionFactory", DefaultFactory.class.getName());
factory = ExpressionFactory.newInstance();
} Prevention
- Set the javax.el.ExpressionFactory system property to skip file discovery
- Ensure JRE lib directories are readable by the application user
- Avoid unusual java.home setups in containers
When it happens
Trigger: The file javax.el.ExpressionFactory under the JRE home exists but cannot be read (permissions, IO error) during ExpressionFactory class discovery.
Common situations: Restricted JRE/lib directories, partially installed JVMs, unusual java.home setups, security-managed environments blocking file reads.
Understand the failure class
Background: "failed to read file", EACCES, ENOENT and "could not read <path>" errors: when a program can't read a file from disk — this error's family across 49 libraries.
Related errors
- Cannot read EL properties
- Failed to create property source
- couldn't open resource stream: {errorMessage}
- Cannot read default EL properties
- Cannot parse EL property ${PROP_CACHE_SIZE}
AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11).
Data as JSON: /api/errors/3bbcc3bd289bae3f.
Report an issue: GitHub.