{"record":{"id":"f1570d5b1a7e4de9","repo":"flowable/flowable-engine","slug":"invalid-action-actionrequest-getaction","errorCode":null,"errorMessage":"Invalid action: '${actionRequest.getAction()}'.","messagePattern":"Invalid action: '(.+?)'\\.","errorType":"http","errorClass":"FlowableIllegalArgumentException","httpStatus":400,"severity":"error","filePath":"modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/repository/CaseDefinitionResource.java","lineNumber":109,"sourceCode":"            @ApiParam(required = true) @RequestBody CaseDefinitionActionRequest actionRequest) {\n\n        if (actionRequest == null) {\n            throw new FlowableIllegalArgumentException(\"No action found in request body.\");\n        }\n\n        CaseDefinition caseDefinition = getCaseDefinitionFromRequest(caseDefinitionId);\n\n        if (actionRequest.getCategory() != null) {\n            // Update of category required\n            repositoryService.setCaseDefinitionCategory(caseDefinition.getId(), actionRequest.getCategory());\n\n            // No need to re-fetch the CaseDefinition entity, just update category in response\n            CaseDefinitionResponse response = restResponseFactory.createCaseDefinitionResponse(caseDefinition);\n            response.setCategory(actionRequest.getCategory());\n            return response;\n        }\n        \n        throw new FlowableIllegalArgumentException(\"Invalid action: '\" + actionRequest.getAction() + \"'.\");\n    }\n\n    @ApiOperation(value = \"Get a case definition start form\", tags = { \"Case Definitions\" })\n    @ApiResponses(value = {\n            @ApiResponse(code = 200, message = \"Indicates request was successful and the case definition form is returned\"),\n            @ApiResponse(code = 404, message = \"Indicates the requested case definition was not found.\")\n    })\n    @GetMapping(value = \"/cmmn-repository/case-definitions/{caseDefinitionId}/start-form\", produces = \"application/json\")\n    public String getProcessDefinitionStartForm(@ApiParam(name = \"caseDefinitionId\") @PathVariable String caseDefinitionId) {\n        FormEngineConfigurationApi formEngineConfiguration = (FormEngineConfigurationApi) cmmnEngineConfiguration.getEngineConfigurations().get(\n                EngineConfigurationConstants.KEY_FORM_ENGINE_CONFIG);\n        if (formEngineConfiguration == null) {\n            return null;\n        }\n        FormRepositoryService formRepositoryService = formEngineConfiguration.getFormRepositoryService();\n        if (formRepositoryService == null) {\n            return null;\n        }","sourceCodeStart":91,"sourceCodeEnd":127,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/repository/CaseDefinitionResource.java#L91-L127","documentation":"executeCaseDefinitionAction only handles requests carrying a category (update-category); if no category is set the request falls through to a final throw of FlowableIllegalArgumentException reporting the invalid/unsupported action string. It is thrown whenever the body parses but contains no actionable field.","triggerScenarios":"PUT .../case-definitions/{id} with a body like {\"action\":\"suspend\"} or {\"action\":\"activate\"} — actions supported in the BPMN process REST API but not in the CMMN case REST API — or any body without a category field.","commonSituations":"Copy-pasting process-definition client code against the case-definition endpoint; typos in the action name; assuming action-based semantics where the CMMN API actually keys off the category field.","solutions":["Include a \"category\" field in the body to update the category, or use another endpoint if you intended a different operation.","Do not reuse BPMN process-definition action payloads ('activate'/'suspend') against case definitions.","Check the CaseDefinitionActionRequest fields supported by your Flowable version."],"exampleFix":"// before\n{\"action\":\"activate\"}\n// after\n{\"action\":\"update-category\",\"category\":\"finance\"}","handlingStrategy":"validation","validationCode":"if (request.getCategory() == null) throw new IllegalArgumentException(\"CMMN case definition action requires a 'category' field (update-category)\");","typeGuard":null,"tryCatchPattern":"try { ... } catch (FlowableIllegalArgumentException e) { log.warn(\"Unsupported case definition action\"); map to 400; }","preventionTips":["Don't reuse BPMN process-definition action payloads against case endpoints.","Validate request fields against CaseDefinitionActionRequest before sending.","Document that category is the only handled action."],"tags":["rest-api","unsupported-operation","validation"],"backgroundTag":"unsupported-operation","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"}