flowable/flowable-engine · error · FlowableIllegalArgumentException
version is null
Error message
version is null
What it means
ModelQueryImpl.modelVersion filters models by an exact version number. Besides rejecting null with FlowableIllegalArgumentException, it also rejects versions <= 0 with 'version must be positive', since model versions start at 1. This validates that the filter is a meaningful positive integer.
Source
Thrown at modules/flowable-engine/src/main/java/org/flowable/engine/impl/ModelQueryImpl.java:123
throw new FlowableIllegalArgumentException("nameLike is null");
}
this.nameLike = nameLike;
return this;
}
@Override
public ModelQuery modelKey(String key) {
if (key == null) {
throw new FlowableIllegalArgumentException("key is null");
}
this.key = key;
return this;
}
@Override
public ModelQueryImpl modelVersion(Integer version) {
if (version == null) {
throw new FlowableIllegalArgumentException("version is null");
} else if (version <= 0) {
throw new FlowableIllegalArgumentException("version must be positive");
}
this.version = version;
return this;
}
@Override
public ModelQuery latestVersion() {
this.latest = true;
return this;
}
@Override
public ModelQuery deploymentId(String deploymentId) {
if (deploymentId == null) {
throw new FlowableIllegalArgumentException("DeploymentId is null");
}View on GitHub (pinned to d6d39ce1c6)
Solutions
- Pass a positive, non-null Integer (versions start at 1); to get the latest use latestVersion() instead of modelVersion
- Null-check and range-check the value before calling
- Ensure version parsing throws/handles failures instead of defaulting to 0
- Validate the incoming request field as a positive integer with a clear client-side message
Example fix
// before
ModelQuery q = repositoryService.createModelQuery()
.modelVersion(parseVersion(request.getVersion())); // may be null or 0
// after
Integer version = parseVersion(request.getVersion());
if (version == null || version <= 0) {
throw new BadRequestException("version must be a positive integer");
}
ModelQuery q = repositoryService.createModelQuery().modelVersion(version); Defensive patterns
Strategy: validation
Validate before calling
if (version != null && version > 0) { query = query.modelVersion(version); } Type guard
boolean isValidVersion(Integer v) { return v != null && v > 0; } Try / catch
try {
List<Model> models = query.modelVersion(version).list();
} catch (FlowableIllegalArgumentException e) {
log.warn("Bad version filter: {}", e.getMessage());
} Prevention
- Check both null and positivity before applying a version filter
- Parse version input with explicit error handling; never default failed parses to 0
- Use latestVersion() when the intent is the newest version rather than a guessed number
When it happens
Trigger: Calling repositoryService.createModelQuery().modelVersion(version) with a null Integer, or with a version parsed as 0/negative from user input or a failed parseInt default.
Common situations: UIs selecting a specific model version where the selection defaulted to null; parsing version strings where NumberFormatException is swallowed and a 0 is used; pagination code producing off-by-zero version values.
Related errors
- appsDefinitionIds is null
- category is null
- query is null
- parentScopeIds is null or empty
- Business status is null
AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11).
Data as JSON: /api/errors/5dd5a607d594926e.
Report an issue: GitHub.