From 8fe2e77449728ff7e672360d16deb1eecdb91288 Mon Sep 17 00:00:00 2001 From: PujaDeshmukh17 Date: Wed, 22 Jul 2026 14:17:30 +0530 Subject: [PATCH 1/4] check for no such element --- .../service/handler/SDMServiceGenericHandler.java | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) 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(); From 4b5e4d23e06b69842366b6d4146f8f58e1958644 Mon Sep 17 00:00:00 2001 From: PujaDeshmukh17 Date: Wed, 22 Jul 2026 14:34:42 +0530 Subject: [PATCH 2/4] UT --- .../sdm/service/handler/SDMServiceGenericHandlerTest.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) 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"); From ebf78e3863a41d58c1908b77584e5c061ce9f5f6 Mon Sep 17 00:00:00 2001 From: PujaDeshmukh17 Date: Wed, 22 Jul 2026 14:40:49 +0530 Subject: [PATCH 3/4] sdm version change --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 98b34253..cdd7d80f 100644 --- a/pom.xml +++ b/pom.xml @@ -23,7 +23,7 @@ - 1.9.1 + 1.0.0-RC1 17 ${java.version} ${java.version} From b11fddbb031f42ae3dda4e1042738898034e776f Mon Sep 17 00:00:00 2001 From: PujaDeshmukh17 Date: Thu, 23 Jul 2026 10:16:11 +0530 Subject: [PATCH 4/4] Adding changelog & pom version --- CHANGELOG.md | 6 ++++++ pom.xml | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) 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 cdd7d80f..250ac7fe 100644 --- a/pom.xml +++ b/pom.xml @@ -23,7 +23,7 @@ - 1.0.0-RC1 + 1.9.2 17 ${java.version} ${java.version}