{"record":{"id":"73fd0b169fc37f78","repo":"flowable/flowable-engine","slug":"message-name-is-required","errorCode":null,"errorMessage":"Message name is required","messagePattern":"Message name is required","errorType":"validation","errorClass":"FlowableIllegalArgumentException","httpStatus":400,"severity":"error","filePath":"modules/flowable-rest/src/main/java/org/flowable/rest/service/api/runtime/process/ExecutionResource.java","lineNumber":89,"sourceCode":"            } else if (actionRequest.getVariables() != null) {\n                runtimeService.trigger(execution.getId(), getVariablesToSet(actionRequest.getVariables()));\n            } else {\n                runtimeService.trigger(execution.getId());\n            }\n            \n        } else if (ExecutionActionRequest.ACTION_SIGNAL_EVENT_RECEIVED.equals(actionRequest.getAction())) {\n            if (actionRequest.getSignalName() == null) {\n                throw new FlowableIllegalArgumentException(\"Signal name is required\");\n            }\n            if (actionRequest.getVariables() != null) {\n                runtimeService.signalEventReceived(actionRequest.getSignalName(), execution.getId(), getVariablesToSet(actionRequest.getVariables()));\n            } else {\n                runtimeService.signalEventReceived(actionRequest.getSignalName(), execution.getId());\n            }\n            \n        } else if (ExecutionActionRequest.ACTION_MESSAGE_EVENT_RECEIVED.equals(actionRequest.getAction())) {\n            if (actionRequest.getMessageName() == null) {\n                throw new FlowableIllegalArgumentException(\"Message name is required\");\n            }\n            if (actionRequest.getVariables() != null) {\n                runtimeService.messageEventReceived(actionRequest.getMessageName(), execution.getId(), getVariablesToSet(actionRequest.getVariables()));\n            } else {\n                runtimeService.messageEventReceived(actionRequest.getMessageName(), execution.getId());\n            }\n            \n        } else {\n            throw new FlowableIllegalArgumentException(\"Invalid action: '\" + actionRequest.getAction() + \"'.\");\n        }\n\n        // Re-fetch the execution, could have changed due to action or even completed\n        execution = runtimeService.createExecutionQuery().executionId(execution.getId()).singleResult();\n        if (execution == null) {\n            // Execution is finished, return empty body to inform user\n            response.setStatus(HttpStatus.NO_CONTENT.value());\n            return null;\n        } else {","sourceCodeStart":71,"sourceCodeEnd":107,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/runtime/process/ExecutionResource.java#L71-L107","documentation":"FlowableIllegalArgumentException thrown by ExecutionResource.performExecutionAction when the action is 'message-event-received' but messageName is null. Delivering a message to an execution requires the message name to match the message-catching event in the process definition.","triggerScenarios":"POST /runtime/executions/{executionId} with body {\"action\":\"message-event-received\"} and no (or null) messageName field, e.g. when the client reuses a signal-style payload that only sets signalName.","commonSituations":"Copy-pasting signal payloads and forgetting to swap signalName for messageName; message name empty in external system integration config; key misspelled as 'message' or 'name'.","solutions":["Add \"messageName\" to the request body with the exact message name from the BPMN model.","Check the JSON key is 'messageName', not 'signalName' (a signal payload is rejected here).","Confirm the execution is waiting at a message boundary/intermediate catch event with that message name.","Match the message name exactly as declared in the process definition (case-sensitive)."],"exampleFix":"// before\n{\"action\": \"message-event-received\", \"signalName\": \"paymentReceived\"}\n// after\n{\"action\": \"message-event-received\", \"messageName\": \"paymentReceived\"}","handlingStrategy":"validation","validationCode":"if (body.action === 'message-event-received' && (!body.messageName || typeof body.messageName !== 'string')) {\n  throw new Error(`POST /runtime/executions/${executionId} requires \"messageName\" for action message-event-received`);\n}","typeGuard":"function isMessageRequest(b: { action?: string; messageName?: unknown }): b is { action: 'message-event-received'; messageName: string } {\n  return b.action === 'message-event-received' && typeof b.messageName === 'string' && b.messageName.length > 0;\n}","tryCatchPattern":"try {\n  await restClient.post(`/runtime/executions/${executionId}`, body);\n} catch (e) {\n  if (e.response && e.response.status === 400 && /Message name is required/.test(e.response.data && e.response.data.message || '')) {\n    console.error('Add \"messageName\" to the execution action request body');\n  }\n  throw e;\n}","preventionTips":["Use messageName (not signalName) with action 'message-event-received'.","Match the messageName exactly to the message declared in the BPMN model.","Validate payload shape with a JSON schema per action type.","Confirm the execution is waiting at the corresponding message catch event before calling."],"tags":["rest-api","validation","message-event","flowable"],"backgroundTag":"missing-required-argument","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"}