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

commit cec2fc0bcab75c409df8e013b68181bfe6bfefc1
Author: Tung Van TRAN <vtt...@linagora.com>
AuthorDate: Thu Oct 27 11:39:23 2022 +0700

    [CLEAN CODE] Jmap - Method getRequest from deserialize json
---
 .../org/apache/james/jmap/json/ResponseSerializer.scala  |  2 ++
 .../apache/james/jmap/method/EmailChangesMethod.scala    |  9 +++------
 .../org/apache/james/jmap/method/EmailGetMethod.scala    |  6 ++----
 .../org/apache/james/jmap/method/EmailImportMethod.scala | 10 ++++------
 .../org/apache/james/jmap/method/EmailQueryMethod.scala  | 15 ++++++---------
 .../org/apache/james/jmap/method/EmailSetMethod.scala    | 10 ++++------
 .../org/apache/james/jmap/method/IdentityGetMethod.scala | 11 +++++------
 .../org/apache/james/jmap/method/IdentitySetMethod.scala | 10 ++++------
 .../org/apache/james/jmap/method/MDNParseMethod.scala    | 14 ++++++--------
 .../org/apache/james/jmap/method/MDNSendMethod.scala     | 15 +++++++--------
 .../apache/james/jmap/method/MailboxChangesMethod.scala  |  9 +++------
 .../org/apache/james/jmap/method/MailboxGetMethod.scala  | 11 ++++-------
 .../apache/james/jmap/method/MailboxQueryMethod.scala    | 10 ++++------
 .../org/apache/james/jmap/method/MailboxSetMethod.scala  | 11 +++++------
 .../james/jmap/method/PushSubscriptionGetMethod.scala    | 10 ++++------
 .../james/jmap/method/PushSubscriptionSetMethod.scala    | 10 ++++------
 .../org/apache/james/jmap/method/QuotaGetMethod.scala    | 12 +++++-------
 .../apache/james/jmap/method/ThreadChangesMethod.scala   | 10 ++++------
 .../org/apache/james/jmap/method/ThreadGetMethod.scala   |  9 +++------
 .../james/jmap/method/VacationResponseGetMethod.scala    | 15 ++++++---------
 .../james/jmap/method/VacationResponseSetMethod.scala    | 16 +++++++---------
 21 files changed, 92 insertions(+), 133 deletions(-)

diff --git 
a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/json/ResponseSerializer.scala
 
