From 65d4b747586a8cbc5186eaa7d278a258ca35bcc5 Mon Sep 17 00:00:00 2001 From: Alexander Schwartz Date: Fri, 19 Jul 2024 17:12:49 +0200 Subject: [PATCH] Filter out null values when looking up entries by ID This should prevent null elements in the stream when doing concurrent operations. Closes #28865 Signed-off-by: Alexander Schwartz --- .../keycloak/models/jpa/JpaRealmProvider.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/model/jpa/src/main/java/org/keycloak/models/jpa/JpaRealmProvider.java b/model/jpa/src/main/java/org/keycloak/models/jpa/JpaRealmProvider.java index ac33baae6b..cfa7c11cd0 100644 --- a/model/jpa/src/main/java/org/keycloak/models/jpa/JpaRealmProvider.java +++ b/model/jpa/src/main/java/org/keycloak/models/jpa/JpaRealmProvider.java @@ -279,7 +279,7 @@ public class JpaRealmProvider implements RealmProvider, ClientProvider, ClientSc query.setParameter("realm", realm.getId()); Stream roles = query.getResultStream(); - return closing(roles.map(realm::getRoleById)); + return closing(roles.map(realm::getRoleById).filter(Objects::nonNull)); } @Override @@ -332,7 +332,7 @@ public class JpaRealmProvider implements RealmProvider, ClientProvider, ClientSc .setParameter("ids", ids.collect(Collectors.toList())); return closing(paginateQuery(query, first, max).getResultStream()) - .map(g -> session.roles().getRoleById(realm, g)); + .map(g -> session.roles().getRoleById(realm, g)).filter(Objects::nonNull); } @Override @@ -556,7 +556,7 @@ public class JpaRealmProvider implements RealmProvider, ClientProvider, ClientSc .setParameter("ids", idsList); return closing(paginateQuery(query, first, max).getResultStream()) - .map(g -> session.groups().getGroupById(realm, g)); + .map(g -> session.groups().getGroupById(realm, g)).filter(Objects::nonNull); } @Override @@ -576,7 +576,7 @@ public class JpaRealmProvider implements RealmProvider, ClientProvider, ClientSc return closing(paginateQuery(query, first, max).getResultStream()) - .map(g -> session.groups().getGroupById(realm, g)); + .map(g -> session.groups().getGroupById(realm, g)).filter(Objects::nonNull); } @Override @@ -904,7 +904,7 @@ public class JpaRealmProvider implements RealmProvider, ClientProvider, ClientSc TypedQuery query = em.createQuery(queryBuilder); return closing(paginateQuery(query, firstResult, maxResults).getResultStream()) - .map(id -> session.clients().getClientById(realm, id)); + .map(id -> session.clients().getClientById(realm, id)).filter(Objects::nonNull); } @Override @@ -949,7 +949,7 @@ public class JpaRealmProvider implements RealmProvider, ClientProvider, ClientSc TypedQuery query = em.createQuery(queryBuilder); return closing(paginateQuery(query, firstResult, maxResults).getResultStream()) - .map(id -> session.clients().getClientById(realm, id)); + .map(id -> session.clients().getClientById(realm, id)).filter(Objects::nonNull); } @Override @@ -1019,7 +1019,7 @@ public class JpaRealmProvider implements RealmProvider, ClientProvider, ClientSc query.setParameter("realm", realm.getId()); Stream scopes = query.getResultStream(); - return closing(scopes.map(realm::getClientScopeById)); + return closing(scopes.map(realm::getClientScopeById).filter(Objects::nonNull)); } @Override @@ -1159,7 +1159,7 @@ public class JpaRealmProvider implements RealmProvider, ClientProvider, ClientSc .setParameter("search", search); Stream groups = paginateQuery(query, first, max).getResultStream(); - return closing(groups.map(id -> session.groups().getGroupById(realm, id)).sorted(GroupModel.COMPARE_BY_NAME).distinct()); + return closing(groups.map(id -> session.groups().getGroupById(realm, id)).filter(Objects::nonNull).sorted(GroupModel.COMPARE_BY_NAME).distinct()); } @Override