flowable/flowable-engine · error · FlowableException
Cannot migrate case(es), not enough information
Error message
Cannot migrate case(es), not enough information
What it means
execute() dispatches validation to the migration manager based on which identifier is present: case instance id, case definition id, or key+version. If none of these combinations is populated, Flowable has no target selection and throws "Cannot migrate case(es), not enough information".
Solutions
- Set the case definition id via migrateToCaseDefinition(caseDefinitionId), or
- Provide both key AND version (version >= 0) plus the tenant id so the key+version branch is taken.
- Verify the builder calls actually executed (e.g. no early return/skip left the identifiers null).
Example fix
// before
validationCmd = new CaseInstanceMigrationValidationCmd("expenseCase", -1, "acme", doc, config); // version unset
// after
validationCmd = new CaseInstanceMigrationValidationCmd("expenseCase", 2, "acme", doc, config); // key + version >= 0 Defensive patterns
Strategy: validation
Validate before calling
boolean hasTarget = caseInstanceId != null || caseDefinitionId != null || (caseDefinitionKey != null && caseDefinitionVersion != null && caseDefinitionVersion >= 0);
if (!hasTarget) throw new IllegalArgumentException("specify case instance id, case definition id, or key+version"); Try / catch
try { migrationService.validateMigration(doc); } catch (FlowableException e) { /* insufficient migration target info */ } Prevention
- Pick one migration targeting style (by instance id, by definition id, or by key+version+tenant) and use its builder consistently.
- Assert version >= 0 when using key-based migration.
- Log the builder state before executing to catch missing identifiers early.
When it happens
Trigger: Executing CaseInstanceMigrationValidationCmd where caseInstanceId == null, caseDefinitionId == null, and (caseDefinitionKey == null || caseDefinitionVersion < 0) — e.g. only a case definition key was given without a version, or all identifiers were left unset.
Common situations: Using migrateToCaseDefinitionKeyAndVersion with a negative/unset version; building the command programmatically and forgetting caseDefinitionId; a migration builder flow where neither instance ids nor a definition target were set.
Understand the failure class
Background: "missing required argument" and "the following required arguments were not provided": what required-argument errors mean and how to fix them — this error's family across 20 libraries.
Related errors
- Must specify a case definition tenant id to migrate
- A dynamically created plan item can only be injected into a…
- activatedBefore is null
- after time is null
- Business key is null
AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11).
Data as JSON: /api/errors/1a996a5d91599594.
Report an issue: GitHub.
Appendix: source
Thrown at modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/cmd/CaseInstanceMigrationValidationCmd.java:96
this.caseDefinitionKey = caseDefinitionKey;
this.caseDefinitionVersion = caseDefinitionVersion;
this.caseDefinitionTenantId = caseDefinitionTenantId;
this.caseInstanceMigrationDocument = caseInstanceMigrationDocument;
this.cmmnEngineConfiguration = cmmnEngineConfiguration;
}
@Override
public CaseInstanceMigrationValidationResult execute(CommandContext commandContext) {
CaseInstanceMigrationManager migrationManager = cmmnEngineConfiguration.getCaseInstanceMigrationManager();
if (caseInstanceId != null) {
return migrationManager.validateMigrateCaseInstance(caseInstanceId, caseInstanceMigrationDocument, commandContext);
} else if (caseDefinitionId != null) {
return migrationManager.validateMigrateCaseInstancesOfCaseDefinition(caseDefinitionId, caseInstanceMigrationDocument, commandContext);
} else if (caseDefinitionKey != null && caseDefinitionVersion >= 0) {
return migrationManager.validateMigrateCaseInstancesOfCaseDefinition(caseDefinitionKey, caseDefinitionVersion, caseDefinitionTenantId, caseInstanceMigrationDocument, commandContext);
} else {
throw new FlowableException("Cannot migrate case(es), not enough information");
}
}
}
View on GitHub (pinned to d6d39ce1c6)