flowable/flowable-engine · error · IllegalArgumentException
Expected dmnEngine configuration to be of type SpringDmnEngi
Error message
Expected dmnEngine configuration to be of type SpringDmnEngineConfiguration but was <actualType>
What it means
SpringDmnEngineConfigurator.configure() wires the DMN engine configuration into an engine-wide configuration. If a dmnEngineConfiguration was injected but is not a SpringDmnEngineConfiguration (it cannot receive the Spring transaction manager), it throws plain IllegalArgumentException naming the actual class. If none was set, it creates a default SpringDmnEngineConfiguration itself.
Source
Thrown at modules/flowable-dmn-spring-configurator/src/main/java/org/flowable/dmn/spring/configurator/SpringDmnEngineConfigurator.java:31
package org.flowable.dmn.spring.configurator;
import org.flowable.common.engine.impl.AbstractEngineConfiguration;
import org.flowable.common.spring.SpringEngineConfiguration;
import org.flowable.dmn.engine.configurator.DmnEngineConfigurator;
import org.flowable.dmn.spring.SpringDmnEngineConfiguration;
/**
* @author Tijs Rademakers
* @author Joram Barrez
*/
public class SpringDmnEngineConfigurator extends DmnEngineConfigurator {
@Override
public void configure(AbstractEngineConfiguration engineConfiguration) {
if (dmnEngineConfiguration == null) {
dmnEngineConfiguration = new SpringDmnEngineConfiguration();
} else if (!(dmnEngineConfiguration instanceof SpringDmnEngineConfiguration)) {
throw new IllegalArgumentException("Expected dmnEngine configuration to be of type "
+ SpringDmnEngineConfiguration.class + " but was " + dmnEngineConfiguration.getClass());
}
initialiseCommonProperties(engineConfiguration, dmnEngineConfiguration);
SpringEngineConfiguration springEngineConfiguration = (SpringEngineConfiguration) engineConfiguration;
((SpringDmnEngineConfiguration) dmnEngineConfiguration).setTransactionManager(springEngineConfiguration.getTransactionManager());
if (dmnEngineConfiguration.getBeans() == null) {
dmnEngineConfiguration.setBeans(springEngineConfiguration.getBeans());
}
initEngine();
initServiceConfigurations(engineConfiguration, dmnEngineConfiguration);
}
}
View on GitHub (pinned to d6d39ce1c6)
Solutions
- Set the configurator's dmnEngineConfiguration to a SpringDmnEngineConfiguration instance.
- If you don't need a custom config, omit it and let the configurator create the default SpringDmnEngineConfiguration.
- If you have a custom configuration class, make it extend SpringDmnEngineConfiguration.
- Read the exception message: the actual wrong type is printed after 'but was'.
Example fix
// before SpringDmnEngineConfigurator configurator = new SpringDmnEngineConfigurator(); configurator.setDmnEngineConfiguration(new StandaloneDmnEngineConfiguration()); // after SpringDmnEngineConfigurator configurator = new SpringDmnEngineConfigurator(); configurator.setDmnEngineConfiguration(new SpringDmnEngineConfiguration());
Defensive patterns
Strategy: validation
Validate before calling
if (dmnEngineConfig != null && !(dmnEngineConfig instanceof SpringDmnEngineConfiguration)) {
throw new IllegalStateException('dmnEngineConfiguration must be SpringDmnEngineConfiguration, got ' + dmnEngineConfig.getClass());
} Type guard
if (!(dmnEngineConfiguration instanceof SpringDmnEngineConfiguration)) { throw new IllegalArgumentException('use SpringDmnEngineConfiguration in Spring setups'); } Try / catch
try { configurator.configure(engineConfiguration); }
catch (IllegalArgumentException e) { throw new ConfigurationException('Check dmnEngineConfiguration type: ' + e.getMessage(), e); } Prevention
- In Spring apps always use SpringDmnEngineConfiguration
- Let the configurator create its default config when unsure
- Make custom configs extend SpringDmnEngineConfiguration
- Update copy-pasted standalone setup when migrating to Spring
When it happens
Trigger: Programmatically configuring an engine configuration (e.g. SpringProcessEngineConfiguration/SpringEngineConfiguration) and setting its dmnEngineConfigurator's dmnEngineConfiguration to StandaloneDmnEngineConfiguration or another non-Spring subclass instead of SpringDmnEngineConfiguration.
Common situations: Copy-pasted standalone setup code into a Spring Boot app, swapping configuration classes after migrating from standalone to Spring, or a custom DmnEngineConfiguration subclass that does not extend SpringDmnEngineConfiguration.
Related errors
- Expected idmEngine configuration to be of type SpringIdmEngi
- no org.flowable.app.engine.AppEngine defined in the applicat
- transactionManager is required property for SpringAppEngineC
- transactionManager is required property for SpringCmmnEngine
- transactionManager is required property for SpringDmnEngineC
AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11).
Data as JSON: /api/errors/c7146f150b902091.
Report an issue: GitHub.