This is an automated email from the ASF dual-hosted git repository. btellier pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git
The following commit(s) were added to refs/heads/master by this push: new a97d14088d JAMES-2586 blob resolvers should not throw an exception when blob not found a97d14088d is described below commit a97d14088d69f321a91ff799be3bc5effe9268e9 Author: Rene Cordier <rcord...@linagora.com> AuthorDate: Thu Jan 23 17:05:50 2025 +0700 JAMES-2586 blob resolvers should not throw an exception when blob not found --- .../apache/james/jmap/routes/DownloadRoutes.scala | 33 +++++++++++----------- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/routes/DownloadRoutes.scala b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/routes/DownloadRoutes.scala index 99bc6f4951..cd590eed51 100644 --- a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/routes/DownloadRoutes.scala +++ b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/routes/DownloadRoutes.scala @@ -148,10 +148,9 @@ class MessageBlobResolver @Inject()(val messageIdFactory: MessageId.Factory, override def resolve(blobId: BlobId, mailboxSession: MailboxSession): SMono[BlobResolutionResult] = { Try(messageIdFactory.fromString(blobId.value.value)) match { case Failure(_) => SMono.just(NonApplicable) - case Success(messageId) => SMono.just(Applicable(SMono.fromPublisher( - messageIdManager.getMessagesReactive(List(messageId).asJava, FetchGroup.FULL_CONTENT, mailboxSession)) - .map[Blob](MessageBlob(blobId, _)) - .switchIfEmpty(SMono.error(BlobNotFoundException(blobId))))) + case Success(messageId) => SMono.fromPublisher(messageIdManager.getMessagesReactive(List(messageId).asJava, FetchGroup.FULL_CONTENT, mailboxSession)) + .map(message => Applicable(SMono.just(MessageBlob(blobId, message)))) + .switchIfEmpty(SMono.just(NonApplicable)) } } } @@ -164,23 +163,23 @@ class UploadResolver @Inject()(val uploadService: UploadService) extends BlobRes SMono.just(NonApplicable) } else { val uploadIdAsString = blobId.value.value.substring(prefix.length) - SMono.just(Try(UploadId.from(uploadIdAsString)) match { - case Failure(_) => NonApplicable - case Success(uploadId) => Applicable( - SMono(uploadService.retrieve(uploadId, mailboxSession.getUser)) - .map(upload => UploadedBlob(blobId, upload)) + Try(UploadId.from(uploadIdAsString)) match { + case Failure(_) => SMono.just(NonApplicable) + case Success(uploadId) => SMono.fromPublisher(uploadService.retrieve(uploadId, mailboxSession.getUser)) + .map(upload => Applicable(SMono.just(UploadedBlob(blobId, upload)))) .onErrorResume { - case _: UploadNotFoundException => SMono.error(BlobNotFoundException(blobId)) - }) - }) + case _: UploadNotFoundException => SMono.just(NonApplicable) + case e => SMono.error[BlobResolutionResult](e) + } + } } } } class AttachmentBlobResolver @Inject()(val attachmentManager: AttachmentManager, val attachmentIdFactory: AttachmentIdFactory) extends BlobResolver { override def resolve(blobId: BlobId, mailboxSession: MailboxSession): SMono[BlobResolutionResult] = - attachmentIdFactory.from(blobId.value.value) match { - case attachmentId: StringBackedAttachmentId => + Try(attachmentIdFactory.from(blobId.value.value)) match { + case Success(attachmentId) => SMono(attachmentManager.getAttachmentReactive(attachmentId, mailboxSession)) .map(attachmentMetadata => Applicable(SMono(attachmentManager.loadReactive(attachmentMetadata, mailboxSession)) .map(content => AttachmentBlob(attachmentMetadata, content)))) @@ -214,7 +213,7 @@ class MessagePartBlobResolver @Inject()(val messageIdFactory: MessageId.Factory, asMessageAndPartIds(blobId) match { case Failure(_) => SMono.just(NonApplicable) case Success((messageId, blobIds)) => - SMono.just(Applicable(SMono.fromPublisher( + SMono.fromPublisher( messageIdManager.getMessagesReactive(List(messageId).asJava, FetchGroup.FULL_CONTENT, mailboxSession)) .handle[MinimalEmailBodyPart] { case (message, sink) => MinimalEmailBodyPart.ofMessage(None, zoneIdSupplier.get(), BlobId.of(messageId).get, message) @@ -229,8 +228,8 @@ class MessagePartBlobResolver @Inject()(val messageIdFactory: MessageId.Factory, } .fold(sink.error(BlobNotFoundException(blobId)))(part => sink.next(part)) } - .map[Blob](EmailBodyPartBlob(blobId, _)) - .switchIfEmpty(SMono.error(BlobNotFoundException(blobId))))) + .map(blob => Applicable(SMono.just(EmailBodyPartBlob(blobId, blob)))) + .switchIfEmpty(SMono.just(NonApplicable)) } } } --------------------------------------------------------------------- To unsubscribe, e-mail: notifications-unsubscr...@james.apache.org For additional commands, e-mail: notifications-h...@james.apache.org