flowable/flowable-engine · error · FlowableIllegalArgumentException
type is required when adding a new app identity link
Error message
type is required when adding a new app identity link
What it means
Guard in DeleteIdentityLinkCmd.validateParams: the link type (e.g. assignee, candidate, owner) is null. Without a type the engine cannot tell which kind of identity link to remove, so the request is rejected up front.
Solutions
- Send one of the recognised identity-link types (assignee, candidate, owner, starter, ...) in the request
- Default to a sensible type in the calling layer when the client omits it
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at modules/flowable-app-engine/src/main/java/org/flowable/app/engine/impl/cmd/DeleteIdentityLinkCmd.java:53 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11).
Data as JSON: /api/errors/08822a5cf004b995.
Report an issue: GitHub.
Appendix: source
Thrown at modules/flowable-app-engine/src/main/java/org/flowable/app/engine/impl/cmd/DeleteIdentityLinkCmd.java:53
protected String type;
public DeleteIdentityLinkCmd(String appDefinitionId, String userId, String groupId, String type) {
super(appDefinitionId);
validateParams(userId, groupId, type, appDefinitionId);
this.appDefinitionId = appDefinitionId;
this.userId = userId;
this.groupId = groupId;
this.type = type;
}
protected void validateParams(String userId, String groupId, String type, String taskId) {
if (appDefinitionId == null) {
throw new FlowableIllegalArgumentException("appDefinitionId is null");
}
if (type == null) {
throw new FlowableIllegalArgumentException("type is required when adding a new app identity link");
}
if (userId == null && groupId == null) {
throw new FlowableIllegalArgumentException("userId and groupId cannot both be null");
}
}
@Override
protected Void execute(CommandContext commandContext, AppDefinition appDefinition) {
CommandContextUtil.getIdentityLinkService().deleteScopeIdentityLink(appDefinitionId, ScopeTypes.APP, userId, groupId, type);
return null;
}
}
View on GitHub (pinned to d6d39ce1c6)