diff --git a/lib/taskana-core/src/main/java/pro/taskana/impl/WorkbasketServiceImpl.java b/lib/taskana-core/src/main/java/pro/taskana/impl/WorkbasketServiceImpl.java index 65ead6fac..543de21cb 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/impl/WorkbasketServiceImpl.java +++ b/lib/taskana-core/src/main/java/pro/taskana/impl/WorkbasketServiceImpl.java @@ -7,6 +7,7 @@ import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Set; +import org.apache.ibatis.exceptions.PersistenceException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -200,16 +201,22 @@ public class WorkbasketServiceImpl implements WorkbasketService { "WorkbasketAccessItem %s refers to a not existing workbasket", workbasketAccessItem)); } - boolean accessIdAlreadyExists = - getWorkbasketAccessItems(workbasketAccessItem.getWorkbasketId()).stream() - .map(WorkbasketAccessItem::getAccessId) - .anyMatch(i -> i.equals(workbasketAccessItem.getAccessId())); - if (accessIdAlreadyExists) { - throw new WorkbasketAccessItemAlreadyExistException(accessItem); + try { + workbasketAccessMapper.insert(accessItem); + LOGGER.debug( + "Method createWorkbasketAccessItem() created workbaskteAccessItem {}", accessItem); + } catch (PersistenceException e) { + List accessItemExistsIdentifier = + Arrays.asList( + "SQLCODE=-803", // DB2 + "uc_accessid_wbid", // POSTGRES + "UC_ACCESSID_WBID_INDEX_E" // H2 + ); + if (accessItemExistsIdentifier.stream().anyMatch(e.getMessage()::contains)) { + throw new WorkbasketAccessItemAlreadyExistException(accessItem); + } + throw e; } - workbasketAccessMapper.insert(accessItem); - LOGGER.debug( - "Method createWorkbasketAccessItem() created workbaskteAccessItem {}", accessItem); return accessItem; } finally { taskanaEngine.returnConnection(); diff --git a/lib/taskana-core/src/test/java/acceptance/workbasket/CreateWorkbasketAccTest.java b/lib/taskana-core/src/test/java/acceptance/workbasket/CreateWorkbasketAccTest.java index c769ba3d0..7e61e6c4e 100644 --- a/lib/taskana-core/src/test/java/acceptance/workbasket/CreateWorkbasketAccTest.java +++ b/lib/taskana-core/src/test/java/acceptance/workbasket/CreateWorkbasketAccTest.java @@ -234,10 +234,7 @@ class CreateWorkbasketAccTest extends AbstractAccTest { userName = "user_1_2", groupNames = {"businessadmin"}) @Test - void testCreateDuplicateWorkbasketAccessListFails() - throws NotAuthorizedException, InvalidArgumentException, WorkbasketNotFoundException, - InvalidWorkbasketException, WorkbasketAlreadyExistException, DomainNotFoundException, - WorkbasketAccessItemAlreadyExistException { + void testCreateDuplicateWorkbasketAccessListFails() throws Exception { WorkbasketService workbasketService = taskanaEngine.getWorkbasketService(); final int before = workbasketService.createWorkbasketQuery().domainIn("DOMAIN_A").list().size();