{"record":{"id":"13c85c6574b3e3e3","repo":"flowable/flowable-engine","slug":"no-formengine-defined-process-engine-configurat","errorCode":null,"errorMessage":"No formEngine '' defined process engine configuration","messagePattern":"No formEngine '' defined process engine configuration","errorType":"exception","errorClass":"ActivitiException","httpStatus":null,"severity":"error","filePath":"modules/flowable5-engine/src/main/java/org/activiti/engine/impl/cmd/GetRenderedStartFormCmd.java","lineNumber":62,"sourceCode":"        ProcessDefinition processDefinition = commandContext\n                .getProcessEngineConfiguration()\n                .getDeploymentManager()\n                .findDeployedProcessDefinitionById(processDefinitionId);\n        if (processDefinition == null) {\n            throw new ActivitiObjectNotFoundException(\"Process Definition '\" + processDefinitionId + \"' not found\", ProcessDefinition.class);\n        }\n        StartFormHandler startFormHandler = ((ProcessDefinitionEntity) processDefinition).getStartFormHandler();\n        if (startFormHandler == null) {\n            return null;\n        }\n\n        FormEngine formEngine = commandContext\n                .getProcessEngineConfiguration()\n                .getFormEngines()\n                .get(formEngineName);\n\n        if (formEngine == null) {\n            throw new ActivitiException(\"No formEngine '\" + formEngineName + \"' defined process engine configuration\");\n        }\n\n        StartFormData startForm = startFormHandler.createStartFormData(processDefinition);\n\n        return formEngine.renderStartForm(startForm);\n    }\n}\n","sourceCodeStart":44,"sourceCodeEnd":70,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/cmd/GetRenderedStartFormCmd.java#L44-L70","documentation":"Thrown when the formEngineName configured on the start form (or passed to getRenderedStartForm) is not registered in the process engine configuration's formEngines map, so no FormEngine can render the start form.","triggerScenarios":"Calling getRenderedStartForm with a formEngineName that was never registered, or a process whose <startEvent ... flowable:formEngine=\"xyz\"> attribute names a FormEngine not added via processEngineConfiguration.setFormEngines()/formEngines map.","commonSituations":"Custom FormEngine bean not registered in the engine configuration (e.g. spring bean defined but not wired into ProcessEngineConfigurationImpl); typos in the flowable:formEngine attribute; copying a config that had a custom form engine into a project using default configuration which only registers 'form' and 'juel' engines.","solutions":["Check which formEngineName is requested (process definition XML attribute or API argument).","Register the engine: get ProcessEngineConfigurationImpl and ensure formEngines contains that name (config.getFormEngines().put(name, engine)) before engine startup.","Use a built-in engine name ('form' for the default JSP form engine) if no custom engine is required.","Fix typos in the flowable:formEngine attribute in the BPMN XML."],"exampleFix":"// before\n<startEvent id=\"start\" flowable:formKey=\"myForm\" flowable:formEngine=\"customEngine\" /> <!-- not registered -->\n// after\n((ProcessEngineConfigurationImpl) processEngine.getProcessEngineConfiguration())\n    .getFormEngines().put(\"customEngine\", new MyCustomFormEngine());","handlingStrategy":"validation","validationCode":"ProcessEngineConfigurationImpl cfg = (ProcessEngineConfigurationImpl)\n    processEngine.getProcessEngineConfiguration();\nif (!cfg.getFormEngines().containsKey(formEngineName)) {\n    throw new IllegalStateException(\"Form engine not registered: \" + formEngineName);\n}","typeGuard":null,"tryCatchPattern":"try {\n    formService.getRenderedStartForm(id, formEngineName);\n} catch (ActivitiException e) {\n    if (e.getMessage().contains(\"No formEngine\")) {\n        // fall back to default 'form' engine or fail config check\n    }\n}","preventionTips":["Register all custom FormEngines in ProcessEngineConfiguration before buildProcessEngine()","Keep formEngine attribute names in BPMN XML in sync with config keys (single constants file)","Validate engine configuration in a startup smoke test"],"tags":["form-engine","configuration","workflow"],"backgroundTag":"invalid-config-value","analyzedSha":"d6d39ce1c69ff244f2d9dc6af756a9b95e865586","analyzedAt":"2026-09-11T06:41:19.413Z","contentChangedAt":"2026-09-11T06:41:19.413Z","schemaVersion":2},"datasetVersion":"2026-09-14T11:17:12.474Z"}