flowable/flowable-engine · warning

Unsupported intermediate throw event type for throw event

Error message

Unsupported intermediate throw event type for throw event {}

What it means

An intermediate throw event carries an event definition type other than the supported throw kinds (message, signal, compensate) and is not null (which would be a legal 'none' throw event). The parser logs this warning and assigns no activity behavior, so the throw event does nothing at runtime.

Solutions

  1. Change the throw event's definition to a message, signal, or compensate definition (or remove it for a none event)
  2. Remove the unsupported event definition from the throw event
  3. Upgrade or extend the engine/parse handler if a new event definition type must be supported

Example fix

// before
<intermediateThrowEvent id="t1"><escalateEventDefinition/></intermediateThrowEvent>
// after
<intermediateThrowEvent id="t1"><signalEventDefinition signalRef="mySignal"/></intermediateThrowEvent>
Defensive patterns

Strategy: validation

Validate before calling

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

Prevention

When it happens

Trigger: executeParse of an IntermediateThrowEvent whose eventDefinition is not a MessageEventDefinition, SignalEventDefinition, CompensateEventDefinition, or null — e.g. an escalate/link definition, or a malformed event element producing an unknown EventDefinition subclass.

Common situations: BPMN imported from other designers using escalate or link throw definitions; model upgrades introducing event types this engine version predates; copy-paste of event definitions between elements.

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/83ef2ad7e4923ebf. Report an issue: GitHub.

Appendix: source

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

        ActivityImpl nestedActivityImpl = createActivityOnCurrentScope(bpmnParse, intermediateEvent, BpmnXMLConstants.ELEMENT_EVENT_THROW);

        EventDefinition eventDefinition = null;
        if (!intermediateEvent.getEventDefinitions().isEmpty()) {
            eventDefinition = intermediateEvent.getEventDefinitions().get(0);
        }

        nestedActivityImpl.setAsync(intermediateEvent.isAsynchronous());
        nestedActivityImpl.setExclusive(!intermediateEvent.isNotExclusive());

        if (eventDefinition instanceof SignalEventDefinition) {
            bpmnParse.getBpmnParserHandlers().parseElement(bpmnParse, eventDefinition);
        } else if (eventDefinition instanceof org.flowable.bpmn.model.CompensateEventDefinition) {
            bpmnParse.getBpmnParserHandlers().parseElement(bpmnParse, eventDefinition);
        } else if (eventDefinition == null) {
            nestedActivityImpl.setActivityBehavior(bpmnParse.getActivityBehaviorFactory().createIntermediateThrowNoneEventActivityBehavior(intermediateEvent));
        } else {
            LOGGER.warn("Unsupported intermediate throw event type for throw event {}", intermediateEvent.getId());
        }
    }

    //
    // Seems not to be used anymore?
    //
    // protected CompensateEventDefinition createCompensateEventDefinition(BpmnParse bpmnParse, org.activiti.bpmn.model.CompensateEventDefinition eventDefinition, ScopeImpl scopeElement) {
    // if (StringUtils.isNotEmpty(eventDefinition.getActivityRef())) {
    // if (scopeElement.findActivity(eventDefinition.getActivityRef()) == null) {
    // bpmnParse.getBpmnModel().addProblem("Invalid attribute value for 'activityRef': no activity with id '" + eventDefinition.getActivityRef() +
    // "' in current scope " + scopeElement.getId(), eventDefinition);
    // }
    // }
    //
    // CompensateEventDefinition compensateEventDefinition = new CompensateEventDefinition();
    // compensateEventDefinition.setActivityRef(eventDefinition.getActivityRef());
    // compensateEventDefinition.setWaitForCompletion(eventDefinition.isWaitForCompletion());
    //

View on GitHub (pinned to d6d39ce1c6)