flowable/flowable-engine · critical · FlowableException
problem retrieving flowable.registry.cfg.xml resources on th
Error message
problem retrieving flowable.registry.cfg.xml resources on the classpath:
What it means
EventRegistryEngines.init() enumerates all flowable.eventregistry.cfg.xml resources on the classpath to auto-initialize the event registry engine. If the classloader's getResources call throws an IOException, it wraps it in a FlowableException including the java.class.path. This indicates a broken/classloader-level I/O problem, not a missing config file (missing files are simply skipped).
Source
Thrown at modules/flowable-event-registry/src/main/java/org/flowable/eventregistry/impl/EventRegistryEngines.java:62
protected static Map<String, EngineInfo> eventRegistryEngineInfosByResourceUrl = new HashMap<>();
protected static List<EngineInfo> eventRegistryEngineInfos = new ArrayList<>();
/**
* Initializes all event registry engines that can be found on the classpath for resources <code>flowable.eventregistry.cfg.xml</code>
* and for resources <code>flowable-eventregistry-context.xml</code> (Spring style configuration).
*/
public static synchronized void init() {
if (!isInitialized()) {
if (eventRegistryEngines == null) {
// Create new map to store event registry engines if current map is null
eventRegistryEngines = new HashMap<>();
}
ClassLoader classLoader = EventRegistryEngines.class.getClassLoader();
Enumeration<URL> resources = null;
try {
resources = classLoader.getResources("flowable.eventregistry.cfg.xml");
} catch (IOException e) {
throw new FlowableException("problem retrieving flowable.registry.cfg.xml resources on the classpath: " + System.getProperty("java.class.path"), e);
}
// Remove duplicated configuration URL's using set. Some
// classloaders may return identical URL's twice, causing duplicate startups
Set<URL> configUrls = new HashSet<>();
while (resources.hasMoreElements()) {
configUrls.add(resources.nextElement());
}
for (URL resource : configUrls) {
LOGGER.info("Initializing event registry engine using configuration '{}'", resource);
initEventRegistryEngineFromResource(resource);
}
try {
resources = classLoader.getResources("flowable-eventregistry-context.xml");
} catch (IOException e) {
throw new FlowableException("problem retrieving flowable-registry-context.xml resources on the classpath: " + System.getProperty("java.class.path"), e);
}View on GitHub (pinned to d6d39ce1c6)
Solutions
- Inspect the java.class.path printed in the message and validate every entry (verify each jar with 'jar tf' or unzip -t); repair or re-deploy corrupt jars.
- Rebuild the application artifact to regenerate a clean classpath.
- Check the custom classloader in use and ensure it can enumerate resources for that URL protocol.
- If running in a container, verify mounted volumes containing jars are readable.
Example fix
// before (broken fat jar entry on classpath) java -cp app.jar:libs/corrupt-lib.jar com.app.Main // after mvn clean package && java -cp app.jar:libs/fixed-lib.jar com.app.Main
Defensive patterns
Strategy: try-catch
Validate before calling
try (Stream<Path> entries = Files.list(Paths.get(libDir))) {
entries.filter(p -> p.toString().endsWith(".jar")).forEach(p -> {
try (java.util.jar.JarFile jf = new java.util.jar.JarFile(p.toFile())) { jf.getManifest(); }
catch (IOException e) { throw new IllegalStateException("Corrupt jar on classpath: " + p, e); }
});
} Try / catch
try {
EventRegistryEngines.getAppEngine();
} catch (FlowableException e) {
if (e.getMessage().startsWith("problem retrieving flowable.registry.cfg.xml")) {
log.error("Classpath corruption detected; inspect: " + e.getMessage(), e);
}
throw e;
} Prevention
- Verify artifacts (checksums) before deploying
- Run 'jar tf' smoke checks in CI on packaged jars
- Avoid hand-edited classpaths in launch scripts
- Test engine bootstrap early in application startup
When it happens
Trigger: Calling EventRegistryEngines.getAppEngine/init (directly or via building an engine) when the thread-context or class classloader throws IOException on getResources('flowable.eventregistry.cfg.xml') — e.g. corrupted jars, unreadable classpath entries, or exotic custom classloaders.
Common situations: Fat jars with corrupt/duplicate entries, classloader issues in app servers (OSGi, custom parent-last loaders), broken deployments where a classpath jar is truncated or unreadable.
Related errors
- problem retrieving flowable-registry-context.xml resources o
- problem retrieving flowable.app.cfg.xml resources on the cla
- problem retrieving flowable-app-context.xml resources on the
- Failed to read resource ${resource}
- problem retrieving flowable.cfg.xml resources on the classpa
AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11).
Data as JSON: /api/errors/3843786777b239cc.
Report an issue: GitHub.