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
- Verify the group id: SELECT * FROM ACT_ID_GROUP WHERE ID_ = '<id>' or GET /identity/groups and inspect the id values.
- Check id casing/exactness — group ids are compared literally by the query.
- If using LDAP or an external identity service, confirm group synchronization into Flowable's identity tables is configured and has run.
- 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
- Fetch ids from GET /identity/groups instead of storing them long-term.
- Respect id casing exactly.
- Verify LDAP/identity sync if groups are managed externally.
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
- Could not find a user with id ''.
- A group with id '' already exists.
- ${aonfe.getMessage()}
- Batch part with id ' ' does not have a batch part document.
- Batch with id ' ' does not have a batch document.
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)