flowable/flowable-engine · error · FlowableIllegalArgumentException
keyLike is null
Error message
keyLike is null
What it means
ChannelDefinitionQueryImpl.channelDefinitionKeyLike() throws FlowableIllegalArgumentException when the keyLike pattern is null. Like-clause filters need a SQL LIKE pattern string; null is rejected eagerly by the builder so a malformed query is never constructed.
Solutions
- Pass a non-null LIKE pattern, e.g. channelDefinitionKeyLike("prefix%")
- Use an empty-guard: default the pattern to a sensible value like "%" only when a wildcard search is truly intended
- Only call channelDefinitionKeyLike when the pattern is non-null; omit the filter otherwise
- For exact matching use channelDefinitionKey(key) instead
Example fix
// before
String pattern = getPatternFromConfig(); // may be null
query.channelDefinitionKeyLike(pattern);
// after
if (pattern != null) {
query.channelDefinitionKeyLike(pattern);
} Defensive patterns
Strategy: validation
Validate before calling
if (keyLike == null) {
throw new IllegalArgumentException("keyLike pattern is required");
}
query.channelDefinitionKeyLike(keyLike); Type guard
boolean hasLikePattern(String pattern) {
return pattern != null && !pattern.isBlank();
} Try / catch
try {
query.channelDefinitionKeyLike(pattern);
} catch (FlowableIllegalArgumentException e) {
logger.warn("Invalid keyLike pattern: {}", e.getMessage());
} Prevention
- Build LIKE patterns with explicit defaults (e.g. prefix + "%")
- Escape user-supplied % and _ characters before passing patterns
- Omit the like filter when no pattern is available
- Use exact channelDefinitionKey when the full key is known
When it happens
Trigger: Calling channelDefinitionQuery().channelDefinitionKeyLike(null), e.g. a pattern variable built from user input or config that is null.
Common situations: Building dynamic searches where the pattern expression (e.g. "myChannel%") was never assigned; passing an optional CLI/config value straight through without a default.
Related errors
- Error retrieving app engine info
- ids are null
- implementation is null
- key is null
- keyLikeIgnoreCase is null
AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11).
Data as JSON: /api/errors/f0f77e7d1d488c01.
Report an issue: GitHub.
Appendix: source
Thrown at modules/flowable-event-registry/src/main/java/org/flowable/eventregistry/impl/ChannelDefinitionQueryImpl.java:182
throw new FlowableIllegalArgumentException("parentDeploymentId is null");
}
this.parentDeploymentId = parentDeploymentId;
return this;
}
@Override
public ChannelDefinitionQueryImpl channelDefinitionKey(String key) {
if (key == null) {
throw new FlowableIllegalArgumentException("key is null");
}
this.key = key;
return this;
}
@Override
public ChannelDefinitionQueryImpl channelDefinitionKeyLike(String keyLike) {
if (keyLike == null) {
throw new FlowableIllegalArgumentException("keyLike is null");
}
this.keyLike = keyLike;
return this;
}
@Override
public ChannelDefinitionQuery channelDefinitionKeyLikeIgnoreCase(String keyLikeIgnoreCase) {
if (keyLikeIgnoreCase == null) {
throw new FlowableIllegalArgumentException("keyLikeIgnoreCase is null");
}
this.keyLikeIgnoreCase = keyLikeIgnoreCase;
return this;
}
@Override
public ChannelDefinitionQueryImpl channelVersion(Integer version) {
checkVersion(version);
this.version = version;View on GitHub (pinned to d6d39ce1c6)