flowable/flowable-engine · warning · FlowableIllegalArgumentException
id is null
Error message
id is null
What it means
DecisionQueryImpl.deploymentId validates its argument but the error message says "id is null" — a misleading message, since the parameter is the deployment ID. Passing null throws FlowableIllegalArgumentException at query construction.
Source
Thrown at modules/flowable-dmn-engine/src/main/java/org/flowable/dmn/engine/impl/DecisionQueryImpl.java:133
throw new FlowableIllegalArgumentException("name is null");
}
this.name = name;
return this;
}
@Override
public DecisionQueryImpl decisionNameLike(String nameLike) {
if (nameLike == null) {
throw new FlowableIllegalArgumentException("nameLike is null");
}
this.nameLike = nameLike;
return this;
}
@Override
public DecisionQueryImpl deploymentId(String deploymentId) {
if (deploymentId == null) {
throw new FlowableIllegalArgumentException("id is null");
}
this.deploymentId = deploymentId;
return this;
}
@Override
public DecisionQueryImpl deploymentIds(Set<String> deploymentIds) {
if (deploymentIds == null) {
throw new FlowableIllegalArgumentException("ids are null");
}
this.deploymentIds = deploymentIds;
return this;
}
@Override
public DecisionQueryImpl parentDeploymentId(String parentDeploymentId) {
if (parentDeploymentId == null) {
throw new FlowableIllegalArgumentException("parentDeploymentId is null");View on GitHub (pinned to d6d39ce1c6)
Solutions
- Ensure the deployment ID is resolved before querying (check the prior repositoryService lookup for null).
- Guard the call: only filter by deploymentId when non-null.
- Note the error message says "id is null" — do not misread it as a decision-id problem; the deploymentId argument is the culprit.
Example fix
// before
String deploymentId = deployment.getId(); // null when lookup failed
query.deploymentId(deploymentId);
// after
if (deployment != null && deployment.getId() != null) {
query.deploymentId(deployment.getId());
} Defensive patterns
Strategy: validation
Validate before calling
if (deploymentId != null && !deploymentId.isBlank()) { query.deploymentId(deploymentId); } Type guard
boolean hasDeploymentId = (deploymentId != null && !deploymentId.isEmpty());
Try / catch
try {
query.deploymentId(deploymentId);
} catch (FlowableIllegalArgumentException e) {
throw new IllegalStateException("deploymentId was null; check upstream deployment lookup", e);
} Prevention
- Remember the message "id is null" actually refers to the deploymentId argument
- Resolve and assert deployment IDs before querying
- Fail early in your own service if a deployment lookup returns null
When it happens
Trigger: Calling decisionRepositoryService.createDecisionQuery().deploymentId(null), often because the deployment ID variable was never populated from a prior lookup.
Common situations: Deployment ID obtained from a failed/missed repository lookup returning null; request path variable absent.
Related errors
AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11).
Data as JSON: /api/errors/3ed94048e40fc3f2.
Report an issue: GitHub.