flowable/flowable-engine · error · UnsupportedOperationException
Not implemented yet!!!
Error message
Not implemented yet!!!
What it means
During migration validation, when an activity mapping targets the parent process via a call activity (mapping.isToParentProcess()), Flowable's migration manager throws UnsupportedOperationException because migrating to a parent process across the call-activity boundary is not yet implemented.
Solutions
- Remove toParentProcess mappings; migrate to activities within the same or another regular process definition instead.
- Split the migration: end/restart the child instance and migrate the parent instance separately.
- Check whether a newer Flowable release supports parent-process migration targets and upgrade.
- Wrap validation in try-catch and fall back to manual instance manipulation if this pattern is essential.
Example fix
// before
mapping.fromActivity("subTask").toParentProcess("parentApprovalTask");
// after
mapping.fromActivity("subTask").toActivity("approvalTask"); // same-level target only Defensive patterns
Strategy: validation
Validate before calling
for (ActivityMigrationMapping m : mappings) {
if (m.isToParentProcess()) throw new IllegalStateException("parent-process migration target not supported");
} Try / catch
try {
processInstanceMigrationBuilder.migrate();
} catch (UnsupportedOperationException e) {
logger.error("Unsupported migration target: " + e.getMessage());
} Prevention
- Never configure toParentProcess targets in migration mappings
- Check Flowable release notes for call-activity migration support
- Test migration documents against validation before executing
When it happens
Trigger: Executing a process instance migration (doValidateActivityMappings via doValidateProcessInstanceMigration) where any ActivityMigrationMapping is configured with toParentProcess(true) / a toCallActivityId.
Common situations: Trying to migrate instances out of a call-activity scope up into the parent process definition; generically built models that accidentally enable parent-process targets; attempting a feature not supported in the installed Flowable version.
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
- Cannot find the process definition to migrate to…
- Cannot find the process to migrate, with id" +…
- From activity '" + Arrays.toString(duplicates.toArray()) +…
- Set of process instance ids is null
- A process instance id is required, but the provided id '" +…
AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11).
Data as JSON: /api/errors/c3ec72404de28010.
Report an issue: GitHub.
Appendix: source
Thrown at modules/flowable-engine/src/main/java/org/flowable/engine/impl/migration/ProcessInstanceMigrationManagerImpl.java:299
procDefKey = document.getProcessInstanceVariables().getOrDefault(procDefKey.substring(2, procDefKey.length() - 1), procDefKey).toString();
}
}
try {
ProcessDefinition mappingProcDef = resolveProcessDefinition(procDefKey, mapping.getCallActivityProcessDefinitionVersion(), document.getMigrateToProcessDefinitionTenantId(), commandContext);
mappingModel = ProcessDefinitionUtil.getBpmnModel(mappingProcDef.getId());
} catch (FlowableException e) {
validationResult.addValidationMessage(e.getMessage() + " for call activity element with id '" + mapping.getToCallActivityId() + "' in the process definition with id '" + mappingModel.getMainProcess().getId() + "'");
continue;
}
} else {
validationResult.addValidationMessage("There's no call activity element with id '" + mapping.getToCallActivityId() + "' in the process definition with id '" + mappingModel.getMainProcess().getId() + "'");
continue;
}
}
if (mapping.isToParentProcess()) {
FlowElement callActivityFlowElement = newModel.getFlowElement(mapping.getToCallActivityId());
throw new UnsupportedOperationException("Not implemented yet!!!");
}
//Check the target flow element
List<String> toActivityIds = mapping.getToActivityIds();
for (String targetActivityId : toActivityIds) {
if (!isActivityIdInProcessDefinitionModel(targetActivityId, mappingModel)) {
validationResult.addValidationMessage("Invalid mapping for '" + execution.getCurrentActivityId() + "' to '" +
targetActivityId + "', cannot be found in the process definition with id '" + mappingModel.getMainProcess().getId() + "'");
continue;
}
//We cannot move an activity inside a MultiInstance container
FlowElement targetFlowElement = mappingModel.getFlowElement(targetActivityId);
String targetFlowElementMultiInstanceParentId = getFlowElementMultiInstanceParentId(targetFlowElement);
if (targetFlowElementMultiInstanceParentId != null) {
validationResult.addValidationMessage("Invalid mapping for '" + execution.getCurrentActivityId() + "' to '" + targetActivityId + "', cannot migrate arbitrarily inside a Multi Instance container '" +
targetFlowElementMultiInstanceParentId + "' inside process definition with id '" + mappingModel.getMainProcess().getId() + "'");
continue;
}View on GitHub (pinned to d6d39ce1c6)