From 6eda84165847bc6f186f9008b840f5c96f010d8a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 15 Jul 2026 08:25:57 +0000 Subject: [PATCH 1/5] Bump the minor-patch group across 1 directory with 12 updates Bumps the minor-patch group with 12 updates in the / directory: | Package | From | To | | --- | --- | --- | | [io.netty:netty-bom](https://github.com/netty/netty) | `4.2.15.Final` | `4.2.16.Final` | | [com.sap.cloud.sdk:sdk-bom](https://github.com/SAP/cloud-sdk-java) | `5.30.0` | `5.32.0` | | [org.junit:junit-bom](https://github.com/junit-team/junit-framework) | `6.1.0` | `6.1.1` | | [org.sonatype.central:central-publishing-maven-plugin](https://github.com/sonatype/central-publishing-maven-plugin) | `0.10.0` | `0.11.0` | | [com.github.spotbugs:spotbugs-maven-plugin](https://github.com/spotbugs/spotbugs-maven-plugin) | `4.9.8.3` | `4.10.2.0` | | [com.diffplug.spotless:spotless-maven-plugin](https://github.com/diffplug/spotless) | `3.6.0` | `3.8.0` | | [com.github.spotbugs:spotbugs-annotations](https://github.com/spotbugs/spotbugs) | `4.10.1` | `4.10.2` | | [ch.qos.logback:logback-classic](https://github.com/qos-ch/logback) | `1.5.34` | `1.5.37` | | software.amazon.awssdk:s3 | `2.46.6` | `2.47.1` | | [software.amazon.awssdk.crt:aws-crt](https://github.com/awslabs/aws-crt-java) | `0.47.0` | `0.47.2` | | [com.azure:azure-storage-blob](https://github.com/Azure/azure-sdk-for-java) | `12.34.0` | `12.35.0` | | [com.google.cloud:google-cloud-storage](https://github.com/googleapis/google-cloud-java) | `2.69.0` | `2.70.0` | Updates `io.netty:netty-bom` from 4.2.15.Final to 4.2.16.Final - [Release notes](https://github.com/netty/netty/releases) - [Commits](https://github.com/netty/netty/compare/netty-4.2.15.Final...netty-4.2.16.Final) Updates `com.sap.cloud.sdk:sdk-bom` from 5.30.0 to 5.32.0 - [Release notes](https://github.com/SAP/cloud-sdk-java/releases) - [Changelog](https://github.com/SAP/cloud-sdk-java/blob/main/release_notes.md) - [Commits](https://github.com/SAP/cloud-sdk-java/compare/rel/5.30.0...rel/5.32.0) Updates `org.junit:junit-bom` from 6.1.0 to 6.1.1 - [Release notes](https://github.com/junit-team/junit-framework/releases) - [Commits](https://github.com/junit-team/junit-framework/compare/r6.1.0...r6.1.1) Updates `org.sonatype.central:central-publishing-maven-plugin` from 0.10.0 to 0.11.0 - [Commits](https://github.com/sonatype/central-publishing-maven-plugin/commits) Updates `com.github.spotbugs:spotbugs-maven-plugin` from 4.9.8.3 to 4.10.2.0 - [Release notes](https://github.com/spotbugs/spotbugs-maven-plugin/releases) - [Commits](https://github.com/spotbugs/spotbugs-maven-plugin/compare/spotbugs-maven-plugin-4.9.8.3...spotbugs-maven-plugin-4.10.2.0) Updates `com.diffplug.spotless:spotless-maven-plugin` from 3.6.0 to 3.8.0 - [Release notes](https://github.com/diffplug/spotless/releases) - [Changelog](https://github.com/diffplug/spotless/blob/main/CHANGES.md) - [Commits](https://github.com/diffplug/spotless/compare/maven/3.6.0...maven/3.8.0) Updates `com.github.spotbugs:spotbugs-annotations` from 4.10.1 to 4.10.2 - [Release notes](https://github.com/spotbugs/spotbugs/releases) - [Changelog](https://github.com/spotbugs/spotbugs/blob/master/CHANGELOG.md) - [Commits](https://github.com/spotbugs/spotbugs/compare/4.10.1...4.10.2) Updates `ch.qos.logback:logback-classic` from 1.5.34 to 1.5.37 - [Release notes](https://github.com/qos-ch/logback/releases) - [Commits](https://github.com/qos-ch/logback/compare/v_1.5.34...v_1.5.37) Updates `software.amazon.awssdk:s3` from 2.46.6 to 2.47.1 Updates `software.amazon.awssdk.crt:aws-crt` from 0.47.0 to 0.47.2 - [Release notes](https://github.com/awslabs/aws-crt-java/releases) - [Commits](https://github.com/awslabs/aws-crt-java/compare/v0.47.0...v0.47.2) Updates `com.azure:azure-storage-blob` from 12.34.0 to 12.35.0 - [Release notes](https://github.com/Azure/azure-sdk-for-java/releases) - [Commits](https://github.com/Azure/azure-sdk-for-java/compare/com.azure+azure-storage-blob_12.34.0...com.azure+azure-storage-blob_12.35.0) Updates `com.google.cloud:google-cloud-storage` from 2.69.0 to 2.70.0 - [Release notes](https://github.com/googleapis/google-cloud-java/releases) - [Changelog](https://github.com/googleapis/google-cloud-java/blob/main/java-document-ai/CHANGELOG.md) - [Commits](https://github.com/googleapis/google-cloud-java/commits) --- updated-dependencies: - dependency-name: io.netty:netty-bom dependency-version: 4.2.16.Final dependency-type: direct:production update-type: version-update:semver-patch dependency-group: minor-patch - dependency-name: com.sap.cloud.sdk:sdk-bom dependency-version: 5.32.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: minor-patch - dependency-name: org.junit:junit-bom dependency-version: 6.1.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: minor-patch - dependency-name: org.sonatype.central:central-publishing-maven-plugin dependency-version: 0.11.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: minor-patch - dependency-name: com.github.spotbugs:spotbugs-maven-plugin dependency-version: 4.10.2.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: minor-patch - dependency-name: com.diffplug.spotless:spotless-maven-plugin dependency-version: 3.8.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: minor-patch - dependency-name: com.github.spotbugs:spotbugs-annotations dependency-version: 4.10.2 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: minor-patch - dependency-name: ch.qos.logback:logback-classic dependency-version: 1.5.37 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: minor-patch - dependency-name: software.amazon.awssdk:s3 dependency-version: 2.47.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: minor-patch - dependency-name: software.amazon.awssdk.crt:aws-crt dependency-version: 0.47.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: minor-patch - dependency-name: com.azure:azure-storage-blob dependency-version: 12.35.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: minor-patch - dependency-name: com.google.cloud:google-cloud-storage dependency-version: 2.70.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: minor-patch ... Signed-off-by: dependabot[bot] --- cds-feature-attachments/pom.xml | 4 ++-- pom.xml | 16 ++++++++-------- .../cds-feature-attachments-oss/pom.xml | 4 ++-- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/cds-feature-attachments/pom.xml b/cds-feature-attachments/pom.xml index 1e70c005..77cb2a61 100644 --- a/cds-feature-attachments/pom.xml +++ b/cds-feature-attachments/pom.xml @@ -78,13 +78,13 @@ com.github.spotbugs spotbugs-annotations - 4.10.1 + 4.10.2 test ch.qos.logback logback-classic - 1.5.34 + 1.5.37 test diff --git a/pom.xml b/pom.xml index b84d0e64..716f4034 100644 --- a/pom.xml +++ b/pom.xml @@ -66,8 +66,8 @@ com/sap/cds/feature/attachments/generated/ - 2.46.6 - 0.47.0 + 2.47.1 + 0.47.2 5.0.0 @@ -89,7 +89,7 @@ io.netty netty-bom - 4.2.15.Final + 4.2.16.Final pom import @@ -97,7 +97,7 @@ com.sap.cloud.sdk sdk-bom - 5.30.0 + 5.32.0 pom import @@ -105,7 +105,7 @@ org.junit junit-bom - 6.1.0 + 6.1.1 pom import @@ -191,7 +191,7 @@ org.sonatype.central central-publishing-maven-plugin - 0.10.0 + 0.11.0 true @@ -243,7 +243,7 @@ com.github.spotbugs spotbugs-maven-plugin - 4.9.8.3 + 4.10.2.0 com.sap.cds @@ -367,7 +367,7 @@ com.diffplug.spotless spotless-maven-plugin - 3.6.0 + 3.8.0 diff --git a/storage-targets/cds-feature-attachments-oss/pom.xml b/storage-targets/cds-feature-attachments-oss/pom.xml index 4ac7eccc..d8b21fb2 100644 --- a/storage-targets/cds-feature-attachments-oss/pom.xml +++ b/storage-targets/cds-feature-attachments-oss/pom.xml @@ -45,13 +45,13 @@ com.azure azure-storage-blob - 12.34.0 + 12.35.0 com.google.cloud google-cloud-storage - 2.69.0 + 2.70.0 From 69f5a1d0ff61668e58851b7bcd1cb56f39aa29b8 Mon Sep 17 00:00:00 2001 From: Marvin Lindner Date: Thu, 16 Jul 2026 13:01:23 +0200 Subject: [PATCH 2/5] fix spotbugs found --- .../CreateAttachmentsHandler.java | 2 +- .../DeleteAttachmentsHandler.java | 2 +- .../ReadAttachmentsHandler.java | 2 +- .../UpdateAttachmentsHandler.java | 2 +- .../modifyevents/CreateAttachmentEvent.java | 2 +- .../MarkAsDeletedAttachmentEvent.java | 2 +- .../ModifyAttachmentEventFactory.java | 2 +- .../modifyevents/UpdateAttachmentEvent.java | 2 +- .../transaction/CreationChangeSetListener.java | 2 +- .../handler/common/AttachmentsReader.java | 2 +- .../DraftActiveAttachmentsHandler.java | 2 +- .../DraftCancelAttachmentsHandler.java | 2 +- .../DraftPatchAttachmentsHandler.java | 2 +- .../handler/DefaultAttachmentsServiceHandler.java | 2 +- .../malware/DefaultAttachmentMalwareScanner.java | 2 +- .../malware/client/DefaultMalwareScanClient.java | 2 +- .../ModifyApplicationHandlerHelperTest.java | 5 +++-- .../readhelper/CountingInputStreamTest.java | 15 +++++++++------ .../TestPluginAttachmentsServiceHandler.java | 2 +- ...OdataRequestValidationWithTestHandlerTest.java | 2 +- ...OdataRequestValidationWithTestHandlerTest.java | 2 +- 21 files changed, 31 insertions(+), 27 deletions(-) diff --git a/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/applicationservice/CreateAttachmentsHandler.java b/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/applicationservice/CreateAttachmentsHandler.java index 77f58f66..94e0aab3 100644 --- a/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/applicationservice/CreateAttachmentsHandler.java +++ b/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/applicationservice/CreateAttachmentsHandler.java @@ -37,7 +37,7 @@ * attachments for entities. It is called before a create event is executed. */ @ServiceName(value = "*", type = ApplicationService.class) -public class CreateAttachmentsHandler implements EventHandler { +public final class CreateAttachmentsHandler implements EventHandler { private static final Logger logger = LoggerFactory.getLogger(CreateAttachmentsHandler.class); diff --git a/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/applicationservice/DeleteAttachmentsHandler.java b/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/applicationservice/DeleteAttachmentsHandler.java index a11f3e6d..8135b8ed 100644 --- a/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/applicationservice/DeleteAttachmentsHandler.java +++ b/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/applicationservice/DeleteAttachmentsHandler.java @@ -27,7 +27,7 @@ * attachments for entities. It is called before a delete event is executed. */ @ServiceName(value = "*", type = ApplicationService.class) -public class DeleteAttachmentsHandler implements EventHandler { +public final class DeleteAttachmentsHandler implements EventHandler { private static final Logger logger = LoggerFactory.getLogger(DeleteAttachmentsHandler.class); diff --git a/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/applicationservice/ReadAttachmentsHandler.java b/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/applicationservice/ReadAttachmentsHandler.java index 253e57d2..cf571c12 100644 --- a/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/applicationservice/ReadAttachmentsHandler.java +++ b/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/applicationservice/ReadAttachmentsHandler.java @@ -58,7 +58,7 @@ * scanned" error. The client must retry the download after the rescan completes. */ @ServiceName(value = "*", type = ApplicationService.class) -public class ReadAttachmentsHandler implements EventHandler { +public final class ReadAttachmentsHandler implements EventHandler { private static final Logger logger = LoggerFactory.getLogger(ReadAttachmentsHandler.class); diff --git a/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/applicationservice/UpdateAttachmentsHandler.java b/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/applicationservice/UpdateAttachmentsHandler.java index 0747b36c..2686936d 100644 --- a/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/applicationservice/UpdateAttachmentsHandler.java +++ b/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/applicationservice/UpdateAttachmentsHandler.java @@ -37,7 +37,7 @@ * update-events or delete-events the handler needs to distinguish between the different cases. */ @ServiceName(value = "*", type = ApplicationService.class) -public class UpdateAttachmentsHandler implements EventHandler { +public final class UpdateAttachmentsHandler implements EventHandler { private static final Logger logger = LoggerFactory.getLogger(UpdateAttachmentsHandler.class); diff --git a/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/applicationservice/modifyevents/CreateAttachmentEvent.java b/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/applicationservice/modifyevents/CreateAttachmentEvent.java index 284ffa12..6d696b1a 100644 --- a/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/applicationservice/modifyevents/CreateAttachmentEvent.java +++ b/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/applicationservice/modifyevents/CreateAttachmentEvent.java @@ -31,7 +31,7 @@ * {@link AttachmentService} to create the attachment and registers the transaction listener to be * able to revert the creation in case of errors. */ -public class CreateAttachmentEvent implements ModifyAttachmentEvent { +public final class CreateAttachmentEvent implements ModifyAttachmentEvent { private static final Logger logger = LoggerFactory.getLogger(CreateAttachmentEvent.class); private static final Pattern RFC5987_FILENAME_PATTERN = diff --git a/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/applicationservice/modifyevents/MarkAsDeletedAttachmentEvent.java b/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/applicationservice/modifyevents/MarkAsDeletedAttachmentEvent.java index c1316ee9..a2625168 100644 --- a/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/applicationservice/modifyevents/MarkAsDeletedAttachmentEvent.java +++ b/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/applicationservice/modifyevents/MarkAsDeletedAttachmentEvent.java @@ -20,7 +20,7 @@ * The class {@link MarkAsDeletedAttachmentEvent} handles the mark of deletion of an attachment. It * calls the {@link AttachmentService} to mark the attachment as deleted. */ -public class MarkAsDeletedAttachmentEvent implements ModifyAttachmentEvent { +public final class MarkAsDeletedAttachmentEvent implements ModifyAttachmentEvent { private static final Logger logger = LoggerFactory.getLogger(MarkAsDeletedAttachmentEvent.class); diff --git a/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/applicationservice/modifyevents/ModifyAttachmentEventFactory.java b/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/applicationservice/modifyevents/ModifyAttachmentEventFactory.java index c74c6726..b8d3fbe3 100644 --- a/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/applicationservice/modifyevents/ModifyAttachmentEventFactory.java +++ b/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/applicationservice/modifyevents/ModifyAttachmentEventFactory.java @@ -25,7 +25,7 @@ *
  • doNothing * */ -public class ModifyAttachmentEventFactory { +public final class ModifyAttachmentEventFactory { private final CreateAttachmentEvent createEvent; private final UpdateAttachmentEvent updateEvent; diff --git a/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/applicationservice/modifyevents/UpdateAttachmentEvent.java b/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/applicationservice/modifyevents/UpdateAttachmentEvent.java index a178be89..cdbd439c 100644 --- a/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/applicationservice/modifyevents/UpdateAttachmentEvent.java +++ b/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/applicationservice/modifyevents/UpdateAttachmentEvent.java @@ -19,7 +19,7 @@ * and create method of the attachment service {@link AttachmentService}. To call these attachment * service events the class calls the delete and create event implementation. */ -public class UpdateAttachmentEvent implements ModifyAttachmentEvent { +public final class UpdateAttachmentEvent implements ModifyAttachmentEvent { private static final Logger logger = LoggerFactory.getLogger(UpdateAttachmentEvent.class); diff --git a/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/applicationservice/transaction/CreationChangeSetListener.java b/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/applicationservice/transaction/CreationChangeSetListener.java index 62fa0b5c..0ee6002c 100644 --- a/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/applicationservice/transaction/CreationChangeSetListener.java +++ b/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/applicationservice/transaction/CreationChangeSetListener.java @@ -18,7 +18,7 @@ * closed for which the listener was registered. It marks the attachment as deleted by calling the * {@link AttachmentService} for the mark as deleted event. */ -public class CreationChangeSetListener implements ChangeSetListener { +public final class CreationChangeSetListener implements ChangeSetListener { private final String contentId; private final CdsRuntime cdsRuntime; diff --git a/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/common/AttachmentsReader.java b/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/common/AttachmentsReader.java index 136d32c7..fcd9c271 100644 --- a/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/common/AttachmentsReader.java +++ b/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/common/AttachmentsReader.java @@ -27,7 +27,7 @@ * *

    The returned data is deep including the path structure to the media entity. */ -public class AttachmentsReader { +public final class AttachmentsReader { private static final Logger logger = LoggerFactory.getLogger(AttachmentsReader.class); diff --git a/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/draftservice/DraftActiveAttachmentsHandler.java b/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/draftservice/DraftActiveAttachmentsHandler.java index 2c7dd699..d4699737 100644 --- a/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/draftservice/DraftActiveAttachmentsHandler.java +++ b/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/draftservice/DraftActiveAttachmentsHandler.java @@ -13,7 +13,7 @@ import com.sap.cds.services.handler.annotations.ServiceName; @ServiceName(value = "*", type = DraftService.class) -public class DraftActiveAttachmentsHandler implements EventHandler { +public final class DraftActiveAttachmentsHandler implements EventHandler { private final ThreadDataStorageSetter threadLocalSetter; diff --git a/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/draftservice/DraftCancelAttachmentsHandler.java b/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/draftservice/DraftCancelAttachmentsHandler.java index 82978dcf..6f0c8597 100644 --- a/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/draftservice/DraftCancelAttachmentsHandler.java +++ b/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/draftservice/DraftCancelAttachmentsHandler.java @@ -36,7 +36,7 @@ * valid and deletes the content of the attachments if necessary. */ @ServiceName(value = "*", type = DraftService.class) -public class DraftCancelAttachmentsHandler implements EventHandler { +public final class DraftCancelAttachmentsHandler implements EventHandler { private static final Logger logger = LoggerFactory.getLogger(DraftCancelAttachmentsHandler.class); diff --git a/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/draftservice/DraftPatchAttachmentsHandler.java b/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/draftservice/DraftPatchAttachmentsHandler.java index 5d66dbc9..57f3f963 100644 --- a/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/draftservice/DraftPatchAttachmentsHandler.java +++ b/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/draftservice/DraftPatchAttachmentsHandler.java @@ -34,7 +34,7 @@ * event factory and corresponding events. */ @ServiceName(value = "*", type = DraftService.class) -public class DraftPatchAttachmentsHandler implements EventHandler { +public final class DraftPatchAttachmentsHandler implements EventHandler { private static final Logger logger = LoggerFactory.getLogger(DraftPatchAttachmentsHandler.class); diff --git a/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/service/handler/DefaultAttachmentsServiceHandler.java b/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/service/handler/DefaultAttachmentsServiceHandler.java index c1421749..19978b9f 100644 --- a/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/service/handler/DefaultAttachmentsServiceHandler.java +++ b/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/service/handler/DefaultAttachmentsServiceHandler.java @@ -30,7 +30,7 @@ * deleted in the database. */ @ServiceName(value = "*", type = AttachmentService.class) -public class DefaultAttachmentsServiceHandler implements EventHandler { +public final class DefaultAttachmentsServiceHandler implements EventHandler { // Positions this handler very late so it runs after all standard and custom handlers private static final int DEFAULT_ON = 10 * HandlerOrder.AFTER + HandlerOrder.LATE; diff --git a/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/service/malware/DefaultAttachmentMalwareScanner.java b/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/service/malware/DefaultAttachmentMalwareScanner.java index 8f22ad57..bd25bede 100644 --- a/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/service/malware/DefaultAttachmentMalwareScanner.java +++ b/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/service/malware/DefaultAttachmentMalwareScanner.java @@ -34,7 +34,7 @@ * to read from the draft entity first and if nothing is found the data are read from the main * entity. */ -public class DefaultAttachmentMalwareScanner implements AttachmentMalwareScanner { +public final class DefaultAttachmentMalwareScanner implements AttachmentMalwareScanner { /** The name or label of the Malware Scan Service binding. */ public static final String MALWARE_SCAN_SERVICE_LABEL = "malware-scanner"; diff --git a/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/service/malware/client/DefaultMalwareScanClient.java b/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/service/malware/client/DefaultMalwareScanClient.java index fb299334..0c0f692e 100644 --- a/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/service/malware/client/DefaultMalwareScanClient.java +++ b/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/service/malware/client/DefaultMalwareScanClient.java @@ -25,7 +25,7 @@ * is scanned by using the Malware Scan Service. The result of the scan is returned with status * {@link MalwareScanResultStatus}. */ -public class DefaultMalwareScanClient implements MalwareScanClient { +public final class DefaultMalwareScanClient implements MalwareScanClient { private static final Logger logger = LoggerFactory.getLogger(DefaultMalwareScanClient.class); diff --git a/cds-feature-attachments/src/test/java/com/sap/cds/feature/attachments/handler/applicationservice/helper/ModifyApplicationHandlerHelperTest.java b/cds-feature-attachments/src/test/java/com/sap/cds/feature/attachments/handler/applicationservice/helper/ModifyApplicationHandlerHelperTest.java index 48901782..3c529434 100644 --- a/cds-feature-attachments/src/test/java/com/sap/cds/feature/attachments/handler/applicationservice/helper/ModifyApplicationHandlerHelperTest.java +++ b/cds-feature-attachments/src/test/java/com/sap/cds/feature/attachments/handler/applicationservice/helper/ModifyApplicationHandlerHelperTest.java @@ -126,8 +126,9 @@ void serviceExceptionDueToLimitExceeded() { if (wrappedContent != null) { // Read all bytes - this will trigger CountingInputStream to throw byte[] buffer = new byte[1024]; - while (wrappedContent.read(buffer) != -1) { - // Keep reading until exception or EOF + int bytesRead; + while ((bytesRead = wrappedContent.read(buffer)) != -1) { + assertThat(bytesRead).isPositive(); // use value to satisfy SpotBugs } } return null; diff --git a/cds-feature-attachments/src/test/java/com/sap/cds/feature/attachments/handler/applicationservice/readhelper/CountingInputStreamTest.java b/cds-feature-attachments/src/test/java/com/sap/cds/feature/attachments/handler/applicationservice/readhelper/CountingInputStreamTest.java index e1245d79..b45deacc 100644 --- a/cds-feature-attachments/src/test/java/com/sap/cds/feature/attachments/handler/applicationservice/readhelper/CountingInputStreamTest.java +++ b/cds-feature-attachments/src/test/java/com/sap/cds/feature/attachments/handler/applicationservice/readhelper/CountingInputStreamTest.java @@ -143,8 +143,9 @@ void read_exceedsLimit_exceptionContainsMaxSizeString() { ServiceException.class, () -> { byte[] buffer = new byte[1024]; - while (cut.read(buffer) != -1) { - // read until exception + int bytesRead; + while ((bytesRead = cut.read(buffer)) != -1) { + assertThat(bytesRead).isPositive(); // use value to satisfy SpotBugs } }); @@ -162,8 +163,9 @@ void read_bulkRead_exceedsLimit_throwsServiceException() { ServiceException.class, () -> { byte[] buffer = new byte[1024]; - while (cut.read(buffer) != -1) { - // read until exception + int bytesRead; + while ((bytesRead = cut.read(buffer)) != -1) { + assertThat(bytesRead).isPositive(); // use value to satisfy SpotBugs } }); @@ -231,8 +233,9 @@ void constructor_parsesKB() throws IOException { assertDoesNotThrow( () -> { byte[] buffer = new byte[1024]; - while (cut.read(buffer) != -1) { - // read all bytes + int bytesRead; + while ((bytesRead = cut.read(buffer)) != -1) { + assertThat(bytesRead).isPositive(); // use value to satisfy SpotBugs } }); } diff --git a/integration-tests/generic/src/main/java/com/sap/cds/feature/attachments/integrationtests/testhandler/TestPluginAttachmentsServiceHandler.java b/integration-tests/generic/src/main/java/com/sap/cds/feature/attachments/integrationtests/testhandler/TestPluginAttachmentsServiceHandler.java index 17e66fbf..41cb9296 100644 --- a/integration-tests/generic/src/main/java/com/sap/cds/feature/attachments/integrationtests/testhandler/TestPluginAttachmentsServiceHandler.java +++ b/integration-tests/generic/src/main/java/com/sap/cds/feature/attachments/integrationtests/testhandler/TestPluginAttachmentsServiceHandler.java @@ -32,7 +32,7 @@ @ServiceName(value = "*", type = AttachmentService.class) @Profile(Profiles.TEST_HANDLER_ENABLED) @Component -public class TestPluginAttachmentsServiceHandler implements EventHandler { +public final class TestPluginAttachmentsServiceHandler implements EventHandler { private static final Marker marker = MarkerFactory.getMarker("DUMMY_HANDLER"); private static final Logger logger = diff --git a/integration-tests/generic/src/test/java/com/sap/cds/feature/attachments/integrationtests/draftservice/DraftOdataRequestValidationWithTestHandlerTest.java b/integration-tests/generic/src/test/java/com/sap/cds/feature/attachments/integrationtests/draftservice/DraftOdataRequestValidationWithTestHandlerTest.java index 3f5a01f5..b8a7f5ba 100644 --- a/integration-tests/generic/src/test/java/com/sap/cds/feature/attachments/integrationtests/draftservice/DraftOdataRequestValidationWithTestHandlerTest.java +++ b/integration-tests/generic/src/test/java/com/sap/cds/feature/attachments/integrationtests/draftservice/DraftOdataRequestValidationWithTestHandlerTest.java @@ -25,7 +25,7 @@ import org.springframework.test.context.ActiveProfiles; @ActiveProfiles(Profiles.TEST_HANDLER_ENABLED) -class DraftOdataRequestValidationWithTestHandlerTest extends DraftOdataRequestValidationBase { +final class DraftOdataRequestValidationWithTestHandlerTest extends DraftOdataRequestValidationBase { private static final Logger logger = LoggerFactory.getLogger(DraftOdataRequestValidationWithTestHandlerTest.class); diff --git a/integration-tests/generic/src/test/java/com/sap/cds/feature/attachments/integrationtests/nondraftservice/OdataRequestValidationWithTestHandlerTest.java b/integration-tests/generic/src/test/java/com/sap/cds/feature/attachments/integrationtests/nondraftservice/OdataRequestValidationWithTestHandlerTest.java index 94fca337..10818beb 100644 --- a/integration-tests/generic/src/test/java/com/sap/cds/feature/attachments/integrationtests/nondraftservice/OdataRequestValidationWithTestHandlerTest.java +++ b/integration-tests/generic/src/test/java/com/sap/cds/feature/attachments/integrationtests/nondraftservice/OdataRequestValidationWithTestHandlerTest.java @@ -23,7 +23,7 @@ import org.springframework.test.context.ActiveProfiles; @ActiveProfiles(Profiles.TEST_HANDLER_ENABLED) -class OdataRequestValidationWithTestHandlerTest extends OdataRequestValidationBase { +final class OdataRequestValidationWithTestHandlerTest extends OdataRequestValidationBase { @Test void serviceHandlerAvailable() { From 5a0d859283a0f5396387fc46e2a2739ec5cb7f92 Mon Sep 17 00:00:00 2001 From: Marvin Lindner Date: Thu, 16 Jul 2026 13:42:27 +0200 Subject: [PATCH 3/5] better approac talked with java core team about it --- .../CreateAttachmentsHandler.java | 12 +++++------- .../DeleteAttachmentsHandler.java | 9 +++------ .../ReadAttachmentsHandler.java | 15 ++++++--------- .../UpdateAttachmentsHandler.java | 16 ++++++---------- .../modifyevents/CreateAttachmentEvent.java | 8 +++----- .../MarkAsDeletedAttachmentEvent.java | 6 ++---- .../ModifyAttachmentEventFactory.java | 12 +++++------- .../modifyevents/UpdateAttachmentEvent.java | 8 +++----- .../transaction/CreationChangeSetListener.java | 11 ++++------- .../handler/common/AttachmentsReader.java | 8 +++----- .../DraftActiveAttachmentsHandler.java | 7 ++----- .../DraftCancelAttachmentsHandler.java | 9 +++------ .../DraftPatchAttachmentsHandler.java | 10 ++++------ .../DefaultAttachmentsServiceHandler.java | 6 ++---- .../malware/DefaultAttachmentMalwareScanner.java | 10 +++------- .../malware/client/DefaultMalwareScanClient.java | 6 ++---- 16 files changed, 56 insertions(+), 97 deletions(-) diff --git a/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/applicationservice/CreateAttachmentsHandler.java b/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/applicationservice/CreateAttachmentsHandler.java index 94e0aab3..c5c2c863 100644 --- a/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/applicationservice/CreateAttachmentsHandler.java +++ b/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/applicationservice/CreateAttachmentsHandler.java @@ -3,8 +3,6 @@ */ package com.sap.cds.feature.attachments.handler.applicationservice; -import static java.util.Objects.requireNonNull; - import com.sap.cds.CdsData; import com.sap.cds.feature.attachments.handler.applicationservice.helper.ExtendedErrorStatuses; import com.sap.cds.feature.attachments.handler.applicationservice.helper.ModifyApplicationHandlerHelper; @@ -37,7 +35,7 @@ * attachments for entities. It is called before a create event is executed. */ @ServiceName(value = "*", type = ApplicationService.class) -public final class CreateAttachmentsHandler implements EventHandler { +public class CreateAttachmentsHandler implements EventHandler { private static final Logger logger = LoggerFactory.getLogger(CreateAttachmentsHandler.class); @@ -51,10 +49,10 @@ public CreateAttachmentsHandler( ThreadDataStorageReader storageReader, String defaultMaxSize, CdsRuntime cdsRuntime) { - this.eventFactory = requireNonNull(eventFactory, "eventFactory must not be null"); - this.storageReader = requireNonNull(storageReader, "storageReader must not be null"); - this.defaultMaxSize = requireNonNull(defaultMaxSize, "defaultMaxSize must not be null"); - this.cdsRuntime = requireNonNull(cdsRuntime, "cdsRuntime must not be null"); + this.eventFactory = eventFactory; + this.storageReader = storageReader; + this.defaultMaxSize = defaultMaxSize; + this.cdsRuntime = cdsRuntime; } @Before diff --git a/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/applicationservice/DeleteAttachmentsHandler.java b/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/applicationservice/DeleteAttachmentsHandler.java index 8135b8ed..32185044 100644 --- a/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/applicationservice/DeleteAttachmentsHandler.java +++ b/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/applicationservice/DeleteAttachmentsHandler.java @@ -3,8 +3,6 @@ */ package com.sap.cds.feature.attachments.handler.applicationservice; -import static java.util.Objects.requireNonNull; - import com.sap.cds.CdsDataProcessor; import com.sap.cds.CdsDataProcessor.Converter; import com.sap.cds.feature.attachments.generated.cds4j.sap.attachments.Attachments; @@ -27,7 +25,7 @@ * attachments for entities. It is called before a delete event is executed. */ @ServiceName(value = "*", type = ApplicationService.class) -public final class DeleteAttachmentsHandler implements EventHandler { +public class DeleteAttachmentsHandler implements EventHandler { private static final Logger logger = LoggerFactory.getLogger(DeleteAttachmentsHandler.class); @@ -36,9 +34,8 @@ public final class DeleteAttachmentsHandler implements EventHandler { public DeleteAttachmentsHandler( AttachmentsReader attachmentsReader, MarkAsDeletedAttachmentEvent deleteEvent) { - this.attachmentsReader = - requireNonNull(attachmentsReader, "attachmentsReader must not be null"); - this.deleteEvent = requireNonNull(deleteEvent, "deleteEvent must not be null"); + this.attachmentsReader = attachmentsReader; + this.deleteEvent = deleteEvent; } @Before diff --git a/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/applicationservice/ReadAttachmentsHandler.java b/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/applicationservice/ReadAttachmentsHandler.java index cf571c12..0848702c 100644 --- a/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/applicationservice/ReadAttachmentsHandler.java +++ b/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/applicationservice/ReadAttachmentsHandler.java @@ -4,7 +4,6 @@ package com.sap.cds.feature.attachments.handler.applicationservice; import static java.util.Objects.nonNull; -import static java.util.Objects.requireNonNull; import com.sap.cds.CdsData; import com.sap.cds.CdsDataProcessor; @@ -58,7 +57,7 @@ * scanned" error. The client must retry the download after the rescan completes. */ @ServiceName(value = "*", type = ApplicationService.class) -public final class ReadAttachmentsHandler implements EventHandler { +public class ReadAttachmentsHandler implements EventHandler { private static final Logger logger = LoggerFactory.getLogger(ReadAttachmentsHandler.class); @@ -82,13 +81,11 @@ public ReadAttachmentsHandler( PersistenceService persistenceService, AssociationCascader cascader, boolean scannerAvailable) { - this.attachmentService = - requireNonNull(attachmentService, "attachmentService must not be null"); - this.statusValidator = requireNonNull(statusValidator, "statusValidator must not be null"); - this.scanExecutor = requireNonNull(scanExecutor, "scanExecutor must not be null"); - this.persistenceService = - requireNonNull(persistenceService, "persistenceService must not be null"); - this.cascader = requireNonNull(cascader, "cascader must not be null"); + this.attachmentService = attachmentService; + this.statusValidator = statusValidator; + this.scanExecutor = scanExecutor; + this.persistenceService = persistenceService; + this.cascader = cascader; this.scannerAvailable = scannerAvailable; } diff --git a/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/applicationservice/UpdateAttachmentsHandler.java b/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/applicationservice/UpdateAttachmentsHandler.java index 2686936d..7e7b06c6 100644 --- a/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/applicationservice/UpdateAttachmentsHandler.java +++ b/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/applicationservice/UpdateAttachmentsHandler.java @@ -3,8 +3,6 @@ */ package com.sap.cds.feature.attachments.handler.applicationservice; -import static java.util.Objects.requireNonNull; - import com.sap.cds.CdsData; import com.sap.cds.feature.attachments.generated.cds4j.sap.attachments.Attachments; import com.sap.cds.feature.attachments.handler.applicationservice.helper.ModifyApplicationHandlerHelper; @@ -37,7 +35,7 @@ * update-events or delete-events the handler needs to distinguish between the different cases. */ @ServiceName(value = "*", type = ApplicationService.class) -public final class UpdateAttachmentsHandler implements EventHandler { +public class UpdateAttachmentsHandler implements EventHandler { private static final Logger logger = LoggerFactory.getLogger(UpdateAttachmentsHandler.class); @@ -53,13 +51,11 @@ public UpdateAttachmentsHandler( AttachmentService attachmentService, ThreadDataStorageReader storageReader, String defaultMaxSize) { - this.eventFactory = requireNonNull(eventFactory, "eventFactory must not be null"); - this.attachmentsReader = - requireNonNull(attachmentsReader, "attachmentsReader must not be null"); - this.attachmentService = - requireNonNull(attachmentService, "attachmentService must not be null"); - this.storageReader = requireNonNull(storageReader, "storageReader must not be null"); - this.defaultMaxSize = requireNonNull(defaultMaxSize, "defaultMaxSize must not be null"); + this.eventFactory = eventFactory; + this.attachmentsReader = attachmentsReader; + this.attachmentService = attachmentService; + this.storageReader = storageReader; + this.defaultMaxSize = defaultMaxSize; } @Before diff --git a/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/applicationservice/modifyevents/CreateAttachmentEvent.java b/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/applicationservice/modifyevents/CreateAttachmentEvent.java index 6d696b1a..530dddbe 100644 --- a/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/applicationservice/modifyevents/CreateAttachmentEvent.java +++ b/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/applicationservice/modifyevents/CreateAttachmentEvent.java @@ -4,7 +4,6 @@ package com.sap.cds.feature.attachments.handler.applicationservice.modifyevents; import static java.util.Objects.nonNull; -import static java.util.Objects.requireNonNull; import com.sap.cds.feature.attachments.generated.cds4j.sap.attachments.Attachments; import com.sap.cds.feature.attachments.generated.cds4j.sap.attachments.MediaData; @@ -31,7 +30,7 @@ * {@link AttachmentService} to create the attachment and registers the transaction listener to be * able to revert the creation in case of errors. */ -public final class CreateAttachmentEvent implements ModifyAttachmentEvent { +public class CreateAttachmentEvent implements ModifyAttachmentEvent { private static final Logger logger = LoggerFactory.getLogger(CreateAttachmentEvent.class); private static final Pattern RFC5987_FILENAME_PATTERN = @@ -44,9 +43,8 @@ public final class CreateAttachmentEvent implements ModifyAttachmentEvent { public CreateAttachmentEvent( AttachmentService attachmentService, ListenerProvider listenerProvider) { - this.attachmentService = - requireNonNull(attachmentService, "attachmentService must not be null"); - this.listenerProvider = requireNonNull(listenerProvider, "listenerProvider must not be null"); + this.attachmentService = attachmentService; + this.listenerProvider = listenerProvider; } @Override diff --git a/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/applicationservice/modifyevents/MarkAsDeletedAttachmentEvent.java b/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/applicationservice/modifyevents/MarkAsDeletedAttachmentEvent.java index a2625168..1e9423bf 100644 --- a/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/applicationservice/modifyevents/MarkAsDeletedAttachmentEvent.java +++ b/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/applicationservice/modifyevents/MarkAsDeletedAttachmentEvent.java @@ -4,7 +4,6 @@ package com.sap.cds.feature.attachments.handler.applicationservice.modifyevents; import static java.util.Objects.nonNull; -import static java.util.Objects.requireNonNull; import com.sap.cds.feature.attachments.generated.cds4j.sap.attachments.Attachments; import com.sap.cds.feature.attachments.service.AttachmentService; @@ -20,15 +19,14 @@ * The class {@link MarkAsDeletedAttachmentEvent} handles the mark of deletion of an attachment. It * calls the {@link AttachmentService} to mark the attachment as deleted. */ -public final class MarkAsDeletedAttachmentEvent implements ModifyAttachmentEvent { +public class MarkAsDeletedAttachmentEvent implements ModifyAttachmentEvent { private static final Logger logger = LoggerFactory.getLogger(MarkAsDeletedAttachmentEvent.class); private final AttachmentService attachmentService; public MarkAsDeletedAttachmentEvent(AttachmentService attachmentService) { - this.attachmentService = - requireNonNull(attachmentService, "attachmentService must not be null"); + this.attachmentService = attachmentService; } @Override diff --git a/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/applicationservice/modifyevents/ModifyAttachmentEventFactory.java b/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/applicationservice/modifyevents/ModifyAttachmentEventFactory.java index b8d3fbe3..a075d8be 100644 --- a/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/applicationservice/modifyevents/ModifyAttachmentEventFactory.java +++ b/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/applicationservice/modifyevents/ModifyAttachmentEventFactory.java @@ -3,8 +3,6 @@ */ package com.sap.cds.feature.attachments.handler.applicationservice.modifyevents; -import static java.util.Objects.requireNonNull; - import com.sap.cds.CdsData; import com.sap.cds.feature.attachments.generated.cds4j.sap.attachments.Attachments; import com.sap.cds.feature.attachments.service.AttachmentService; @@ -25,7 +23,7 @@ *

  • doNothing * */ -public final class ModifyAttachmentEventFactory { +public class ModifyAttachmentEventFactory { private final CreateAttachmentEvent createEvent; private final UpdateAttachmentEvent updateEvent; @@ -37,10 +35,10 @@ public ModifyAttachmentEventFactory( UpdateAttachmentEvent updateEvent, MarkAsDeletedAttachmentEvent deleteEvent, DoNothingAttachmentEvent doNothingEvent) { - this.createEvent = requireNonNull(createEvent, "createEvent must not be null"); - this.updateEvent = requireNonNull(updateEvent, "updateEvent must not be null"); - this.deleteEvent = requireNonNull(deleteEvent, "deleteEvent must not be null"); - this.doNothingEvent = requireNonNull(doNothingEvent, "doNothingEvent must not be null"); + this.createEvent = createEvent; + this.updateEvent = updateEvent; + this.deleteEvent = deleteEvent; + this.doNothingEvent = doNothingEvent; } /** diff --git a/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/applicationservice/modifyevents/UpdateAttachmentEvent.java b/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/applicationservice/modifyevents/UpdateAttachmentEvent.java index cdbd439c..05afd4d1 100644 --- a/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/applicationservice/modifyevents/UpdateAttachmentEvent.java +++ b/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/applicationservice/modifyevents/UpdateAttachmentEvent.java @@ -3,8 +3,6 @@ */ package com.sap.cds.feature.attachments.handler.applicationservice.modifyevents; -import static java.util.Objects.requireNonNull; - import com.sap.cds.feature.attachments.generated.cds4j.sap.attachments.Attachments; import com.sap.cds.feature.attachments.service.AttachmentService; import com.sap.cds.ql.cqn.Path; @@ -19,7 +17,7 @@ * and create method of the attachment service {@link AttachmentService}. To call these attachment * service events the class calls the delete and create event implementation. */ -public final class UpdateAttachmentEvent implements ModifyAttachmentEvent { +public class UpdateAttachmentEvent implements ModifyAttachmentEvent { private static final Logger logger = LoggerFactory.getLogger(UpdateAttachmentEvent.class); @@ -28,8 +26,8 @@ public final class UpdateAttachmentEvent implements ModifyAttachmentEvent { public UpdateAttachmentEvent( CreateAttachmentEvent createEvent, MarkAsDeletedAttachmentEvent deleteEvent) { - this.createEvent = requireNonNull(createEvent, "createEvent must not be null"); - this.deleteEvent = requireNonNull(deleteEvent, "deleteEvent must not be null"); + this.createEvent = createEvent; + this.deleteEvent = deleteEvent; } @Override diff --git a/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/applicationservice/transaction/CreationChangeSetListener.java b/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/applicationservice/transaction/CreationChangeSetListener.java index 0ee6002c..52272fcc 100644 --- a/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/applicationservice/transaction/CreationChangeSetListener.java +++ b/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/applicationservice/transaction/CreationChangeSetListener.java @@ -3,8 +3,6 @@ */ package com.sap.cds.feature.attachments.handler.applicationservice.transaction; -import static java.util.Objects.requireNonNull; - import com.sap.cds.feature.attachments.service.AttachmentService; import com.sap.cds.feature.attachments.service.model.service.MarkAsDeletedInput; import com.sap.cds.services.changeset.ChangeSetContext; @@ -18,7 +16,7 @@ * closed for which the listener was registered. It marks the attachment as deleted by calling the * {@link AttachmentService} for the mark as deleted event. */ -public final class CreationChangeSetListener implements ChangeSetListener { +public class CreationChangeSetListener implements ChangeSetListener { private final String contentId; private final CdsRuntime cdsRuntime; @@ -33,10 +31,9 @@ public final class CreationChangeSetListener implements ChangeSetListener { */ public CreationChangeSetListener( String contentId, CdsRuntime cdsRuntime, AttachmentService attachmentService) { - this.contentId = requireNonNull(contentId, "contentId must not be null"); - this.cdsRuntime = requireNonNull(cdsRuntime, "cdsRuntime must not be null"); - this.attachmentService = - requireNonNull(attachmentService, "attachmentService must not be null"); + this.contentId = contentId; + this.cdsRuntime = cdsRuntime; + this.attachmentService = attachmentService; } @Override diff --git a/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/common/AttachmentsReader.java b/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/common/AttachmentsReader.java index fcd9c271..2317567b 100644 --- a/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/common/AttachmentsReader.java +++ b/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/common/AttachmentsReader.java @@ -3,8 +3,6 @@ */ package com.sap.cds.feature.attachments.handler.common; -import static java.util.Objects.requireNonNull; - import com.sap.cds.Result; import com.sap.cds.feature.attachments.generated.cds4j.sap.attachments.Attachments; import com.sap.cds.ql.CQL; @@ -27,7 +25,7 @@ * *

    The returned data is deep including the path structure to the media entity. */ -public final class AttachmentsReader { +public class AttachmentsReader { private static final Logger logger = LoggerFactory.getLogger(AttachmentsReader.class); @@ -35,8 +33,8 @@ public final class AttachmentsReader { private final PersistenceService persistence; public AttachmentsReader(AssociationCascader cascader, PersistenceService persistence) { - this.cascader = requireNonNull(cascader, "cascader must not be null"); - this.persistence = requireNonNull(persistence, "persistence must not be null"); + this.cascader = cascader; + this.persistence = persistence; } public List readAttachments( diff --git a/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/draftservice/DraftActiveAttachmentsHandler.java b/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/draftservice/DraftActiveAttachmentsHandler.java index d4699737..00a736d6 100644 --- a/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/draftservice/DraftActiveAttachmentsHandler.java +++ b/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/draftservice/DraftActiveAttachmentsHandler.java @@ -3,8 +3,6 @@ */ package com.sap.cds.feature.attachments.handler.draftservice; -import static java.util.Objects.requireNonNull; - import com.sap.cds.feature.attachments.handler.applicationservice.helper.ThreadDataStorageSetter; import com.sap.cds.services.draft.DraftSaveEventContext; import com.sap.cds.services.draft.DraftService; @@ -13,13 +11,12 @@ import com.sap.cds.services.handler.annotations.ServiceName; @ServiceName(value = "*", type = DraftService.class) -public final class DraftActiveAttachmentsHandler implements EventHandler { +public class DraftActiveAttachmentsHandler implements EventHandler { private final ThreadDataStorageSetter threadLocalSetter; public DraftActiveAttachmentsHandler(ThreadDataStorageSetter threadLocalSetter) { - this.threadLocalSetter = - requireNonNull(threadLocalSetter, "threadLocalSetter must not be null"); + this.threadLocalSetter = threadLocalSetter; } @On diff --git a/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/draftservice/DraftCancelAttachmentsHandler.java b/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/draftservice/DraftCancelAttachmentsHandler.java index 6f0c8597..d785d5c0 100644 --- a/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/draftservice/DraftCancelAttachmentsHandler.java +++ b/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/draftservice/DraftCancelAttachmentsHandler.java @@ -3,8 +3,6 @@ */ package com.sap.cds.feature.attachments.handler.draftservice; -import static java.util.Objects.requireNonNull; - import com.sap.cds.CdsData; import com.sap.cds.CdsDataProcessor; import com.sap.cds.CdsDataProcessor.Filter; @@ -36,7 +34,7 @@ * valid and deletes the content of the attachments if necessary. */ @ServiceName(value = "*", type = DraftService.class) -public final class DraftCancelAttachmentsHandler implements EventHandler { +public class DraftCancelAttachmentsHandler implements EventHandler { private static final Logger logger = LoggerFactory.getLogger(DraftCancelAttachmentsHandler.class); @@ -50,9 +48,8 @@ public final class DraftCancelAttachmentsHandler implements EventHandler { public DraftCancelAttachmentsHandler( AttachmentsReader attachmentsReader, MarkAsDeletedAttachmentEvent deleteEvent) { - this.attachmentsReader = - requireNonNull(attachmentsReader, "attachmentsReader must not be null"); - this.deleteEvent = requireNonNull(deleteEvent, "deleteEvent must not be null"); + this.attachmentsReader = attachmentsReader; + this.deleteEvent = deleteEvent; } @Before diff --git a/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/draftservice/DraftPatchAttachmentsHandler.java b/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/draftservice/DraftPatchAttachmentsHandler.java index 57f3f963..d62134bd 100644 --- a/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/draftservice/DraftPatchAttachmentsHandler.java +++ b/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/draftservice/DraftPatchAttachmentsHandler.java @@ -3,8 +3,6 @@ */ package com.sap.cds.feature.attachments.handler.draftservice; -import static java.util.Objects.requireNonNull; - import com.sap.cds.CdsData; import com.sap.cds.CdsDataProcessor; import com.sap.cds.CdsDataProcessor.Converter; @@ -34,7 +32,7 @@ * event factory and corresponding events. */ @ServiceName(value = "*", type = DraftService.class) -public final class DraftPatchAttachmentsHandler implements EventHandler { +public class DraftPatchAttachmentsHandler implements EventHandler { private static final Logger logger = LoggerFactory.getLogger(DraftPatchAttachmentsHandler.class); @@ -46,9 +44,9 @@ public DraftPatchAttachmentsHandler( PersistenceService persistence, ModifyAttachmentEventFactory eventFactory, String defaultMaxSize) { - this.persistence = requireNonNull(persistence, "persistence must not be null"); - this.eventFactory = requireNonNull(eventFactory, "eventFactory must not be null"); - this.defaultMaxSize = requireNonNull(defaultMaxSize, "defaultMaxSize must not be null"); + this.persistence = persistence; + this.eventFactory = eventFactory; + this.defaultMaxSize = defaultMaxSize; } @Before diff --git a/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/service/handler/DefaultAttachmentsServiceHandler.java b/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/service/handler/DefaultAttachmentsServiceHandler.java index 19978b9f..d07ae934 100644 --- a/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/service/handler/DefaultAttachmentsServiceHandler.java +++ b/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/service/handler/DefaultAttachmentsServiceHandler.java @@ -17,7 +17,6 @@ import com.sap.cds.services.handler.annotations.HandlerOrder; import com.sap.cds.services.handler.annotations.On; import com.sap.cds.services.handler.annotations.ServiceName; -import java.util.Objects; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -30,7 +29,7 @@ * deleted in the database. */ @ServiceName(value = "*", type = AttachmentService.class) -public final class DefaultAttachmentsServiceHandler implements EventHandler { +public class DefaultAttachmentsServiceHandler implements EventHandler { // Positions this handler very late so it runs after all standard and custom handlers private static final int DEFAULT_ON = 10 * HandlerOrder.AFTER + HandlerOrder.LATE; @@ -41,8 +40,7 @@ public final class DefaultAttachmentsServiceHandler implements EventHandler { private final EndTransactionMalwareScanProvider malwareScanProvider; public DefaultAttachmentsServiceHandler(EndTransactionMalwareScanProvider malwareScanProvider) { - this.malwareScanProvider = - Objects.requireNonNull(malwareScanProvider, "malwareScanProvider must not be null"); + this.malwareScanProvider = malwareScanProvider; } @On diff --git a/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/service/malware/DefaultAttachmentMalwareScanner.java b/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/service/malware/DefaultAttachmentMalwareScanner.java index bd25bede..46cc5f1c 100644 --- a/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/service/malware/DefaultAttachmentMalwareScanner.java +++ b/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/service/malware/DefaultAttachmentMalwareScanner.java @@ -3,8 +3,6 @@ */ package com.sap.cds.feature.attachments.service.malware; -import static java.util.Objects.requireNonNull; - import com.google.common.annotations.VisibleForTesting; import com.sap.cds.Result; import com.sap.cds.feature.attachments.generated.cds4j.sap.attachments.Attachments; @@ -34,7 +32,7 @@ * to read from the draft entity first and if nothing is found the data are read from the main * entity. */ -public final class DefaultAttachmentMalwareScanner implements AttachmentMalwareScanner { +public class DefaultAttachmentMalwareScanner implements AttachmentMalwareScanner { /** The name or label of the Malware Scan Service binding. */ public static final String MALWARE_SCAN_SERVICE_LABEL = "malware-scanner"; @@ -59,10 +57,8 @@ public DefaultAttachmentMalwareScanner( PersistenceService persistenceService, AttachmentService attachmentService, MalwareScanClient malwareScanClient) { - this.persistenceService = - requireNonNull(persistenceService, "persistenceService must not be null"); - this.attachmentService = - requireNonNull(attachmentService, "attachmentService must not be null"); + this.persistenceService = persistenceService; + this.attachmentService = attachmentService; this.malwareScanClient = malwareScanClient; } diff --git a/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/service/malware/client/DefaultMalwareScanClient.java b/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/service/malware/client/DefaultMalwareScanClient.java index 0c0f692e..b9ec7b34 100644 --- a/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/service/malware/client/DefaultMalwareScanClient.java +++ b/cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/service/malware/client/DefaultMalwareScanClient.java @@ -3,8 +3,6 @@ */ package com.sap.cds.feature.attachments.service.malware.client; -import static java.util.Objects.requireNonNull; - import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; import com.sap.cds.services.ServiceException; @@ -25,7 +23,7 @@ * is scanned by using the Malware Scan Service. The result of the scan is returned with status * {@link MalwareScanResultStatus}. */ -public final class DefaultMalwareScanClient implements MalwareScanClient { +public class DefaultMalwareScanClient implements MalwareScanClient { private static final Logger logger = LoggerFactory.getLogger(DefaultMalwareScanClient.class); @@ -43,7 +41,7 @@ public final class DefaultMalwareScanClient implements MalwareScanClient { * @throws NullPointerException if the {@code clientProviderFactory} is {@code null}. */ public DefaultMalwareScanClient(HttpClientProvider clientProvider) { - this.clientProvider = requireNonNull(clientProvider, "clientProvider must not be null"); + this.clientProvider = clientProvider; } @Override From 370c4fc2c926bf3b354e991962d129d0e0973e20 Mon Sep 17 00:00:00 2001 From: Marvin Lindner Date: Thu, 16 Jul 2026 13:50:48 +0200 Subject: [PATCH 4/5] adress sonar reports --- .../readhelper/CountingInputStreamTest.java | 21 +++---------------- 1 file changed, 3 insertions(+), 18 deletions(-) diff --git a/cds-feature-attachments/src/test/java/com/sap/cds/feature/attachments/handler/applicationservice/readhelper/CountingInputStreamTest.java b/cds-feature-attachments/src/test/java/com/sap/cds/feature/attachments/handler/applicationservice/readhelper/CountingInputStreamTest.java index b45deacc..9f18730d 100644 --- a/cds-feature-attachments/src/test/java/com/sap/cds/feature/attachments/handler/applicationservice/readhelper/CountingInputStreamTest.java +++ b/cds-feature-attachments/src/test/java/com/sap/cds/feature/attachments/handler/applicationservice/readhelper/CountingInputStreamTest.java @@ -15,6 +15,7 @@ import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; +import java.io.OutputStream; import java.nio.charset.StandardCharsets; import org.junit.jupiter.api.Test; @@ -139,15 +140,7 @@ void read_exceedsLimit_exceptionContainsMaxSizeString() { var cut = new CountingInputStream(delegate, "5"); // limit is 5 bytes ServiceException exception = - assertThrows( - ServiceException.class, - () -> { - byte[] buffer = new byte[1024]; - int bytesRead; - while ((bytesRead = cut.read(buffer)) != -1) { - assertThat(bytesRead).isPositive(); // use value to satisfy SpotBugs - } - }); + assertThrows(ServiceException.class, () -> cut.transferTo(OutputStream.nullOutputStream())); assertThat(exception.getErrorStatus()).isEqualTo(ExtendedErrorStatuses.CONTENT_TOO_LARGE); } @@ -159,15 +152,7 @@ void read_bulkRead_exceedsLimit_throwsServiceException() { var cut = new CountingInputStream(delegate, "10"); ServiceException exception = - assertThrows( - ServiceException.class, - () -> { - byte[] buffer = new byte[1024]; - int bytesRead; - while ((bytesRead = cut.read(buffer)) != -1) { - assertThat(bytesRead).isPositive(); // use value to satisfy SpotBugs - } - }); + assertThrows(ServiceException.class, () -> cut.transferTo(OutputStream.nullOutputStream())); assertThat(exception.getErrorStatus()).isEqualTo(ExtendedErrorStatuses.CONTENT_TOO_LARGE); assertThat(cut.isLimitExceeded()).isTrue(); From 474cce0898b284cc7444747439e694067af3fecf Mon Sep 17 00:00:00 2001 From: Marvin Lindner Date: Thu, 16 Jul 2026 14:00:07 +0200 Subject: [PATCH 5/5] extract nullOutputStream to satisfy sonar --- .../readhelper/CountingInputStreamTest.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/cds-feature-attachments/src/test/java/com/sap/cds/feature/attachments/handler/applicationservice/readhelper/CountingInputStreamTest.java b/cds-feature-attachments/src/test/java/com/sap/cds/feature/attachments/handler/applicationservice/readhelper/CountingInputStreamTest.java index 9f18730d..e9d9c5e5 100644 --- a/cds-feature-attachments/src/test/java/com/sap/cds/feature/attachments/handler/applicationservice/readhelper/CountingInputStreamTest.java +++ b/cds-feature-attachments/src/test/java/com/sap/cds/feature/attachments/handler/applicationservice/readhelper/CountingInputStreamTest.java @@ -138,9 +138,10 @@ void read_exceedsLimit_exceptionContainsMaxSizeString() { var data = "hello world".getBytes(StandardCharsets.UTF_8); // 11 bytes var delegate = new ByteArrayInputStream(data); var cut = new CountingInputStream(delegate, "5"); // limit is 5 bytes + var nullOut = OutputStream.nullOutputStream(); ServiceException exception = - assertThrows(ServiceException.class, () -> cut.transferTo(OutputStream.nullOutputStream())); + assertThrows(ServiceException.class, () -> cut.transferTo(nullOut)); assertThat(exception.getErrorStatus()).isEqualTo(ExtendedErrorStatuses.CONTENT_TOO_LARGE); } @@ -150,9 +151,10 @@ void read_bulkRead_exceedsLimit_throwsServiceException() { var data = "hello world test".getBytes(StandardCharsets.UTF_8); // 16 bytes var delegate = new ByteArrayInputStream(data); var cut = new CountingInputStream(delegate, "10"); + var nullOut = OutputStream.nullOutputStream(); ServiceException exception = - assertThrows(ServiceException.class, () -> cut.transferTo(OutputStream.nullOutputStream())); + assertThrows(ServiceException.class, () -> cut.transferTo(nullOut)); assertThat(exception.getErrorStatus()).isEqualTo(ExtendedErrorStatuses.CONTENT_TOO_LARGE); assertThat(cut.isLimitExceeded()).isTrue();