flowable/flowable-engine · warning

Requesting form model

Error message

Requesting form model {} without configured formRepositoryService

What it means

When a case instance is started whose plan model declares a start form (formKey), applyCaseInstanceBuilder requests the form model from the configured FormRepositoryService. If formInfoRepositoryService is null on the configuration, the form cannot be retrieved, so this warning is logged and form handling is skipped — the case starts without its start form being processed.

Solutions

  1. Add the form engine and wire it: deploy flowable-form-engine and set formInfoRepositoryService (or use FlowableCmmnEngineConfiguration's form resource initializer / the spring boot starter that auto-wires it)
  2. Call cmmnEngineConfiguration.setFormInfoRepositoryService(formRepositoryService) before starting the engine
  3. If forms are intentionally unused, remove the startFormKey from the case plan model or ignore the warning
  4. Verify the same form definition referenced by the formKey is deployed in the form repository

Example fix

// before: CMMN engine without form engine
CmmnEngineConfiguration cfg = new StandaloneCmmnEngineConfiguration();
// after: wire the form repository service
cfg.setFormInfoRepositoryService(formEngineConfiguration.getFormRepositoryService());
Defensive patterns

Strategy: validation

Validate before calling

if (cmmnEngineConfiguration.getFormInfoRepositoryService() == null) {
    throw new IllegalStateException("FormRepositoryService required: case definitions use start forms");
}

Try / catch

try {
    caseInstance = cmmnRuntimeService.createCaseInstanceBuilder()
        .caseDefinitionKey("myCase").start();
} catch (FlowableException e) {
    // check engine config for missing form services and whether the plan model has a formKey
}

Prevention

When it happens

Trigger: Starting a case via CaseInstanceBuilder (e.g. cmmnRuntimeService.createCaseInstanceBuilder()...start()) where the case definition's plan model has a formKey, but the CmmnEngineConfiguration was built without a FormRepositoryService / formInfoRepositoryService set.

Common situations: Embedding the CMMN engine standalone without the form engine module on the classpath or configured; Spring Boot app with flowable-cmmn but not flowable-form (or form engine disabled); programmatic configurations that skip FormEngineConfiguration wiring.

Understand the failure class

Background: "not installed", "pip install", "required for": how missing-dependency errors surface across open-source libraries — this error's family across 34 libraries.

Related errors


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

Appendix: source

Thrown at modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/runtime/CaseInstanceHelperImpl.java:427

                        Map<String, Object> caseVariables = formService.getVariablesFromFormSubmission(null, "planModel", null, 
                                caseDefinition.getId(), ScopeTypes.CMMN, formInfo, startFormVariables, caseInstanceBuilder.getOutcome());

                        if (caseVariables != null) {
	                        for (String variableName : caseVariables.keySet()) {
	                            caseInstanceEntity.setVariable(variableName, caseVariables.get(variableName));
	                        }
                        }

                        // The caseVariables are the variables that should be used when starting the case
                        // the actual variables should instead be used when creating the form instances
                        formService.createFormInstanceWithScopeId(startFormVariables, formInfo, null, caseInstanceEntity.getId(),
                            ScopeTypes.CMMN, caseInstanceEntity.getCaseDefinitionId(), caseInstanceEntity.getTenantId(), caseInstanceBuilder.getOutcome());
                        formFieldHandler.handleFormFieldsOnSubmit(formInfo, null, null,
                            caseInstanceEntity.getId(), ScopeTypes.CMMN, caseVariables, caseInstanceEntity.getTenantId());
                    }

                } else {
                    LOGGER.warn("Requesting form model {} without configured formRepositoryService", planModel.getFormKey());
                }
            }
        }

    }

    protected FormInfo resolveFormInfo(Stage planModel, CaseDefinition caseDefinition, String tenantId, FormRepositoryService formRepositoryService,
            CmmnEngineConfiguration cmmnEngineConfiguration) {
        String formKey = planModel.getFormKey();
        FormInfo formInfo;
        if (tenantId == null || CmmnEngineConfiguration.NO_TENANT_ID.equals(tenantId)) {
            if (planModel.isSameDeployment()) {
                String parentDeploymentId = CaseDefinitionUtil.getDefinitionDeploymentId(caseDefinition, cmmnEngineConfiguration);
                formInfo = formRepositoryService.getFormModelByKeyAndParentDeploymentId(formKey, parentDeploymentId);
            } else {
                formInfo = formRepositoryService.getFormModelByKey(formKey);
            }
        } else {

View on GitHub (pinned to d6d39ce1c6)