flowable/flowable-engine · error · FlowableException

problem retrieving flowable-idm-context.xml resources on the

Error message

problem retrieving flowable-idm-context.xml resources on the classpath: ${java.class.path}

What it means

As the second step of IdmEngines.init(), the engine enumerates 'flowable-idm-context.xml' Spring context resources from the classpath. An IOException from ClassLoader.getResources is wrapped in this FlowableException including the java.class.path property. Same class as 3017 but for the Spring context descriptor rather than the main configuration file.

Source

Thrown at modules/flowable-idm-engine/src/main/java/org/flowable/idm/engine/IdmEngines.java:80

            } catch (IOException e) {
                throw new FlowableException("problem retrieving flowable.idm.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 idm engine using configuration '{}'", resource);
                initIdmEngineFromResource(resource);
            }

            try {
                resources = classLoader.getResources("flowable-idm-context.xml");
            } catch (IOException e) {
                throw new FlowableException("problem retrieving flowable-idm-context.xml resources on the classpath: " + System.getProperty("java.class.path"), e);
            }

            while (resources.hasMoreElements()) {
                URL resource = resources.nextElement();
                LOGGER.info("Initializing idm engine using Spring configuration '{}'", resource);
                initIdmEngineFromSpringResource(resource);
            }

            setInitialized(true);
        } else {
            LOGGER.info("Idm engines already initialized");
        }
    }

    protected static void initIdmEngineFromSpringResource(URL resource) {
        try {
            Class<?> springConfigurationHelperClass = ReflectUtil.loadClass("org.flowable.idm.spring.SpringIdmConfigurationHelper");
            Method method = springConfigurationHelperClass.getDeclaredMethod("buildIdmEngine", new Class<?>[]{URL.class});

View on GitHub (pinned to d6d39ce1c6)

Solutions

  1. Fix the classpath/classloader problem indicated by java.class.path in the message.
  2. Initialize the engine programmatically to avoid resource scanning.
  3. Check for a custom classloader override (e.g. OSGi, shaded fat jar) that mishandles getResources and repair or replace it.

Example fix

// before
IdmEngines.init(); // scans flowable-idm-context.xml

// after
new IdmEngineConfiguration().buildIdmEngine(); // explicit construction, no scanning
Defensive patterns

Strategy: try-catch

Try / catch

try {
    IdmEngines.init();
} catch (FlowableException e) {
    if (e.getMessage().contains("flowable-idm-context.xml")) {
        logger.error("Spring context resource scan failed", e.getCause());
    }
}

Prevention

When it happens

Trigger: ClassLoader.getResources("flowable-idm-context.xml") throwing IOException during engine bootstrap, after the idm.cfg.xml scan has already succeeded.

Common situations: Same environmental classloader problems as the cfg.xml scan: restricted app-server classloaders, corrupted classpath entries, custom classloader that throws on getResources.

Related errors


AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11). Data as JSON: /api/errors/cfbe33318ee6184c. Report an issue: GitHub.