{"record":{"id":"38e417a70c8ed61f","repo":"flowable/flowable-engine","slug":"cannot-validate-process-migration-not-enough-info","errorCode":null,"errorMessage":"Cannot validate process migration, not enough information","messagePattern":"Cannot validate process migration, not enough information","errorType":"exception","errorClass":"FlowableException","httpStatus":null,"severity":"error","filePath":"modules/flowable-engine/src/main/java/org/flowable/engine/impl/cmd/ProcessInstanceMigrationValidationCmd.java","lineNumber":91,"sourceCode":"\n    @Override\n    public ProcessInstanceMigrationValidationResult execute(CommandContext commandContext) {\n\n        ProcessInstanceMigrationManager migrationManager = CommandContextUtil.getProcessEngineConfiguration(commandContext).getProcessInstanceMigrationManager();\n\n        if (processInstanceId != null) {\n            return migrationManager.validateMigrateProcessInstance(processInstanceId, processInstanceMigrationDocument, commandContext);\n        }\n\n        if (processDefinitionId != null) {\n            return migrationManager.validateMigrateProcessInstancesOfProcessDefinition(processDefinitionId, processInstanceMigrationDocument, commandContext);\n        }\n\n        if (processDefinitionKey != null && processDefinitionVersion >= 0) {\n            return migrationManager.validateMigrateProcessInstancesOfProcessDefinition(processDefinitionKey, processDefinitionVersion, processDefinitionTenantId, processInstanceMigrationDocument, commandContext);\n        }\n\n        throw new FlowableException(\"Cannot validate process migration, not enough information\");\n    }\n\n}\n","sourceCodeStart":73,"sourceCodeEnd":95,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable-engine/src/main/java/org/flowable/engine/impl/cmd/ProcessInstanceMigrationValidationCmd.java#L73-L95","documentation":"In ProcessInstanceMigrationValidationCmd.execute, validation can target a process instance id, a process definition id, or a definition key+version. If none of these selectors is populated the command cannot determine what to validate and throws this FlowableException. It means the validation command was executed with no migration target set.","triggerScenarios":"Executing a ProcessInstanceMigrationValidationCmd constructed without setting processInstanceId, processDefinitionId, or (processDefinitionKey + processDefinitionVersion >= 0) — e.g. only the document was provided, or key was set but version remained the default -1.","commonSituations":"Custom validation tooling instantiating the command directly; constructor arguments dropped during refactoring; key set but version left unset; mixing constructor variants so no selector survives.","solutions":["Set exactly one selector: a processInstanceId, a processDefinitionId, or key+version (version >= 0)","Use the public API: managementService.createProcessInstanceMigrationBuilder().migrateToProcessDefinition(...).validateMigration(...) which populates the selector","Check that version is not left at its unset default when migrating by key"],"exampleFix":"// before\nProcessInstanceMigrationValidationCmd cmd = new ProcessInstanceMigrationValidationCmd(doc); // no target\n// after\nProcessInstanceMigrationValidationCmd cmd = new ProcessInstanceMigrationValidationCmd(\n    doc, processDefinitionId);","handlingStrategy":"validation","validationCode":"boolean hasValidationTarget = instanceId != null\n    || definitionId != null\n    || (definitionKey != null && definitionVersion >= 0);\nif (!hasValidationTarget) throw new IllegalArgumentException(\"Set a validation target\");","typeGuard":"boolean hasTarget(ProcessInstanceMigrationValidationCmd cmd) { return cmd != null; }","tryCatchPattern":"try {\n    validationCmd.execute(commandContext);\n} catch (FlowableException e) {\n    if (e.getMessage().contains(\"Cannot validate process migration\")) {\n        throw new IllegalStateException(\"No validation selector set\", e);\n    }\n    throw e;\n}","preventionTips":["Always validate via the builder: ...migrateToProcessDefinition(...).validateMigration(...)","Check that key-based targeting includes a version >= 0","Add a smoke test that validates a sample migration end-to-end"],"tags":["flowable","process-migration","missing-target","validation"],"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"}