flowable/flowable-engine · error · FlowableObjectNotFoundException

Could not find a group with id ''.

Error message

Could not find a group with id ''.

What it means

BaseGroupResource.getGroupFromRequest resolves a group by id using identityService.createGroupQuery().groupId(groupId). If no group exists with that id, it throws FlowableObjectNotFoundException. All group REST endpoints (GET/PUT/DELETE /identity/groups/{groupId}) funnel through this helper.

Solutions

  1. Verify the group id: SELECT * FROM ACT_ID_GROUP WHERE ID_ = '<id>' or GET /identity/groups and inspect the id values.
  2. Check id casing/exactness — group ids are compared literally by the query.
  3. If using LDAP or an external identity service, confirm group synchronization into Flowable's identity tables is configured and has run.
  4. Handle 404 in the client and refresh group lists instead of retrying with the same id.

Example fix

// before
client.delete("/identity/groups/sales-teams");
// after: confirm id first
groupService.list().stream()
    .filter(g -> "sales-team".equals(g.getId()))
    .findFirst()
    .ifPresent(g -> client.delete("/identity/groups/" + g.getId()));
Defensive patterns

Strategy: try-catch

Validate before calling

boolean exists = client.list("/identity/groups").stream().anyMatch(g -> groupId.equals(g.getId()));

Try / catch

try {
    client.delete("/identity/groups/" + groupId);
} catch (HttpClientErrorException e) {
    if (e.getStatusCode() == HttpStatus.NOT_FOUND) {
        log.warn("Group {} already gone", groupId);
    } else throw e;
}

Prevention

When it happens

Trigger: GET, PUT or DELETE /identity/groups/{groupId} where groupId does not match any row in ACT_ID_GROUP.

Common situations: Group deleted by another admin before the call; id is case-sensitive and was sent with wrong casing; group lives in a different identity database (LDAP/AD-backed setup where groups are not in Flowable's tables); stale id cached in the client application.

Understand the failure class

Background: "Not found" and "does not exist" errors: why "Task not found", "No such folder", and "Can't find" fire when a lookup comes back empty — this error's family across 14 libraries.

Related errors


AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11). Data as JSON: /api/errors/a831dc9d1873a302. Report an issue: GitHub.

Appendix: source

Thrown at modules/flowable-rest/src/main/java/org/flowable/rest/service/api/identity/BaseGroupResource.java:42

/**
 * @author Frederik Heremans
 */
public class BaseGroupResource {

    @Autowired
    protected RestResponseFactory restResponseFactory;

    @Autowired
    protected IdentityService identityService;
    
    @Autowired(required=false)
    protected BpmnRestApiInterceptor restApiInterceptor;

    protected Group getGroupFromRequest(String groupId) {
        Group group = identityService.createGroupQuery().groupId(groupId).singleResult();

        if (group == null) {
            throw new FlowableObjectNotFoundException("Could not find a group with id '" + groupId + "'.", User.class);
        }
        
        if (restApiInterceptor != null) {
            restApiInterceptor.accessGroupInfoById(group);
        }
        
        return group;
    }
}

View on GitHub (pinned to d6d39ce1c6)