diff --git a/CHANGELOG.md b/CHANGELOG.md index b7240a3d..e4b44b89 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,12 @@ All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](http://semver.org/). The format is based on [Keep a Changelog](http://keepachangelog.com/). +## Version 1.9.2 + +### Fixed +- Fix `NoSuchElementException` in `revertLinksForComposition` by safely unwrapping `Optional` when looking up draft and active entities in the CDS model +- Skip credential fetch and SDM revert call when no draft links are found, avoiding unnecessary processing + ## Version 1.9.1 ### Fixed diff --git a/pom.xml b/pom.xml index 98b34253..250ac7fe 100644 --- a/pom.xml +++ b/pom.xml @@ -23,7 +23,7 @@ - 1.9.1 + 1.9.2 17 ${java.version} ${java.version} diff --git a/sdm/src/main/java/com/sap/cds/sdm/service/handler/SDMServiceGenericHandler.java b/sdm/src/main/java/com/sap/cds/sdm/service/handler/SDMServiceGenericHandler.java index 07fde0a2..222ec44d 100644 --- a/sdm/src/main/java/com/sap/cds/sdm/service/handler/SDMServiceGenericHandler.java +++ b/sdm/src/main/java/com/sap/cds/sdm/service/handler/SDMServiceGenericHandler.java @@ -275,9 +275,15 @@ private void revertLinksForComposition( CdsModel model = context.getModel(); String draftEntityName = attachmentCompositionDefinition + "_drafts"; - CdsEntity draftEntity = model.findEntity(draftEntityName).get(); - CdsEntity activeEntity = model.findEntity(attachmentCompositionDefinition).get(); - + Optional draftEntityOpt = model.findEntity(draftEntityName); + Optional activeEntityOpt = model.findEntity(attachmentCompositionDefinition); + if (!draftEntityOpt.isPresent() || !activeEntityOpt.isPresent()) { + logger.debug( + "Entity not found in model, skipping revert for: {}", attachmentCompositionDefinition); + return; + } + CdsEntity draftEntity = draftEntityOpt.get(); + CdsEntity activeEntity = activeEntityOpt.get(); final String upIdKey = SDMUtils.getUpIdKey(draftEntity); if (upIdKey == null || upIdKey.isEmpty()) { logger.debug("No upIdKey found, skipping revert for: {}", attachmentCompositionDefinition); @@ -297,6 +303,9 @@ private void revertLinksForComposition( Result draftLinks = persistenceService.run(selectDraftLinks); logger.debug("Found {} draft links to process", draftLinks.rowCount()); + if (draftLinks.rowCount() == 0) { + return; + } SDMCredentials sdmCredentials = tokenHandler.getSDMCredentials(); Boolean isSystemUser = context.getUserInfo().isSystemUser(); diff --git a/sdm/src/test/java/unit/com/sap/cds/sdm/service/handler/SDMServiceGenericHandlerTest.java b/sdm/src/test/java/unit/com/sap/cds/sdm/service/handler/SDMServiceGenericHandlerTest.java index f3fe2a98..b09ca600 100644 --- a/sdm/src/test/java/unit/com/sap/cds/sdm/service/handler/SDMServiceGenericHandlerTest.java +++ b/sdm/src/test/java/unit/com/sap/cds/sdm/service/handler/SDMServiceGenericHandlerTest.java @@ -2149,8 +2149,8 @@ void testRevertLinksForComposition() throws Exception { Result draftLinksResult = mock(Result.class); Row draftLinkRow = mock(Row.class); + when(draftLinksResult.rowCount()).thenReturn(1L); when(draftLinksResult.iterator()).thenReturn(Arrays.asList(draftLinkRow).iterator()); - when(persistenceService.run(any(CqnSelect.class))).thenReturn(draftLinksResult); when(draftLinkRow.get("ID")).thenReturn("attachment123"); when(draftLinkRow.get("linkUrl")).thenReturn("http://draft-url.com"); @@ -2244,8 +2244,8 @@ void testRevertLinksForComposition_NoLinksToRevert() throws Exception { }); verify(persistenceService, times(1)).run(any(CqnSelect.class)); - verify(tokenHandler, times(1)).getSDMCredentials(); - verify(context, times(1)).getUserInfo(); + verify(tokenHandler, never()).getSDMCredentials(); + verify(context, never()).getUserInfo(); } @Test @@ -2266,6 +2266,7 @@ void testRevertLinksForComposition_SameUrls() throws Exception { Result draftLinksResult = mock(Result.class); Row draftLinkRow = mock(Row.class); + when(draftLinksResult.rowCount()).thenReturn(1L); when(draftLinksResult.iterator()).thenReturn(Arrays.asList(draftLinkRow).iterator()); when(draftLinkRow.get("ID")).thenReturn("attachment123");