{"record":{"id":"1a996a5d91599594","repo":"flowable/flowable-engine","slug":"cannot-migrate-case-es-not-enough-information-1a996a","errorCode":null,"errorMessage":"Cannot migrate case(es), not enough information","messagePattern":"Cannot migrate case\\(es\\), not enough information","errorType":"exception","errorClass":"FlowableException","httpStatus":null,"severity":"error","filePath":"modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/cmd/CaseInstanceMigrationValidationCmd.java","lineNumber":96,"sourceCode":"        this.caseDefinitionKey = caseDefinitionKey;\n        this.caseDefinitionVersion = caseDefinitionVersion;\n        this.caseDefinitionTenantId = caseDefinitionTenantId;\n        this.caseInstanceMigrationDocument = caseInstanceMigrationDocument;\n        this.cmmnEngineConfiguration = cmmnEngineConfiguration;\n    }\n\n    @Override\n    public CaseInstanceMigrationValidationResult execute(CommandContext commandContext) {\n        CaseInstanceMigrationManager migrationManager = cmmnEngineConfiguration.getCaseInstanceMigrationManager();\n\n        if (caseInstanceId != null) {\n            return migrationManager.validateMigrateCaseInstance(caseInstanceId, caseInstanceMigrationDocument, commandContext);\n        } else if (caseDefinitionId != null) {\n            return migrationManager.validateMigrateCaseInstancesOfCaseDefinition(caseDefinitionId, caseInstanceMigrationDocument, commandContext);\n        } else if (caseDefinitionKey != null && caseDefinitionVersion >= 0) {\n            return migrationManager.validateMigrateCaseInstancesOfCaseDefinition(caseDefinitionKey, caseDefinitionVersion, caseDefinitionTenantId, caseInstanceMigrationDocument, commandContext);\n        } else {\n            throw new FlowableException(\"Cannot migrate case(es), not enough information\");\n        }\n    }\n}\n","sourceCodeStart":78,"sourceCodeEnd":100,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/cmd/CaseInstanceMigrationValidationCmd.java#L78-L100","documentation":"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\".","triggerScenarios":"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.","commonSituations":"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.","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)."],"exampleFix":"// before\nvalidationCmd = new CaseInstanceMigrationValidationCmd(\"expenseCase\", -1, \"acme\", doc, config); // version unset\n\n// after\nvalidationCmd = new CaseInstanceMigrationValidationCmd(\"expenseCase\", 2, \"acme\", doc, config); // key + version >= 0","handlingStrategy":"validation","validationCode":"boolean hasTarget = caseInstanceId != null || caseDefinitionId != null || (caseDefinitionKey != null && caseDefinitionVersion != null && caseDefinitionVersion >= 0);\nif (!hasTarget) throw new IllegalArgumentException(\"specify case instance id, case definition id, or key+version\");","typeGuard":null,"tryCatchPattern":"try { migrationService.validateMigration(doc); } catch (FlowableException e) { /* insufficient migration target info */ }","preventionTips":["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."],"tags":["cmmn","case-migration","missing-argument","java"],"backgroundTag":"missing-required-argument","analyzedSha":"d6d39ce1c69ff244f2d9dc6af756a9b95e865586","analyzedAt":"2026-09-11T06:41:19.413Z","contentChangedAt":"2026-09-11T06:41:19.413Z","schemaVersion":2},"datasetVersion":"2026-09-18T11:17:12.947Z"}