{"record":{"id":"75ec5d66f8f1324a","repo":"Activiti/Activiti","slug":"processdefinitionkey-and-processdefinitionid-are-n","errorCode":null,"errorMessage":"processDefinitionKey and processDefinitionId are null","messagePattern":"processDefinitionKey and processDefinitionId are null","errorType":"validation","errorClass":"ActivitiIllegalArgumentException","httpStatus":null,"severity":"error","filePath":"activiti-core/activiti-engine/src/main/java/org/activiti/engine/impl/util/ProcessDefinitionRetriever.java","lineNumber":36,"sourceCode":"import org.activiti.engine.ActivitiIllegalArgumentException;\nimport org.activiti.engine.ActivitiObjectNotFoundException;\nimport org.activiti.engine.ProcessEngineConfiguration;\nimport org.activiti.engine.impl.persistence.deploy.DeploymentManager;\nimport org.activiti.engine.repository.ProcessDefinition;\n\npublic class ProcessDefinitionRetriever {\n\n    private String tenantId;\n    private DeploymentManager deploymentCache;\n\n    public ProcessDefinitionRetriever(String tenantId, DeploymentManager deploymentCache) {\n        this.tenantId = tenantId;\n        this.deploymentCache = deploymentCache;\n    }\n\n    public ProcessDefinition getProcessDefinition(String processDefinitionId, String processDefinitionKey) {\n        if (processDefinitionId == null && processDefinitionKey == null) {\n            throw new ActivitiIllegalArgumentException(\"processDefinitionKey and processDefinitionId are null\");\n        }\n\n        ProcessDefinition processDefinition = this.getProcessDefinitionByProcessDefinitionId(\n            processDefinitionId,\n            deploymentCache\n        );\n        if (processDefinition == null) {\n            processDefinition = (processDefinitionKey != null && hasNoTenant(tenantId))\n                ? this.getProcessDefinitionByProcessDefinitionKey(processDefinitionKey, deploymentCache)\n                : this.getProcessDefinitionByProcessDefinitionKeyAndTenantId(\n                    processDefinitionKey,\n                    tenantId,\n                    deploymentCache\n                );\n            if (processDefinition == null) {\n                throw new ActivitiObjectNotFoundException(\n                    \"No process definition found for key '\" +\n                    processDefinitionKey +","sourceCodeStart":18,"sourceCodeEnd":54,"githubUrl":"https://github.com/Activiti/Activiti/blob/56435b1a97deeafdc09dd40074b056c89fba5a8a/activiti-core/activiti-engine/src/main/java/org/activiti/engine/impl/util/ProcessDefinitionRetriever.java#L18-L54","documentation":"ProcessDefinitionRetriever.getProcessDefinition requires either a process definition id or key to look up a definition in the deployment cache. If both arguments are null it throws this ActivitiIllegalArgumentException because neither lookup path is possible.","triggerScenarios":"Calling getProcessDefinition(null, null), typically when upstream code resolved neither id nor key from a request or message.","commonSituations":"Missing processDefinitionId/Key in runtime data or API payloads; deserialization leaving fields null; config not supplying a default definition key.","solutions":["Ensure at least one of processDefinitionId or processDefinitionKey is set before calling.","Validate inputs upstream and return a clear client-side error when both are absent.","Provide a configured default processDefinitionKey when requests omit the definition reference."],"exampleFix":"// before\nProcessDefinition pd = retriever.getProcessDefinition(null, null);\n// after\nif (processDefinitionId == null && processDefinitionKey == null) {\n    throw new IllegalArgumentException(\"Provide processDefinitionId or processDefinitionKey\");\n}\nProcessDefinition pd = retriever.getProcessDefinition(processDefinitionId, processDefinitionKey);","handlingStrategy":"validation","validationCode":"if (processDefinitionId == null && processDefinitionKey == null) {\n    throw new IllegalArgumentException(\"Either processDefinitionId or processDefinitionKey must be provided\");\n}","typeGuard":null,"tryCatchPattern":"try {\n    return retriever.getProcessDefinition(processDefinitionId, processDefinitionKey);\n} catch (ActivitiIllegalArgumentException e) {\n    if (e.getMessage().contains(\"processDefinitionKey and processDefinitionId are null\")) {\n        // surface a client-facing 'missing process definition reference' error\n    }\n    throw e;\n}","preventionTips":["Make processDefinitionId/Key required fields in your request DTOs","Supply a configured default key when callers omit the reference","Validate inputs at the API boundary before reaching engine internals"],"tags":["java","argument-validation","process-definition","null-argument"],"backgroundTag":"null-argument","analyzedSha":"56435b1a97deeafdc09dd40074b056c89fba5a8a","analyzedAt":"2026-09-09T21:00:06.703Z","contentChangedAt":"2026-09-09T21:00:06.703Z","schemaVersion":2},"datasetVersion":"2026-09-17T15:17:12.973Z"}