{"record":{"id":"7e9c90d3b52b72a4","repo":"flowable/flowable-engine","slug":"deploymentid-is-null-7e9c90","errorCode":null,"errorMessage":"deploymentId is null","messagePattern":"deploymentId is null","errorType":"validation","errorClass":"FlowableIllegalArgumentException","httpStatus":null,"severity":"error","filePath":"modules/flowable-engine/src/main/java/org/flowable/engine/impl/cmd/ChangeDeploymentTenantIdCmd.java","lineNumber":83,"sourceCode":"                break;\n            case BY_DATE:\n                deploymentMergeStrategy = new MergeByDateDeploymentMergeStrategy();\n                break;\n            default:\n                throw new FlowableException(\"Merge mode '\" + mergeMode + \"' not found.\");\n        }\n    }\n\n    public ChangeDeploymentTenantIdCmd(String deploymentId, String newTenantId, DeploymentMergeStrategy deploymentMergeStrategy) {\n        this.deploymentId = deploymentId;\n        this.newTenantId = newTenantId;\n        this.deploymentMergeStrategy = deploymentMergeStrategy;\n    }\n\n    @Override\n    public Void execute(CommandContext commandContext) {\n        if (deploymentId == null) {\n            throw new FlowableIllegalArgumentException(\"deploymentId is null\");\n        }\n\n        // Update all entities\n        ProcessEngineConfigurationImpl processEngineConfiguration = CommandContextUtil.getProcessEngineConfiguration(commandContext);\n        DeploymentEntity deployment = processEngineConfiguration.getDeploymentEntityManager().findById(deploymentId);\n        if (deployment == null) {\n            throw new FlowableObjectNotFoundException(\"Could not find deployment with id \" + deploymentId, Deployment.class);\n        }\n\n        if (Flowable5Util.isFlowable5Deployment(deployment, commandContext)) {\n            processEngineConfiguration.getFlowable5CompatibilityHandler().changeDeploymentTenantId(deploymentId, newTenantId);\n            return null;\n        }\n\n        deploymentMergeStrategy.prepareMerge(commandContext, deploymentId, newTenantId);\n        String oldTenantId = deployment.getTenantId();\n        deployment.setTenantId(newTenantId);\n","sourceCodeStart":65,"sourceCodeEnd":101,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable-engine/src/main/java/org/flowable/engine/impl/cmd/ChangeDeploymentTenantIdCmd.java#L65-L101","documentation":"Null-argument guard in ChangeDeploymentTenantIdCmd.execute: the command that moves a deployment to a new tenant id was invoked with a null deploymentId, so it aborts before looking up the deployment.","triggerScenarios":"Executing the command with deploymentId == null, e.g. calling repositoryService.changeDeploymentTenantId(null, newTenantId) or constructing the cmd with a null id.","commonSituations":"Deployment id sourced from a variable/config that was null; calling the API inside generic code that forwards an optional id without a null check.","solutions":["Pass a non-null deploymentId to changeDeploymentTenantId().","Null-check the id before invoking the API and fail fast with a meaningful message.","Verify where the id originates (request parameter, config) and why it is null."],"exampleFix":"// before\nrepositoryService.changeDeploymentTenantId(deploymentId, tenantId); // deploymentId == null\n// after\nif (deploymentId != null) {\n    repositoryService.changeDeploymentTenantId(deploymentId, tenantId);\n}","handlingStrategy":"validation","validationCode":"if (deploymentId == null || deploymentId.trim().isEmpty()) {\n    throw new IllegalArgumentException(\"deploymentId must be provided\");\n}","typeGuard":null,"tryCatchPattern":"try {\n    repositoryService.changeDeploymentTenantId(deploymentId, tenantId);\n} catch (FlowableIllegalArgumentException e) {\n    // handle missing deploymentId\n}","preventionTips":["Null-check ids extracted from requests/config before calling engine APIs.","Make deploymentId a required parameter in service-layer methods."],"tags":["flowable","deployment","null","validation"],"backgroundTag":"null-argument","analyzedSha":"d6d39ce1c69ff244f2d9dc6af756a9b95e865586","analyzedAt":"2026-09-11T06:41:19.413Z","contentChangedAt":"2026-09-11T06:41:19.413Z","schemaVersion":2},"datasetVersion":"2026-09-18T16:30:33.424Z"}