b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/json/ResponseSerializer.scala
index a90eaa57c1..56905e9c8b 100644
--- 
a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/json/ResponseSerializer.scala
+++ 
b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/json/ResponseSerializer.scala
@@ -159,6 +159,8 @@ object ResponseSerializer {
 
   def serialize(errors: JsError): JsValue = Json.toJson(errors)
 
+  def asException(errors: scala.collection.Seq[(JsPath, 
scala.collection.Seq[JsonValidationError])]): IllegalArgumentException = new 
IllegalArgumentException(serialize(JsError(errors)).toString())
+
   def deserializeRequestObject(input: String): JsResult[RequestObject] = 
Json.parse(input).validate[RequestObject]
 
   def deserializeRequestObject(input: InputStream): JsResult[RequestObject] = 
Json.parse(input).validate[RequestObject]
diff --git 
a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/EmailChangesMethod.scala
 
b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/EmailChangesMethod.scala
index 68bc07f566..44ee6eef3f 100644
--- 
a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/EmailChangesMethod.scala
+++ 
b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/EmailChangesMethod.scala
@@ -20,7 +20,6 @@
 package org.apache.james.jmap.method
 
 import eu.timepit.refined.auto._
-import javax.inject.Inject
 import org.apache.james.jmap.api.change.{CanNotCalculateChangesException, 
EmailChangeRepository, EmailChanges, State => JavaState}
 import org.apache.james.jmap.api.model.{AccountId => JavaAccountId}
 import org.apache.james.jmap.core.CapabilityIdentifier.{CapabilityIdentifier, 
JAMES_SHARES, JMAP_MAIL}
@@ -31,9 +30,9 @@ import org.apache.james.jmap.mail.{EmailChangesRequest, 
EmailChangesResponse, Ha
 import org.apache.james.jmap.routes.SessionSupplier
 import org.apache.james.mailbox.MailboxSession
 import org.apache.james.metrics.api.MetricFactory
-import play.api.libs.json.{JsError, JsSuccess}
 import reactor.core.scala.publisher.SMono
 
+import javax.inject.Inject
 import scala.jdk.CollectionConverters._
 import scala.jdk.OptionConverters._
 
@@ -74,8 +73,6 @@ class EmailChangesMethod @Inject()(val metricFactory: 
MetricFactory,
     }
 
   override def getRequest(mailboxSession: MailboxSession, invocation: 
Invocation): Either[IllegalArgumentException, EmailChangesRequest] =
-    
EmailGetSerializer.deserializeEmailChangesRequest(invocation.arguments.value) 
match {
-      case JsSuccess(emailGetRequest, _) => Right(emailGetRequest)
-      case errors: JsError => Left(new 
IllegalArgumentException(ResponseSerializer.serialize(errors).toString))
-    }
+    
EmailGetSerializer.deserializeEmailChangesRequest(invocation.arguments.value)
+      .asEither.left.map(ResponseSerializer.asException)
 }
diff --git 
a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/EmailGetMethod.scala
 
b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/EmailGetMethod.scala
index 17e6776ff2..1899e0edf9 100644
--- 
a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/EmailGetMethod.scala
+++ 
b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/EmailGetMethod.scala
@@ -92,10 +92,8 @@ class EmailGetMethod @Inject() (readerFactory: 
EmailViewReaderFactory,
   }
 
   override def getRequest(mailboxSession: MailboxSession, invocation: 
Invocation): Either[IllegalArgumentException, EmailGetRequest] =
-    EmailGetSerializer.deserializeEmailGetRequest(invocation.arguments.value) 
match {
-      case JsSuccess(emailGetRequest, _) => Right(emailGetRequest)
-      case errors: JsError => Left(new 
IllegalArgumentException(ResponseSerializer.serialize(errors).toString))
-    }
+    EmailGetSerializer.deserializeEmailGetRequest(invocation.arguments.value)
+      .asEither.left.map(ResponseSerializer.asException)
 
   private def computeResponseInvocation(capabilities: 
Set[CapabilityIdentifier], request: EmailGetRequest, invocation: Invocation, 
mailboxSession: MailboxSession): SMono[Invocation] =
     validateProperties(request)
diff --git 
a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/EmailImportMethod.scala
 
b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/EmailImportMethod.scala
index b15f1aac89..41bfa69be1 100644
--- 
a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/EmailImportMethod.scala
+++ 
b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/EmailImportMethod.scala
@@ -19,10 +19,7 @@
 
 package org.apache.james.jmap.method
 
-import java.util.Date
-
 import eu.timepit.refined.auto._
-import javax.inject.Inject
 import org.apache.james.jmap.api.change.EmailChangeRepository
 import org.apache.james.jmap.api.model.Size.sanitizeSize
 import org.apache.james.jmap.api.model.{AccountId => JavaAccountId}
@@ -44,9 +41,10 @@ import org.apache.james.mime4j.message.DefaultMessageBuilder
 import org.apache.james.mime4j.stream.MimeConfig
 import org.apache.james.util.ReactorUtils
 import org.reactivestreams.Publisher
-import play.api.libs.json.JsError
 import reactor.core.scala.publisher.{SFlux, SMono}
 
+import java.util.Date
+import javax.inject.Inject
 import scala.util.{Try, Using}
 
 object EmailImportMethod {
@@ -91,8 +89,8 @@ class EmailImportMethod @Inject() (val metricFactory: 
MetricFactory,
   override val requiredCapabilities: Set[CapabilityIdentifier] = 
Set(JMAP_CORE, JMAP_MAIL)
 
   override def getRequest(mailboxSession: MailboxSession, invocation: 
Invocation): Either[Exception, EmailImportRequest] =
-    
serializer.deserializeEmailImportRequest(invocation.arguments.value).asEither
-      .left.map(errors => new 
IllegalArgumentException(ResponseSerializer.serialize(JsError(errors)).toString))
+    serializer.deserializeEmailImportRequest(invocation.arguments.value)
+      .asEither.left.map(ResponseSerializer.asException)
 
   override def doProcess(capabilities: Set[CapabilityIdentifier], invocation: 
InvocationWithContext, mailboxSession: MailboxSession, request: 
EmailImportRequest): Publisher[InvocationWithContext] =
     for {
diff --git 
a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/EmailQueryMethod.scala
 
b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/EmailQueryMethod.scala
index 74f95966a6..454e1893df 100644
--- 
a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/EmailQueryMethod.scala
+++ 
b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/EmailQueryMethod.scala
@@ -18,12 +18,8 @@
  ****************************************************************/
 package org.apache.james.jmap.method
 
-import java.time.ZonedDateTime
-
 import cats.implicits._
 import eu.timepit.refined.auto._
-import javax.inject.Inject
-import javax.mail.Flags.Flag.DELETED
 import org.apache.james.jmap.JMAPConfiguration
 import org.apache.james.jmap.api.projections.EmailQueryView
 import org.apache.james.jmap.core.CapabilityIdentifier.{CapabilityIdentifier, 
JMAP_CORE, JMAP_MAIL}
@@ -41,9 +37,11 @@ import org.apache.james.mailbox.model.{MailboxId, MessageId, 
MultimailboxesSearc
 import org.apache.james.mailbox.{MailboxManager, MailboxSession}
 import org.apache.james.metrics.api.MetricFactory
 import org.apache.james.util.streams.{Limit => JavaLimit}
-import play.api.libs.json.{JsError, JsSuccess}
 import reactor.core.scala.publisher.{SFlux, SMono}
 
+import java.time.ZonedDateTime
+import javax.inject.Inject
+import javax.mail.Flags.Flag.DELETED
 import scala.jdk.CollectionConverters._
 
 class EmailQueryMethod @Inject() (serializer: EmailQuerySerializer,
@@ -79,10 +77,9 @@ class EmailQueryMethod @Inject() (serializer: 
EmailQuerySerializer,
   }
 
   override def getRequest(mailboxSession: MailboxSession, invocation: 
Invocation): Either[Exception, EmailQueryRequest] =
-    serializer.deserializeEmailQueryRequest(invocation.arguments.value) match {
-      case JsSuccess(emailQueryRequest, _) => 
validateRequestParameters(emailQueryRequest)
-      case errors: JsError => Left(new 
IllegalArgumentException(ResponseSerializer.serialize(errors).toString))
-    }
+    serializer.deserializeEmailQueryRequest(invocation.arguments.value)
+      .asEither.left.map(ResponseSerializer.asException)
+      .flatMap(validateRequestParameters)
 
   private def validateRequestParameters(request: EmailQueryRequest): 
Either[Exception, EmailQueryRequest] =
     (request.anchor, request.anchorOffset) match {
diff --git 
a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/EmailSetMethod.scala
 
b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/EmailSetMethod.scala
index c178acc056..b428729301 100644
--- 
a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/EmailSetMethod.scala
+++ 
b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/EmailSetMethod.scala
@@ -19,7 +19,6 @@
 package org.apache.james.jmap.method
 
 import eu.timepit.refined.auto._
-import javax.inject.Inject
 import org.apache.james.jmap.api.change.EmailChangeRepository
 import org.apache.james.jmap.api.model.{AccountId => JavaAccountId}
 import org.apache.james.jmap.core.CapabilityIdentifier.{CapabilityIdentifier, 
JAMES_SHARES, JMAP_CORE, JMAP_MAIL}
@@ -31,9 +30,10 @@ import org.apache.james.jmap.routes.SessionSupplier
 import org.apache.james.mailbox.MailboxSession
 import org.apache.james.mailbox.model.MessageId
 import org.apache.james.metrics.api.MetricFactory
-import play.api.libs.json.{JsError, JsSuccess}
 import reactor.core.scala.publisher.SMono
 
+import javax.inject.Inject
+
 case class MessageNotFoundException(messageId: MessageId) extends Exception
 
 class EmailSetMethod @Inject()(serializer: EmailSetSerializer,
@@ -77,10 +77,8 @@ class EmailSetMethod @Inject()(serializer: 
EmailSetSerializer,
   }
 
   override def getRequest(mailboxSession: MailboxSession, invocation: 
Invocation): Either[IllegalArgumentException, EmailSetRequest] =
-    serializer.deserialize(invocation.arguments.value) match {
-      case JsSuccess(emailSetRequest, _) => Right(emailSetRequest)
-      case errors: JsError => Left(new 
IllegalArgumentException(ResponseSerializer.serialize(errors).toString))
-    }
+    serializer.deserialize(invocation.arguments.value)
+      .asEither.left.map(ResponseSerializer.asException)
 
   private def retrieveState(capabilities: Set[CapabilityIdentifier], 
mailboxSession: MailboxSession): SMono[UuidState] =
     if (capabilities.contains(JAMES_SHARES)) {
diff --git 
a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/IdentityGetMethod.scala
 
b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/IdentityGetMethod.scala
index 665150b3b1..e73e4fa914 100644
--- 
a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/IdentityGetMethod.scala
+++ 
b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/IdentityGetMethod.scala
@@ -20,7 +20,6 @@
 package org.apache.james.jmap.method
 
 import eu.timepit.refined.auto._
-import javax.inject.Inject
 import org.apache.james.jmap.api.identity.IdentityRepository
 import org.apache.james.jmap.api.model.{Identity, IdentityId}
 import org.apache.james.jmap.core.CapabilityIdentifier.{CapabilityIdentifier, 
EMAIL_SUBMISSION, JMAP_CORE}
@@ -32,9 +31,11 @@ import org.apache.james.jmap.routes.SessionSupplier
 import org.apache.james.mailbox.MailboxSession
 import org.apache.james.metrics.api.MetricFactory
 import org.apache.james.util.ReactorUtils
-import play.api.libs.json.{JsError, JsObject, JsSuccess}
+import play.api.libs.json.JsObject
 import reactor.core.scala.publisher.{SFlux, SMono}
 
+import javax.inject.Inject
+
 class IdentityGetMethod @Inject() (identityRepository: IdentityRepository,
                                    val metricFactory: MetricFactory,
                                    val sessionSupplier: SessionSupplier) 
extends MethodRequiringAccountId[IdentityGetRequest] {
@@ -58,10 +59,8 @@ class IdentityGetMethod @Inject() (identityRepository: 
IdentityRepository,
   }
 
   override def getRequest(mailboxSession: MailboxSession, invocation: 
Invocation): Either[IllegalArgumentException, IdentityGetRequest] =
-    IdentitySerializer.deserialize(invocation.arguments.value) match {
-      case JsSuccess(request, _) => Right(request)
-      case errors: JsError => Left(new 
IllegalArgumentException(ResponseSerializer.serialize(errors).toString))
-    }
+    IdentitySerializer.deserialize(invocation.arguments.value)
+      .asEither.left.map(ResponseSerializer.asException)
 
   private def getIdentities(request: IdentityGetRequest,
                             mailboxSession: MailboxSession): 
SMono[IdentityGetResponse] =
diff --git 
a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/IdentitySetMethod.scala
 
b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/IdentitySetMethod.scala
index 8f9fd64779..2ac9f6ea80 100644
--- 
a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/IdentitySetMethod.scala
+++ 
b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/IdentitySetMethod.scala
@@ -20,7 +20,6 @@
 package org.apache.james.jmap.method
 
 import eu.timepit.refined.auto._
-import javax.inject.Inject
 import org.apache.james.jmap.core.CapabilityIdentifier.{CapabilityIdentifier, 
EMAIL_SUBMISSION, JMAP_CORE}
 import org.apache.james.jmap.core.Invocation.{Arguments, MethodName}
 import org.apache.james.jmap.core.{ClientId, Id, Invocation, ServerId, 
UuidState}
@@ -29,9 +28,10 @@ import org.apache.james.jmap.mail.{IdentitySetRequest, 
IdentitySetResponse}
 import org.apache.james.jmap.routes.SessionSupplier
 import org.apache.james.mailbox.MailboxSession
 import org.apache.james.metrics.api.MetricFactory
-import play.api.libs.json.{JsError, JsSuccess}
 import reactor.core.scala.publisher.SMono
 
+import javax.inject.Inject
+
 class IdentitySetMethod @Inject()(createPerformer: IdentitySetCreatePerformer,
                                   updatePerformer: IdentitySetUpdatePerformer,
                                   deletePerformer: IdentitySetDeletePerformer,
@@ -41,10 +41,8 @@ class IdentitySetMethod @Inject()(createPerformer: 
IdentitySetCreatePerformer,
   override val requiredCapabilities: Set[CapabilityIdentifier] = 
Set(JMAP_CORE, EMAIL_SUBMISSION)
 
   override def getRequest(mailboxSession: MailboxSession, invocation: 
Invocation): Either[Exception, IdentitySetRequest] =
-    
IdentitySerializer.deserializeIdentitySetRequest(invocation.arguments.value) 
match {
-      case JsSuccess(identitySetRequest, _) => Right(identitySetRequest)
-      case errors: JsError => Left(new 
IllegalArgumentException(ResponseSerializer.serialize(errors).toString))
-    }
+    
IdentitySerializer.deserializeIdentitySetRequest(invocation.arguments.value)
+      .asEither.left.map(ResponseSerializer.asException)
 
   override def doProcess(capabilities: Set[CapabilityIdentifier], invocation: 
InvocationWithContext, mailboxSession: MailboxSession, request: 
IdentitySetRequest): SMono[InvocationWithContext] =
     for {
diff --git 
a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MDNParseMethod.scala
 
b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MDNParseMethod.scala
index bc194afddf..827450390d 100644
--- 
a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MDNParseMethod.scala
+++ 
b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MDNParseMethod.scala
@@ -19,10 +19,7 @@
 
 package org.apache.james.jmap.method
 
-import java.io.InputStream
-
 import eu.timepit.refined.auto._
-import javax.inject.Inject
 import org.apache.james.jmap.core.CapabilityIdentifier.{CapabilityIdentifier, 
JMAP_CORE, JMAP_MAIL, JMAP_MDN}
 import org.apache.james.jmap.core.Invocation
 import org.apache.james.jmap.core.Invocation._
@@ -36,9 +33,11 @@ import org.apache.james.mdn.fields.OriginalMessageId
 import org.apache.james.metrics.api.MetricFactory
 import org.apache.james.mime4j.dom.Message
 import org.apache.james.mime4j.message.DefaultMessageBuilder
-import play.api.libs.json.{JsError, JsObject, JsSuccess, Json}
+import play.api.libs.json.JsObject
 import reactor.core.scala.publisher.{SFlux, SMono}
 
+import java.io.InputStream
+import javax.inject.Inject
 import scala.jdk.OptionConverters._
 import scala.util.{Try, Using}
 
@@ -58,10 +57,9 @@ class MDNParseMethod @Inject()(serializer: MDNSerializer,
       .map(InvocationWithContext(_, invocation.processingContext))
 
   override def getRequest(mailboxSession: MailboxSession, invocation: 
Invocation): Either[Exception, MDNParseRequest] =
-    serializer.deserializeMDNParseRequest(invocation.arguments.value) match {
-      case JsSuccess(mdnParseRequest, _) => mdnParseRequest.validate
-      case errors: JsError => Left(new 
IllegalArgumentException(Json.stringify(ResponseSerializer.serialize(errors))))
-    }
+    serializer.deserializeMDNParseRequest(invocation.arguments.value)
+      .asEither.left.map(ResponseSerializer.asException)
+      .flatMap(_.validate)
 
   def computeResponseInvocation(request: MDNParseRequest,
                                 invocation: Invocation,
diff --git 
a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MDNSendMethod.scala
 
b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MDNSendMethod.scala
index 71db5d21d2..87b330091c 100644
--- 
a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MDNSendMethod.scala
+++ 
b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MDNSendMethod.scala
@@ -20,9 +20,6 @@
 package org.apache.james.jmap.method
 
 import eu.timepit.refined.auto._
-import javax.annotation.PreDestroy
-import javax.inject.Inject
-import javax.mail.internet.MimeMessage
 import org.apache.james.jmap.api.model.Identity
 import org.apache.james.jmap.core.CapabilityIdentifier.{CapabilityIdentifier, 
JMAP_CORE, JMAP_MAIL, JMAP_MDN}
 import org.apache.james.jmap.core.Invocation
@@ -48,9 +45,12 @@ import org.apache.james.queue.api.MailQueueFactory.SPOOL
 import org.apache.james.queue.api.{MailQueue, MailQueueFactory}
 import org.apache.james.server.core.MailImpl
 import org.apache.james.util.ReactorUtils
-import play.api.libs.json.{JsError, JsObject, JsSuccess, Json}
+import play.api.libs.json.{JsError, JsObject, JsSuccess}
 import reactor.core.scala.publisher.{SFlux, SMono}
 
+import javax.annotation.PreDestroy
+import javax.inject.Inject
+import javax.mail.internet.MimeMessage
 import scala.jdk.CollectionConverters._
 import scala.jdk.OptionConverters._
 import scala.util.Try
@@ -104,10 +104,9 @@ class MDNSendMethod @Inject()(serializer: MDNSerializer,
       })
 
   override def getRequest(mailboxSession: MailboxSession, invocation: 
Invocation): Either[Exception, MDNSendRequest] =
-    serializer.deserializeMDNSendRequest(invocation.arguments.value) match {
-      case JsSuccess(mdnSendRequest, _) => mdnSendRequest.validate
-      case errors: JsError => Left(new 
IllegalArgumentException(Json.stringify(ResponseSerializer.serialize(errors))))
-    }
+    serializer.deserializeMDNSendRequest(invocation.arguments.value)
+      .asEither.left.map(ResponseSerializer.asException)
+      .flatMap(_.validate)
 
   private def create(identity: Identity,
                      request: MDNSendRequest,
diff --git 
a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MailboxChangesMethod.scala
 
b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MailboxChangesMethod.scala
index 6df3a075ea..0a04bde30c 100644
--- 
a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MailboxChangesMethod.scala
+++ 
b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MailboxChangesMethod.scala
@@ -20,7 +20,6 @@
 package org.apache.james.jmap.method
 
 import eu.timepit.refined.auto._
-import javax.inject.Inject
 import org.apache.james.jmap.api.change.{CanNotCalculateChangesException, 
MailboxChangeRepository, MailboxChanges, State => JavaState}
 import org.apache.james.jmap.api.model.{AccountId => JavaAccountId}
 import org.apache.james.jmap.core.CapabilityIdentifier.{CapabilityIdentifier, 
JMAP_MAIL}
@@ -32,9 +31,9 @@ import 
org.apache.james.jmap.method.MailboxChangesMethod.updatedProperties
 import org.apache.james.jmap.routes.SessionSupplier
 import org.apache.james.mailbox.MailboxSession
 import org.apache.james.metrics.api.MetricFactory
-import play.api.libs.json.{JsError, JsSuccess}
 import reactor.core.scala.publisher.SMono
 
+import javax.inject.Inject
 import scala.jdk.CollectionConverters._
 import scala.jdk.OptionConverters._
 
@@ -83,10 +82,8 @@ class MailboxChangesMethod @Inject()(mailboxSerializer: 
MailboxSerializer,
     })
 
   override def getRequest(mailboxSession: MailboxSession, invocation: 
Invocation): Either[IllegalArgumentException, MailboxChangesRequest] =
-    
mailboxSerializer.deserializeMailboxChangesRequest(invocation.arguments.value) 
match {
-      case JsSuccess(mailboxGetRequest, _) => Right(mailboxGetRequest)
-      case errors: JsError => Left(new 
IllegalArgumentException(ResponseSerializer.serialize(errors).toString))
-    }
+    
mailboxSerializer.deserializeMailboxChangesRequest(invocation.arguments.value)
+      .asEither.left.map(ResponseSerializer.asException)
 
   private def updateProperties(mailboxChanges: MailboxChanges): 
Option[Properties] =
     if (mailboxChanges.isCountChangesOnly) {
diff --git 
a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MailboxGetMethod.scala
 
b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MailboxGetMethod.scala
index 8dcbcb8776..416b5d87a9 100644
--- 
a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MailboxGetMethod.scala
+++ 
b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MailboxGetMethod.scala
@@ -20,7 +20,6 @@
 package org.apache.james.jmap.method
 
 import eu.timepit.refined.auto._
-import javax.inject.Inject
 import org.apache.james.jmap.api.change.MailboxChangeRepository
 import org.apache.james.jmap.api.model.{AccountId => JavaAccountId}
 import org.apache.james.jmap.core.CapabilityIdentifier.{CapabilityIdentifier, 
JAMES_SHARES, JMAP_CORE, JMAP_MAIL}
@@ -36,9 +35,10 @@ import org.apache.james.mailbox.model.search.MailboxQuery
 import org.apache.james.mailbox.model.{MailboxId, MailboxMetaData}
 import org.apache.james.mailbox.{MailboxManager, MailboxSession, 
SubscriptionManager}
 import org.apache.james.metrics.api.MetricFactory
-import play.api.libs.json.{JsError, JsObject, JsSuccess}
+import play.api.libs.json.JsObject
 import reactor.core.scala.publisher.{SFlux, SMono}
 
+import javax.inject.Inject
 import scala.util.Try
 
 object MailboxGetResults {
@@ -101,11 +101,8 @@ class MailboxGetMethod @Inject() (serializer: 
MailboxSerializer,
     }
 
   override def getRequest(mailboxSession: MailboxSession, invocation: 
Invocation): Either[IllegalArgumentException, MailboxGetRequest] =
-    serializer.deserializeMailboxGetRequest(invocation.arguments.value) match {
-    case JsSuccess(mailboxGetRequest, _) => Right(mailboxGetRequest)
-    case errors: JsError => Left(new 
IllegalArgumentException(ResponseSerializer.serialize(errors).toString))
-  }
-
+    serializer.deserializeMailboxGetRequest(invocation.arguments.value)
+      .asEither.left.map(ResponseSerializer.asException)
 
   private def getMailboxes(capabilities: Set[CapabilityIdentifier],
                            mailboxGetRequest: MailboxGetRequest,
diff --git 
a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MailboxQueryMethod.scala
 
b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MailboxQueryMethod.scala
index 6a2a50e77c..b12feb469e 100644
--- 
a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MailboxQueryMethod.scala
+++ 
b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MailboxQueryMethod.scala
@@ -19,7 +19,6 @@
 package org.apache.james.jmap.method
 
 import eu.timepit.refined.auto._
-import javax.inject.Inject
 import org.apache.james.jmap.core.CapabilityIdentifier.{CapabilityIdentifier, 
JMAP_CORE, JMAP_MAIL}
 import org.apache.james.jmap.core.Invocation.{Arguments, MethodName}
 import org.apache.james.jmap.core.{CanCalculateChanges, ErrorCode, Invocation, 
Limit, Position, QueryState}
@@ -28,9 +27,10 @@ import org.apache.james.jmap.mail.{MailboxQueryRequest, 
MailboxQueryResponse}
 import org.apache.james.jmap.routes.SessionSupplier
 import org.apache.james.mailbox.{MailboxSession, SystemMailboxesProvider}
 import org.apache.james.metrics.api.MetricFactory
-import play.api.libs.json.{JsError, JsSuccess}
 import reactor.core.scala.publisher.{SFlux, SMono}
 
+import javax.inject.Inject
+
 class MailboxQueryMethod @Inject()(systemMailboxesProvider: 
SystemMailboxesProvider,
                                    val metricFactory: MetricFactory,
                                    val sessionSupplier: SessionSupplier) 
extends MethodRequiringAccountId[MailboxQueryRequest] {
@@ -51,10 +51,8 @@ class MailboxQueryMethod @Inject()(systemMailboxesProvider: 
SystemMailboxesProvi
   }
 
   override def getRequest(mailboxSession: MailboxSession, invocation: 
Invocation): Either[IllegalArgumentException, MailboxQueryRequest] =
-    MailboxQuerySerializer.deserialize(invocation.arguments.value) match {
-      case JsSuccess(emailQueryRequest, _) => Right(emailQueryRequest)
-      case errors: JsError => Left(new 
IllegalArgumentException(ResponseSerializer.serialize(errors).toString))
-    }
+    MailboxQuerySerializer.deserialize(invocation.arguments.value)
+      .asEither.left.map(ResponseSerializer.asException)
 
   private def processRequest(mailboxSession: MailboxSession, invocation: 
Invocation, request: MailboxQueryRequest): SMono[Invocation] =
     
SFlux.fromPublisher(systemMailboxesProvider.getMailboxByRole(request.filter.role,
 mailboxSession.getUser))
diff --git 
a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MailboxSetMethod.scala
 
b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MailboxSetMethod.scala
index ec90a1f533..933dcf7383 100644
--- 
a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MailboxSetMethod.scala
+++ 
b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MailboxSetMethod.scala
@@ -20,7 +20,6 @@
 package org.apache.james.jmap.method
 
 import eu.timepit.refined.auto._
-import javax.inject.Inject
 import org.apache.james.jmap.api.change.MailboxChangeRepository
 import org.apache.james.jmap.api.model.{AccountId => JavaAccountId}
 import org.apache.james.jmap.core.CapabilityIdentifier.{CapabilityIdentifier, 
JAMES_SHARES, JMAP_CORE, JMAP_MAIL}
@@ -35,9 +34,11 @@ import org.apache.james.jmap.routes.SessionSupplier
 import org.apache.james.mailbox.MailboxSession
 import org.apache.james.mailbox.model.MailboxId
 import org.apache.james.metrics.api.MetricFactory
-import play.api.libs.json.{JsError, JsObject, JsSuccess}
+import play.api.libs.json.JsObject
 import reactor.core.scala.publisher.SMono
 
+import javax.inject.Inject
+
 case class MailboxHasMailException(mailboxId: MailboxId) extends Exception
 case class SystemMailboxChangeException(mailboxId: MailboxId) extends Exception
 case class LoopInMailboxGraphException(mailboxId: MailboxId) extends Exception
@@ -64,10 +65,8 @@ class MailboxSetMethod @Inject()(serializer: 
MailboxSerializer,
   } yield InvocationWithContext(response, creationResults._2)
 
   override def getRequest(mailboxSession: MailboxSession, invocation: 
Invocation): Either[IllegalArgumentException, MailboxSetRequest] =
-    serializer.deserializeMailboxSetRequest(invocation.arguments.value) match {
-      case JsSuccess(mailboxSetRequest, _) => Right(mailboxSetRequest)
-      case errors: JsError => Left(new 
IllegalArgumentException(ResponseSerializer.serialize(errors).toString))
-    }
+    serializer.deserializeMailboxSetRequest(invocation.arguments.value)
+      .asEither.left.map(ResponseSerializer.asException)
 
   private def createResponse(capabilities: Set[CapabilityIdentifier],
                              invocation: Invocation,
diff --git 
a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/PushSubscriptionGetMethod.scala
 
b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/PushSubscriptionGetMethod.scala
index 09381a9666..0f5b8e6465 100644
--- 
a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/PushSubscriptionGetMethod.scala
+++ 
b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/PushSubscriptionGetMethod.scala
@@ -20,7 +20,6 @@
 package org.apache.james.jmap.method
 
 import eu.timepit.refined.auto._
-import javax.inject.Inject
 import org.apache.james.jmap.api.model.PushSubscriptionId
 import org.apache.james.jmap.api.pushsubscription.PushSubscriptionRepository
 import org.apache.james.jmap.core.CapabilityIdentifier.{CapabilityIdentifier, 
JMAP_CORE}
@@ -31,9 +30,10 @@ import org.apache.james.jmap.routes.SessionSupplier
 import org.apache.james.lifecycle.api.Startable
 import org.apache.james.mailbox.MailboxSession
 import org.apache.james.metrics.api.MetricFactory
-import play.api.libs.json.{JsError, JsObject, JsSuccess}
+import play.api.libs.json.JsObject
 import reactor.core.scala.publisher.{SFlux, SMono}
 
+import javax.inject.Inject
 import scala.jdk.CollectionConverters._
 
 case class PushSubscriptionGetResults(results: Seq[PushSubscriptionDTO], 
notFound: Set[UnparsedPushSubscriptionId]) {
@@ -53,10 +53,8 @@ class PushSubscriptionGetMethod 
@Inject()(pushSubscriptionSerializer: PushSubscr
   override val requiredCapabilities: Set[CapabilityIdentifier] = Set(JMAP_CORE)
 
   override def getRequest(invocation: Invocation): Either[Exception, 
PushSubscriptionGetRequest] =
-    
pushSubscriptionSerializer.deserializePushSubscriptionGetRequest(invocation.arguments.value)
 match {
-      case JsSuccess(getRequest, _) => Right(getRequest)
-      case errors: JsError => Left(new 
IllegalArgumentException(ResponseSerializer.serialize(errors).toString))
-    }
+    
pushSubscriptionSerializer.deserializePushSubscriptionGetRequest(invocation.arguments.value)
+      .asEither.left.map(ResponseSerializer.asException)
 
   override def doProcess(invocation: InvocationWithContext, session: 
MailboxSession, request: PushSubscriptionGetRequest): 
SMono[InvocationWithContext] =
     request.validateProperties
diff --git 
a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/PushSubscriptionSetMethod.scala
 
b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/PushSubscriptionSetMethod.scala
index d267019a05..b62243e4f2 100644
--- 
a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/PushSubscriptionSetMethod.scala
+++ 
b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/PushSubscriptionSetMethod.scala
@@ -20,7 +20,6 @@
 package org.apache.james.jmap.method
 
 import eu.timepit.refined.auto._
-import javax.inject.Inject
 import org.apache.james.jmap.core.CapabilityIdentifier.{CapabilityIdentifier, 
JMAP_CORE}
 import org.apache.james.jmap.core.Invocation.{Arguments, MethodName}
 import org.apache.james.jmap.core.{Invocation, PushSubscriptionSetRequest, 
PushSubscriptionSetResponse}
@@ -29,9 +28,10 @@ import org.apache.james.jmap.routes.SessionSupplier
 import org.apache.james.lifecycle.api.Startable
 import org.apache.james.mailbox.MailboxSession
 import org.apache.james.metrics.api.MetricFactory
-import play.api.libs.json.{JsError, JsSuccess}
 import reactor.core.scala.publisher.SMono
 
+import javax.inject.Inject
+
 class PushSubscriptionSetMethod @Inject()(createPerformer: 
PushSubscriptionSetCreatePerformer,
                                           updatePerformer: 
PushSubscriptionUpdatePerformer,
                                           deletePerformer: 
PushSubscriptionSetDeletePerformer,
@@ -42,10 +42,8 @@ class PushSubscriptionSetMethod @Inject()(createPerformer: 
PushSubscriptionSetCr
   override val requiredCapabilities: Set[CapabilityIdentifier] = Set(JMAP_CORE)
 
   override def getRequest(invocation: Invocation): Either[Exception, 
PushSubscriptionSetRequest] =
-    
pushSubscriptionSerializer.deserializePushSubscriptionSetRequest(invocation.arguments.value)
 match {
-      case JsSuccess(emailSetRequest, _) => Right(emailSetRequest)
-      case errors: JsError => Left(new 
IllegalArgumentException(ResponseSerializer.serialize(errors).toString))
-    }
+    
pushSubscriptionSerializer.deserializePushSubscriptionSetRequest(invocation.arguments.value)
+      .asEither.left.map(ResponseSerializer.asException)
 
   override def doProcess(invocation: InvocationWithContext, mailboxSession: 
MailboxSession, request: PushSubscriptionSetRequest): 
SMono[InvocationWithContext] =
     for {
diff --git 
a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/QuotaGetMethod.scala
 
b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/QuotaGetMethod.scala
index 3cd6c519f4..4c2d07dc7b 100644
--- 
a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/QuotaGetMethod.scala
+++ 
b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/QuotaGetMethod.scala
@@ -22,6 +22,7 @@ package org.apache.james.jmap.method
 import eu.timepit.refined.auto._
 import org.apache.james.core.Username
 import org.apache.james.jmap.core.CapabilityIdentifier.{CapabilityIdentifier, 
JAMES_SHARES, JMAP_CORE, JMAP_QUOTA}
+import org.apache.james.jmap.core.Id.Id
 import org.apache.james.jmap.core.Invocation.{Arguments, MethodCallId, 
MethodName}
 import org.apache.james.jmap.core.{ErrorCode, Invocation, 
MissingCapabilityException, Properties}
 import org.apache.james.jmap.json.{QuotaSerializer, ResponseSerializer}
@@ -32,11 +33,10 @@ import org.apache.james.mailbox.MailboxSession
 import org.apache.james.mailbox.model.QuotaRoot
 import org.apache.james.mailbox.quota.{QuotaManager, UserQuotaRootResolver}
 import org.apache.james.metrics.api.MetricFactory
+import org.apache.james.util.ReactorUtils
 import org.reactivestreams.Publisher
-import play.api.libs.json.{JsError, JsObject, JsSuccess}
+import play.api.libs.json.JsObject
 import reactor.core.scala.publisher.{SFlux, SMono}
-import org.apache.james.jmap.core.Id.Id
-import org.apache.james.util.ReactorUtils
 
 import javax.inject.Inject
 
@@ -72,10 +72,8 @@ class QuotaGetMethod @Inject()(val metricFactory: 
MetricFactory,
   }
 
   override def getRequest(mailboxSession: MailboxSession, invocation: 
Invocation): Either[Exception, QuotaGetRequest] =
-    QuotaSerializer.deserializeQuotaGetRequest(invocation.arguments.value) 
match {
-      case JsSuccess(quotaGetRequest, _) => Right(quotaGetRequest)
-      case errors: JsError => Left(new 
IllegalArgumentException(ResponseSerializer.serialize(errors).toString))
-    }
+    QuotaSerializer.deserializeQuotaGetRequest(invocation.arguments.value)
+      .asEither.left.map(ResponseSerializer.asException)
 
   private def getQuotaGetResponse(quotaGetRequest: QuotaGetRequest, username: 
Username, capabilities: Set[CapabilityIdentifier]): 
SFlux[QuotaResponseGetResult] =
     quotaGetRequest.ids match {
diff --git 
a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/ThreadChangesMethod.scala
 
b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/ThreadChangesMethod.scala
index bbb54cb05b..5f55e65fdc 100644
--- 
a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/ThreadChangesMethod.scala
+++ 
b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/ThreadChangesMethod.scala
@@ -20,7 +20,6 @@
 package org.apache.james.jmap.method
 
 import eu.timepit.refined.auto._
-import javax.inject.Inject
 import org.apache.james.jmap.core.CapabilityIdentifier.{CapabilityIdentifier, 
JMAP_MAIL}
 import org.apache.james.jmap.core.Invocation.{Arguments, MethodName}
 import org.apache.james.jmap.core.{ErrorCode, Invocation, UuidState}
@@ -29,9 +28,10 @@ import org.apache.james.jmap.mail.{HasMoreChanges, 
ThreadChangesRequest, ThreadC
 import org.apache.james.jmap.routes.SessionSupplier
 import org.apache.james.mailbox.MailboxSession
 import org.apache.james.metrics.api.MetricFactory
-import play.api.libs.json.{JsError, JsSuccess}
 import reactor.core.scala.publisher.SMono
 
+import javax.inject.Inject
+
 class ThreadChangesMethod @Inject()(val metricFactory: MetricFactory,
                                     val sessionSupplier: SessionSupplier) 
extends MethodRequiringAccountId[ThreadChangesRequest] {
   override val methodName: MethodName = MethodName("Thread/changes")
@@ -60,8 +60,6 @@ class ThreadChangesMethod @Inject()(val metricFactory: 
MetricFactory,
     }
 
   override def getRequest(mailboxSession: MailboxSession, invocation: 
Invocation): Either[IllegalArgumentException, ThreadChangesRequest] =
-    ThreadSerializer.deserializeChanges(invocation.arguments.value) match {
-      case JsSuccess(threadGetRequest, _) => Right(threadGetRequest)
-      case errors: JsError => Left(new 
IllegalArgumentException(ResponseSerializer.serialize(errors).toString))
-    }
+    ThreadSerializer.deserializeChanges(invocation.arguments.value)
+      .asEither.left.map(ResponseSerializer.asException)
 }
diff --git 
a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/ThreadGetMethod.scala
 
b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/ThreadGetMethod.scala
index 13ea9d333a..85b8362384 100644
--- 
a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/ThreadGetMethod.scala
+++ 
b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/ThreadGetMethod.scala
@@ -20,7 +20,6 @@
 package org.apache.james.jmap.method
 
 import eu.timepit.refined.auto._
-import javax.inject.Inject
 import org.apache.james.jmap.core.CapabilityIdentifier.{CapabilityIdentifier, 
JMAP_CORE, JMAP_MAIL}
 import org.apache.james.jmap.core.Invocation.{Arguments, MethodName}
 import org.apache.james.jmap.core.{AccountId, Invocation, UuidState}
@@ -31,9 +30,9 @@ import 
org.apache.james.mailbox.exception.ThreadNotFoundException
 import org.apache.james.mailbox.model.{ThreadId => JavaThreadId}
 import org.apache.james.mailbox.{MailboxManager, MailboxSession}
 import org.apache.james.metrics.api.MetricFactory
-import play.api.libs.json.{JsError, JsSuccess}
 import reactor.core.scala.publisher.{SFlux, SMono}
 
+import javax.inject.Inject
 import scala.util.Try
 
 object ThreadGetResult {
@@ -78,10 +77,8 @@ class ThreadGetMethod @Inject()(val metricFactory: 
MetricFactory,
       .map(InvocationWithContext(_, invocation.processingContext))
 
   override def getRequest(mailboxSession: MailboxSession, invocation: 
Invocation): Either[IllegalArgumentException, ThreadGetRequest] =
-    ThreadSerializer.deserialize(invocation.arguments.value) match {
-      case JsSuccess(threadGetRequest, _) => Right(threadGetRequest)
-      case errors: JsError => Left(new 
IllegalArgumentException(ResponseSerializer.serialize(errors).toString))
-    }
+    ThreadSerializer.deserialize(invocation.arguments.value)
+      .asEither.left.map(ResponseSerializer.asException)
 
   private def getThreadResponse(threadGetRequest: ThreadGetRequest,
                                 mailboxSession: MailboxSession): 
SFlux[ThreadGetResult] =
diff --git 
a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/VacationResponseGetMethod.scala
 
b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/VacationResponseGetMethod.scala
index da59b105ff..0cee057042 100644
--- 
a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/VacationResponseGetMethod.scala
+++ 
b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/VacationResponseGetMethod.scala
@@ -20,8 +20,6 @@
 package org.apache.james.jmap.method
 
 import eu.timepit.refined.auto._
-
-import javax.inject.Inject
 import org.apache.james.jmap.core.CapabilityIdentifier.{CapabilityIdentifier, 
JMAP_CORE, JMAP_VACATION_RESPONSE}
 import org.apache.james.jmap.core.Invocation.{Arguments, MethodCallId, 
MethodName}
 import org.apache.james.jmap.core.UuidState.INSTANCE
@@ -32,11 +30,12 @@ import 
org.apache.james.jmap.vacation.VacationResponse.UNPARSED_SINGLETON
 import org.apache.james.jmap.vacation.{UnparsedVacationResponseId, 
VacationResponse, VacationResponseGetRequest, VacationResponseGetResponse, 
VacationResponseNotFound}
 import org.apache.james.mailbox.MailboxSession
 import org.apache.james.metrics.api.MetricFactory
-import org.apache.james.vacation.api.{AccountId => JavaAccountId}
-import org.apache.james.vacation.api.VacationService
-import play.api.libs.json.{JsError, JsObject, JsSuccess}
+import org.apache.james.vacation.api.{VacationService, AccountId => 
JavaAccountId}
+import play.api.libs.json.JsObject
 import reactor.core.scala.publisher.{SFlux, SMono}
 
+import javax.inject.Inject
+
 object VacationResponseGetResult {
   def empty: VacationResponseGetResult = VacationResponseGetResult(Set.empty, 
VacationResponseNotFound(Set.empty))
   def merge(result1: VacationResponseGetResult, result2: 
VacationResponseGetResult): VacationResponseGetResult = result1.merge(result2)
@@ -85,10 +84,8 @@ class VacationResponseGetMethod @Inject()(vacationService: 
VacationService,
   }
 
   override def getRequest(mailboxSession: MailboxSession, invocation: 
Invocation): Either[IllegalArgumentException, VacationResponseGetRequest] =
-    
VacationSerializer.deserializeVacationResponseGetRequest(invocation.arguments.value)
 match {
-      case JsSuccess(vacationResponseGetRequest, _) => 
Right(vacationResponseGetRequest)
-      case errors: JsError => Left(new 
IllegalArgumentException(ResponseSerializer.serialize(errors).toString))
-    }
+    
VacationSerializer.deserializeVacationResponseGetRequest(invocation.arguments.value)
+      .asEither.left.map(ResponseSerializer.asException)
 
   private def handleRequestValidationErrors(exception: Exception, 
methodCallId: MethodCallId): SMono[Invocation] = exception match {
     case _: MissingCapabilityException => 
SMono.just(Invocation.error(ErrorCode.UnknownMethod, methodCallId))
diff --git 
a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/VacationResponseSetMethod.scala
 
b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/VacationResponseSetMethod.scala
index 81fc9876bb..0eb3e03e1a 100644
--- 
a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/VacationResponseSetMethod.scala
+++ 
b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/VacationResponseSetMethod.scala
@@ -20,27 +20,27 @@
 package org.apache.james.jmap.method
 
 import eu.timepit.refined.auto._
-import javax.inject.{Inject, Named}
 import org.apache.james.events.Event.EventId
 import org.apache.james.events.EventBus
 import org.apache.james.jmap.InjectionKeys
 import org.apache.james.jmap.api.model.AccountId
 import org.apache.james.jmap.change.{AccountIdRegistrationKey, 
StateChangeEvent, VacationResponseTypeName}
 import org.apache.james.jmap.core.CapabilityIdentifier.{CapabilityIdentifier, 
JMAP_CORE, JMAP_VACATION_RESPONSE}
-import org.apache.james.jmap.core.{Invocation, UuidState}
 import org.apache.james.jmap.core.Invocation.{Arguments, MethodName}
 import org.apache.james.jmap.core.SetError.SetErrorDescription
+import org.apache.james.jmap.core.{Invocation, UuidState}
 import org.apache.james.jmap.json.{ResponseSerializer, VacationSerializer}
 import 
org.apache.james.jmap.method.VacationResponseSetMethod.VACATION_RESPONSE_PATCH_OBJECT_KEY
 import org.apache.james.jmap.routes.SessionSupplier
 import org.apache.james.jmap.vacation.{VacationResponseSetError, 
VacationResponseSetRequest, VacationResponseSetResponse, 
VacationResponseUpdateResponse}
 import org.apache.james.mailbox.MailboxSession
 import org.apache.james.metrics.api.MetricFactory
-import org.apache.james.vacation.api.{VacationPatch, VacationService}
-import org.apache.james.vacation.api.{AccountId => VacationAccountId}
-import play.api.libs.json.{JsError, JsObject, JsSuccess}
+import org.apache.james.vacation.api.{VacationPatch, VacationService, 
AccountId => VacationAccountId}
+import play.api.libs.json.JsObject
 import reactor.core.scala.publisher.{SFlux, SMono}
 
+import javax.inject.{Inject, Named}
+
 object VacationResponseUpdateResults {
   def empty(): VacationResponseUpdateResults = 
VacationResponseUpdateResults(Map(), Map())
 
@@ -97,10 +97,8 @@ class VacationResponseSetMethod 
@Inject()(@Named(InjectionKeys.JMAP) eventBus: E
   }
 
   override def getRequest(mailboxSession: MailboxSession, invocation: 
Invocation): Either[IllegalArgumentException, VacationResponseSetRequest] =
-    
VacationSerializer.deserializeVacationResponseSetRequest(invocation.arguments.value)
 match {
-      case JsSuccess(vacationResponseSetRequest, _) => 
Right(vacationResponseSetRequest)
-      case errors: JsError => Left(new 
IllegalArgumentException(ResponseSerializer.serialize(errors).toString))
-    }
+    
VacationSerializer.deserializeVacationResponseSetRequest(invocation.arguments.value)
+      .asEither.left.map(ResponseSerializer.asException)
 
   private def update(mailboxSession: MailboxSession, 
vacationResponseSetRequest: VacationResponseSetRequest): 
SMono[VacationResponseUpdateResults] = {
     SFlux.fromIterable(vacationResponseSetRequest.parsePatch()


---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscr...@james.apache.org
For additional commands, e-mail: notifications-h...@james.apache.org


Reply via email to