{"record":{"id":"5ef87d6cc2cfacf2","repo":"flowable/flowable-engine","slug":"this-activity-doesn-t-accept-signals","errorCode":null,"errorMessage":"this activity doesn't accept signals","messagePattern":"this activity doesn't accept signals","errorType":"exception","errorClass":"ActivitiException","httpStatus":null,"severity":"error","filePath":"modules/flowable5-engine/src/main/java/org/activiti/engine/impl/bpmn/behavior/FlowNodeActivityBehavior.java","lineNumber":53,"sourceCode":"    public void execute(DelegateExecution execution) {\n        leave((ActivityExecution) execution);\n    }\n\n    /**\n     * Default way of leaving a BPMN 2.0 activity: evaluate the conditions on the outgoing sequence flow and take those that evaluate to true.\n     */\n    protected void leave(ActivityExecution execution) {\n        bpmnActivityBehavior.performDefaultOutgoingBehavior(execution);\n    }\n\n    protected void leaveIgnoreConditions(ActivityExecution activityContext) {\n        bpmnActivityBehavior.performIgnoreConditionsOutgoingBehavior(activityContext);\n    }\n\n    @Override\n    public void signal(ActivityExecution execution, String signalName, Object signalData) throws Exception {\n        // concrete activity behaviours that do accept signals should override this method;\n        throw new ActivitiException(\"this activity doesn't accept signals\");\n    }\n\n}\n","sourceCodeStart":35,"sourceCodeEnd":57,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/bpmn/behavior/FlowNodeActivityBehavior.java#L35-L57","documentation":"FlowNodeActivityBehavior.signal() is the default implementation for activities that do not react to signals. Concrete behaviors that accept signals override it; the base version throws ActivitiException to signal misuse. Hitting it means the engine (or custom code) delivered a signal to an activity that cannot handle one.","triggerScenarios":"Calling execution.signal(signalName, data) or runtimeService.signal(executionId) while the current wait-state activity's behavior is the base FlowNodeActivityBehavior (e.g. a plain service task wrongly left in a wait state, or custom behavior not overriding signal).","commonSituations":"Custom ActivityBehavior extending FlowNodeActivityBehavior without overriding signal while using it as a wait state; signaling an execution parked on a non-wait-state node due to a modeling bug.","solutions":["Override signal(signalName, signalData) in your custom behavior and implement leave() from it","Use an activity type designed as a wait state (e.g. receive task, user task) if external signaling is required","Fix process flow so the execution does not stop on a non-wait-state activity"],"exampleFix":"// before\nclass MyBehavior extends FlowNodeActivityBehavior { public void execute(ActivityExecution e) { /* wait */ } }\n// after\nclass MyBehavior extends FlowNodeActivityBehavior {\n  public void execute(ActivityExecution e) { /* wait */ }\n  @Override public void signal(ActivityExecution e, String n, Object d) { leave(e); }\n}","handlingStrategy":"validation","validationCode":"// Only signal executions parked on wait states that accept signals\nString activityId = runtimeService.getActiveActivityIds(executionId).get(0);\nif (!SIGNAL_CAPABLE_ACTIVITY_IDS.contains(activityId)) throw new IllegalStateException(\"activity does not accept signals\");","typeGuard":null,"tryCatchPattern":"try { runtimeService.signal(executionId); }\ncatch (ActivitiException e) { if (e.getMessage().contains(\"doesn't accept signals\")) { convertToReceiveTaskOrFixModel(); } throw e; }","preventionTips":["Override signal() in custom FlowNodeActivityBehavior subclasses used as wait states","Model external waits with receive/user tasks, not service tasks","Check active activity type before signaling"],"tags":["bpmn","signal","activity-behavior","wait-state"],"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"}