{"record":{"id":"438f4e8dcc094002","repo":"flowable/flowable-engine","slug":"requesting-form-model-without-configured-formre","errorCode":null,"errorMessage":"Requesting form model {} without configured formRepositoryService","messagePattern":"Requesting form model (.+?) without configured formRepositoryService","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/runtime/CaseInstanceHelperImpl.java","lineNumber":427,"sourceCode":"                        Map<String, Object> caseVariables = formService.getVariablesFromFormSubmission(null, \"planModel\", null, \n                                caseDefinition.getId(), ScopeTypes.CMMN, formInfo, startFormVariables, caseInstanceBuilder.getOutcome());\n\n                        if (caseVariables != null) {\n\t                        for (String variableName : caseVariables.keySet()) {\n\t                            caseInstanceEntity.setVariable(variableName, caseVariables.get(variableName));\n\t                        }\n                        }\n\n                        // The caseVariables are the variables that should be used when starting the case\n                        // the actual variables should instead be used when creating the form instances\n                        formService.createFormInstanceWithScopeId(startFormVariables, formInfo, null, caseInstanceEntity.getId(),\n                            ScopeTypes.CMMN, caseInstanceEntity.getCaseDefinitionId(), caseInstanceEntity.getTenantId(), caseInstanceBuilder.getOutcome());\n                        formFieldHandler.handleFormFieldsOnSubmit(formInfo, null, null,\n                            caseInstanceEntity.getId(), ScopeTypes.CMMN, caseVariables, caseInstanceEntity.getTenantId());\n                    }\n\n                } else {\n                    LOGGER.warn(\"Requesting form model {} without configured formRepositoryService\", planModel.getFormKey());\n                }\n            }\n        }\n\n    }\n\n    protected FormInfo resolveFormInfo(Stage planModel, CaseDefinition caseDefinition, String tenantId, FormRepositoryService formRepositoryService,\n            CmmnEngineConfiguration cmmnEngineConfiguration) {\n        String formKey = planModel.getFormKey();\n        FormInfo formInfo;\n        if (tenantId == null || CmmnEngineConfiguration.NO_TENANT_ID.equals(tenantId)) {\n            if (planModel.isSameDeployment()) {\n                String parentDeploymentId = CaseDefinitionUtil.getDefinitionDeploymentId(caseDefinition, cmmnEngineConfiguration);\n                formInfo = formRepositoryService.getFormModelByKeyAndParentDeploymentId(formKey, parentDeploymentId);\n            } else {\n                formInfo = formRepositoryService.getFormModelByKey(formKey);\n            }\n        } else {","sourceCodeStart":409,"sourceCodeEnd":445,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/runtime/CaseInstanceHelperImpl.java#L409-L445","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","solutions":["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)","Call cmmnEngineConfiguration.setFormInfoRepositoryService(formRepositoryService) before starting the engine","If forms are intentionally unused, remove the startFormKey from the case plan model or ignore the warning","Verify the same form definition referenced by the formKey is deployed in the form repository"],"exampleFix":"// before: CMMN engine without form engine\nCmmnEngineConfiguration cfg = new StandaloneCmmnEngineConfiguration();\n// after: wire the form repository service\ncfg.setFormInfoRepositoryService(formEngineConfiguration.getFormRepositoryService());","handlingStrategy":"validation","validationCode":"if (cmmnEngineConfiguration.getFormInfoRepositoryService() == null) {\n    throw new IllegalStateException(\"FormRepositoryService required: case definitions use start forms\");\n}","typeGuard":null,"tryCatchPattern":"try {\n    caseInstance = cmmnRuntimeService.createCaseInstanceBuilder()\n        .caseDefinitionKey(\"myCase\").start();\n} catch (FlowableException e) {\n    // check engine config for missing form services and whether the plan model has a formKey\n}","preventionTips":["Include and wire the form engine whenever case plan models declare start forms","Assert required services are set in an engine startup check","Remove startFormKey from plan models when forms are not used"],"tags":["cmmn","forms","configuration","missing-service"],"backgroundTag":"missing-dependency","analyzedSha":"d6d39ce1c69ff244f2d9dc6af756a9b95e865586","analyzedAt":"2026-09-11T06:41:19.413Z","contentChangedAt":"2026-09-11T06:41:19.413Z","schemaVersion":2},"datasetVersion":"2026-09-18T11:17:12.947Z"}