{"record":{"id":"c406da0f15d78670","repo":"flowable/flowable-engine","slug":"signal-name-is-required","errorCode":null,"errorMessage":"Signal name is required.","messagePattern":"Signal 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/ExecutionCollectionResource.java","lineNumber":149,"sourceCode":"    //FIXME Documentation ?\n    @ApiOperation(value = \"Signal event received\", tags = { \"Executions\" }, code = 204)\n    @ApiResponses(value = {\n            @ApiResponse(code = 204, message = \"Indicates request was successful and the executions are returned\"),\n            @ApiResponse(code = 404, message = \"Indicates a parameter was passed in the wrong format . The status-message contains additional information.\")\n    })\n    @PutMapping(value = \"/runtime/executions\")\n    @ResponseStatus(HttpStatus.NO_CONTENT)\n    public void executeExecutionAction(@RequestBody ExecutionActionRequest actionRequest) {\n        if (restApiInterceptor != null) {\n            restApiInterceptor.doExecutionActionRequest(actionRequest);\n        }\n        \n        if (!ExecutionActionRequest.ACTION_SIGNAL_EVENT_RECEIVED.equals(actionRequest.getAction())) {\n            throw new FlowableIllegalArgumentException(\"Illegal action: '\" + actionRequest.getAction() + \"'.\");\n        }\n\n        if (actionRequest.getSignalName() == null) {\n            throw new FlowableIllegalArgumentException(\"Signal name is required.\");\n        }\n\n        if (actionRequest.getVariables() != null) {\n            runtimeService.signalEventReceived(actionRequest.getSignalName(), getVariablesToSet(actionRequest.getVariables()));\n        } else {\n            runtimeService.signalEventReceived(actionRequest.getSignalName());\n        }\n    }\n}\n","sourceCodeStart":131,"sourceCodeEnd":159,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/runtime/process/ExecutionCollectionResource.java#L131-L159","documentation":"FlowableIllegalArgumentException thrown by ExecutionCollectionResource.executeExecutionAction when the action is 'signal-event-received' but the request's signalName is null. The runtime service needs the signal name to fire the matching signal boundary/start event; it cannot proceed without it.","triggerScenarios":"POST /runtime/executions with body {\"action\":\"signal-event-received\"} lacking the 'signalName' field, or with signalName explicitly set to null.","commonSituations":"Omitting signalName while including 'variables'; renaming the field in client code ('name' or 'signal' instead of 'signalName'); template/config-driven payloads where the signal name binding is empty.","solutions":["Add \"signalName\" with the name of the signal defined in the process model.","Verify the field name is exactly 'signalName'.","Confirm the signal exists in the BPMN model and match its name exactly.","If variables are needed, keep them alongside a valid signalName: {\"action\":\"signal-event-received\",\"signalName\":\"...\",\"variables\":[...]}."],"exampleFix":"// before\n{\"action\": \"signal-event-received\", \"variables\": [{\"name\": \"x\", \"value\": 1}]}\n// after\n{\"action\": \"signal-event-received\", \"signalName\": \"orderSignal\", \"variables\": [{\"name\": \"x\", \"value\": 1}]}","handlingStrategy":"validation","validationCode":"if (body.action === 'signal-event-received' && (!body.signalName || typeof body.signalName !== 'string')) {\n  throw new Error('signalName is required when action is signal-event-received');\n}","typeGuard":"function hasSignalName(b: { signalName?: unknown }): b is { signalName: string } {\n  return typeof b.signalName === 'string' && b.signalName.length > 0;\n}","tryCatchPattern":"try {\n  await restClient.post('/runtime/executions', body);\n} catch (e) {\n  if (e.response && e.response.status === 400 && /Signal name is required/.test(e.response.data && e.response.data.message || '')) {\n    console.error('Request body must include a non-null \"signalName\"');\n  }\n  throw e;\n}","preventionTips":["Always pair action 'signal-event-received' with a signalName in the same payload.","Validate payloads against a JSON schema before sending.","Reuse the signal name constants used in your BPMN deployment.","Don't confuse signalName with messageName when switching endpoints."],"tags":["rest-api","validation","signal","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"}