flowable/flowable-engine · warning

Unsupported intermediate catch event type for event

Error message

Unsupported intermediate catch event type for event {}

What it means

An intermediate catch event carries an event definition type the parser does not recognize among the supported kinds (timer, signal, message). The parser logs this warning and leaves the event without a behavior, so it will never fire. This guards against malformed or future/unknown BPMN event definition types.

Solutions

  1. Replace the catch event's event definition with a timer, message, or signal definition
  2. Remove the unsupported event definition or the whole catch event if it is not needed
  3. Convert unsupported constructs (e.g. link events) into equivalent supported elements before deployment

Example fix

// before
<intermediateCatchEvent id="c1"><linkEventDefinition name="x"/></intermediateCatchEvent>
// after
<intermediateCatchEvent id="c1"><timerEventDefinition><timeDuration>PT1H</timeDuration></timerEventDefinition></intermediateCatchEvent>
Defensive patterns

Strategy: validation

Validate before calling

for (IntermediateCatchEvent e : model.getFlowElementsOfType(IntermediateCatchEvent.class)) {
    for (EventDefinition ed : e.getEventDefinitions()) {
        if (!(ed instanceof TimerEventDefinition || ed instanceof MessageEventDefinition || ed instanceof SignalEventDefinition)) {
            throw new IllegalArgumentException("Unsupported catch event definition on " + e.getId());
        }
    }
}

Type guard

function isSupportedCatchDefinition(ed) { return ed != null && ['timer','message','signal'].includes(ed.type ?? guessType(ed)); }

Prevention

When it happens

Trigger: executeParse of an IntermediateCatchEvent whose eventDefinition is not a TimerEventDefinition, SignalEventDefinition, or MessageEventDefinition (e.g. a compensatescatch or link event definition placed on a catch event, or XML yielding an unexpected EventDefinition subclass).

Common situations: Using link or compensation event definitions on catch events (not supported here); importing BPMN from other tools emitting exotic event types; typo'd element names producing a default EventDefinition object.

Understand the failure class

Background: UnsupportedOperationException and "is not supported" errors: when a library deliberately refuses a call — this error's family across 30 libraries.

Related errors


AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11). Data as JSON: /api/errors/5fdfc22fb8202812. Report an issue: GitHub.

Appendix: source

Thrown at modules/flowable5-engine/src/main/java/org/activiti/engine/impl/bpmn/parser/handler/IntermediateCatchEventParseHandler.java:79

                nestedActivity = createActivityOnScope(bpmnParse, event, BpmnXMLConstants.ELEMENT_EVENT_CATCH, gatewayActivity);
            } else {
                nestedActivity = createActivityOnScope(bpmnParse, event, BpmnXMLConstants.ELEMENT_EVENT_CATCH, scope);
            }

            nestedActivity.setAsync(event.isAsynchronous());
            nestedActivity.setExclusive(!event.isNotExclusive());

            // Catch event behavior is the same for all types
            nestedActivity.setActivityBehavior(bpmnParse.getActivityBehaviorFactory().createIntermediateCatchEventActivityBehavior(event));

            if (eventDefinition instanceof TimerEventDefinition
                    || eventDefinition instanceof SignalEventDefinition
                    || eventDefinition instanceof MessageEventDefinition) {

                bpmnParse.getBpmnParserHandlers().parseElement(bpmnParse, eventDefinition);

            } else {
                LOGGER.warn("Unsupported intermediate catch event type for event {}", event.getId());
            }
        }
    }

}

View on GitHub (pinned to d6d39ce1c6)