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

  1. Set the case definition id via migrateToCaseDefinition(caseDefinitionId), or
  2. Provide both key AND version (version >= 0) plus the tenant id so the key+version branch is taken.
  3. 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

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


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)