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

  1. Send one of the recognised identity-link types (assignee, candidate, owner, starter, ...) in the request
  2. 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)