From 267ff2e03f37c6217b95cd55b022736b209ea4aa Mon Sep 17 00:00:00 2001 From: renczesstefan Date: Fri, 6 Mar 2026 11:33:57 +0100 Subject: [PATCH 1/2] [NAE-2389] Actor ref resolution does not includes realmId Moved the logic for validating actor existence into a dedicated `actorExists` method to improve code readability and reduce duplication. This change was applied to both `WorkflowService` and `TaskService` for consistency. --- .../engine/workflow/service/TaskService.java | 26 +++++++++------- .../workflow/service/WorkflowService.java | 31 ++++++++++--------- 2 files changed, 30 insertions(+), 27 deletions(-) diff --git a/application-engine/src/main/java/com/netgrif/application/engine/workflow/service/TaskService.java b/application-engine/src/main/java/com/netgrif/application/engine/workflow/service/TaskService.java index e0cb97dc73..94b85fe9c9 100644 --- a/application-engine/src/main/java/com/netgrif/application/engine/workflow/service/TaskService.java +++ b/application-engine/src/main/java/com/netgrif/application/engine/workflow/service/TaskService.java @@ -859,22 +859,24 @@ private List getExistingActors(ActorListFieldValue actorListFieldValue) return null; } return actorListFieldValue.getActorValues().stream() + .filter(this::actorExists) .map(ActorFieldValue::getId) - .filter(actorId -> { - AbstractUser user = userService.findById(actorId, null); - if (user != null) { - return true; - } - try { - groupService.findById(actorId); - return true; - } catch (IllegalArgumentException ignored) { - return false; - } - }) .collect(Collectors.toList()); } + private boolean actorExists(ActorFieldValue actorFieldValue) { + AbstractUser user = userService.findById(actorFieldValue.getId(), actorFieldValue.getRealmId()); + if (user != null) { + return true; + } + try { + groupService.findById(actorFieldValue.getId()); + return true; + } catch (IllegalArgumentException ignored) { + return false; + } + } + private Task createFromTransition(Transition transition, Case useCase) { final Task task = com.netgrif.application.engine.adapter.spring.workflow.domain.Task.with() .title(transition.getTitle()) diff --git a/application-engine/src/main/java/com/netgrif/application/engine/workflow/service/WorkflowService.java b/application-engine/src/main/java/com/netgrif/application/engine/workflow/service/WorkflowService.java index 938f38bcc7..036dee2b29 100644 --- a/application-engine/src/main/java/com/netgrif/application/engine/workflow/service/WorkflowService.java +++ b/application-engine/src/main/java/com/netgrif/application/engine/workflow/service/WorkflowService.java @@ -255,10 +255,9 @@ public Case resolveActorRef(Case useCase, boolean canSaveUseCase) { /** * Resolves actor permissions for the useCase based on the actor list data field. * - * @param useCase useCase where to resolve actor permissions + * @param useCase useCase where to resolve actor permissions * @param actorFieldId field id of the actor list - * @param permission permission associated with the useCase and actor list - * + * @param permission permission associated with the useCase and actor list * @return true if the useCase was modified, false otherwise */ private boolean resolveActorRefPermissions(Case useCase, String actorFieldId, Map permission) { @@ -278,22 +277,24 @@ private List getExistingActors(ActorListFieldValue actorListFieldValue) return null; } return actorListFieldValue.getActorValues().stream() + .filter(this::actorExists) .map(ActorFieldValue::getId) - .filter(actorId -> { - AbstractUser user = userService.findById(actorId, null); - if (user != null) { - return true; - } - try { - groupService.findById(actorId); - return true; - } catch (IllegalArgumentException ignored) { - return false; - } - }) .collect(Collectors.toList()); } + private boolean actorExists(ActorFieldValue actorFieldValue) { + AbstractUser user = userService.findById(actorFieldValue.getId(), actorFieldValue.getRealmId()); + if (user != null) { + return true; + } + try { + groupService.findById(actorFieldValue.getId()); + return true; + } catch (IllegalArgumentException ignored) { + return false; + } + } + public CreateCaseEventOutcome createCase(CreateCaseParams createCaseParams) { fillAndValidateAttributes(createCaseParams); PetriNet petriNet = createCaseParams.getProcess(); From c68380bd0c370230d7a13934a9b50aff7879b63c Mon Sep 17 00:00:00 2001 From: renczesstefan Date: Fri, 6 Mar 2026 12:41:06 +0100 Subject: [PATCH 2/2] Handle null checks for actorFieldValue in actorExists method Added null checks for actorFieldValue and its ID in actorExists methods of WorkflowService and TaskService. This prevents potential NullPointerExceptions and ensures robustness in cases where invalid or null input is provided. --- .../application/engine/workflow/service/TaskService.java | 3 +++ .../application/engine/workflow/service/WorkflowService.java | 3 +++ 2 files changed, 6 insertions(+) diff --git a/application-engine/src/main/java/com/netgrif/application/engine/workflow/service/TaskService.java b/application-engine/src/main/java/com/netgrif/application/engine/workflow/service/TaskService.java index 94b85fe9c9..c4e94044c5 100644 --- a/application-engine/src/main/java/com/netgrif/application/engine/workflow/service/TaskService.java +++ b/application-engine/src/main/java/com/netgrif/application/engine/workflow/service/TaskService.java @@ -865,6 +865,9 @@ private List getExistingActors(ActorListFieldValue actorListFieldValue) } private boolean actorExists(ActorFieldValue actorFieldValue) { + if (actorFieldValue == null || actorFieldValue.getId() == null) { + return false; + } AbstractUser user = userService.findById(actorFieldValue.getId(), actorFieldValue.getRealmId()); if (user != null) { return true; diff --git a/application-engine/src/main/java/com/netgrif/application/engine/workflow/service/WorkflowService.java b/application-engine/src/main/java/com/netgrif/application/engine/workflow/service/WorkflowService.java index 036dee2b29..feebf1247a 100644 --- a/application-engine/src/main/java/com/netgrif/application/engine/workflow/service/WorkflowService.java +++ b/application-engine/src/main/java/com/netgrif/application/engine/workflow/service/WorkflowService.java @@ -283,6 +283,9 @@ private List getExistingActors(ActorListFieldValue actorListFieldValue) } private boolean actorExists(ActorFieldValue actorFieldValue) { + if (actorFieldValue == null || actorFieldValue.getId() == null) { + return false; + } AbstractUser user = userService.findById(actorFieldValue.getId(), actorFieldValue.getRealmId()); if (user != null) { return true;