flowable/flowable-engine · error · FlowableException
SpringCmmnEngineConfigurator accepts only…
Error message
SpringCmmnEngineConfigurator accepts only SpringCmmnEngineConfiguration. ${className} What it means
FlowableException thrown by SpringCmmnEngineConfigurator.configure when the injected cmmnEngineConfiguration is not an instance of SpringCmmnEngineConfiguration. This configurator only knows how to integrate a Spring-aware CMMN engine configuration, so any other subclass is rejected.
Solutions
- Set the configurator's configuration to new SpringCmmnEngineConfiguration() or a subclass of it
- If you don't need Spring integration, use the plain CmmnEngineConfigurator instead
- Let the configurator create its own SpringCmmnEngineConfiguration by leaving cmmnEngineConfiguration unset
- Log the actual class name (appended in the message) and compare against the expected type
Example fix
// before configurator.setCmmnEngineConfiguration(new CmmnEngineConfiguration()); // after configurator.setCmmnEngineConfiguration(new SpringCmmnEngineConfiguration());
Defensive patterns
Strategy: validation
Validate before calling
if (!(configurator.getCmmnEngineConfiguration() == null || configurator.getCmmnEngineConfiguration() instanceof SpringCmmnEngineConfiguration)) { throw new IllegalStateException("use SpringCmmnEngineConfiguration"); } Type guard
boolean accepts(CmmnEngineConfiguration cfg) { return cfg instanceof SpringCmmnEngineConfiguration; } Try / catch
try { configurator.configure(engineConfiguration); } catch (FlowableException e) { if (e.getMessage().startsWith("SpringCmmnEngineConfigurator accepts only")) { log.error("wrong config type: {}", e.getMessage()); } throw e; } Prevention
- Only pass SpringCmmnEngineConfiguration (or subclass) to SpringCmmnEngineConfigurator
- Use the plain CmmnEngineConfigurator for non-Spring setups
- Let the configurator auto-create its configuration by leaving it unset
When it happens
Trigger: Programmatically adding SpringCmmnEngineConfigurator to an engine configuration and setting configurator.setCmmnEngineConfiguration(...) to a plain CmmnEngineConfiguration or another subclass instead of SpringCmmnEngineConfiguration.
Common situations: Spring configurator used in a non-Spring build; copy-pasted setup from the non-Spring CmmnEngineConfigurator; refactoring replaced the configuration class; classloader duplication causing instanceof checks to fail in exotic environments.
Related errors
- ackMode in definition
- At least one of topics, topicPartitions or topicPattern…
- Channel definition cannot resolve as a String[] or a String…
- Could not register rabbit listener endpoint on
- Could not register rabbit listener endpoint on
AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11).
Data as JSON: /api/errors/59b0e4cd76d0a751.
Report an issue: GitHub.
Appendix: source
Thrown at modules/flowable-cmmn-spring-configurator/src/main/java/org/flowable/cmmn/spring/configurator/SpringCmmnEngineConfigurator.java:38
import org.flowable.common.engine.impl.interceptor.EngineConfigurationConstants;
import org.flowable.common.spring.SpringEngineConfiguration;
import org.flowable.job.service.JobServiceConfiguration;
import org.flowable.spring.SpringProcessEngineConfiguration;
/**
* @author Tijs Rademakers
* @author Joram Barrez
*/
public class SpringCmmnEngineConfigurator extends CmmnEngineConfigurator {
@Override
public void configure(AbstractEngineConfiguration engineConfiguration) {
if (cmmnEngineConfiguration == null) {
cmmnEngineConfiguration = new SpringCmmnEngineConfiguration();
}
if (!(cmmnEngineConfiguration instanceof SpringCmmnEngineConfiguration)) {
throw new FlowableException("SpringCmmnEngineConfigurator accepts only SpringCmmnEngineConfiguration. " + cmmnEngineConfiguration.getClass().getName());
}
initialiseCommonProperties(engineConfiguration, cmmnEngineConfiguration);
SpringEngineConfiguration springEngineConfiguration = (SpringEngineConfiguration) engineConfiguration;
SpringProcessEngineConfiguration springProcessEngineConfiguration = null;
if (springEngineConfiguration instanceof SpringProcessEngineConfiguration) {
springProcessEngineConfiguration = (SpringProcessEngineConfiguration) springEngineConfiguration;
} else {
AbstractEngineConfiguration processEngineConfiguration = engineConfiguration.getEngineConfigurations().get(EngineConfigurationConstants.KEY_PROCESS_ENGINE_CONFIG);
if (processEngineConfiguration instanceof SpringProcessEngineConfiguration) {
springProcessEngineConfiguration = (SpringProcessEngineConfiguration) processEngineConfiguration;
}
}
if (springProcessEngineConfiguration != null) {
copyProcessEngineProperties(springProcessEngineConfiguration);View on GitHub (pinned to d6d39ce1c6)