Skip to content

Commit fcb0c93

Browse files
committed
Add mid stream error handling and RestServletTest
1 parent 32495d0 commit fcb0c93

File tree

4 files changed

+365
-8
lines changed

4 files changed

+365
-8
lines changed

project/Dependencies.scala

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ object Dependencies {
3737
val svg4everybodyVersion = "2.1.9"
3838

3939
val scalatestVersion = "3.2.19"
40+
val mockitoVersion = "1.17.37"
4041
val scalaJsSecureRandomVersion = "1.0.0" // Tests only
4142
val bootstrap4Version = "4.1.3"
4243
val bootstrap4DatepickerVersion = "5.39.0"
@@ -115,6 +116,7 @@ object Dependencies {
115116
"com.typesafe.scala-logging" %% "scala-logging" % scalaLoggingVersion,
116117
"org.eclipse.jetty" % "jetty-server" % jettyVersion % Test,
117118
"org.eclipse.jetty.ee8" % "jetty-ee8-servlet" % jettyVersion % Test,
119+
"org.mockito" %% "mockito-scala-scalatest" % mockitoVersion % Test,
118120
))
119121

120122
val restSjsDeps = restCrossDeps

rest/.jvm/src/main/scala/io/udash/rest/RestServlet.scala

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,10 @@ object RestServlet {
2828
/**
2929
* Wraps an implementation of some REST API trait into a Java Servlet.
3030
*
31-
* @param apiImpl implementation of some REST API trait
32-
* @param handleTimeout maximum time the servlet will wait for results returned by REST API implementation
33-
* @param maxPayloadSize maximum acceptable incoming payload size, in bytes;
34-
* if exceeded, `413 Payload Too Large` response will be sent back
31+
* @param apiImpl implementation of some REST API trait
32+
* @param handleTimeout maximum time the servlet will wait for results returned by REST API implementation
33+
* @param maxPayloadSize maximum acceptable incoming payload size, in bytes;
34+
* if exceeded, `413 Payload Too Large` response will be sent back
3535
* @param defaultStreamingBatchSize default batch when streaming [[StreamedBody.JsonList]]
3636
*/
3737
@explicitGenerics def apply[RestApi: RawRest.AsRawRpc : RestMetadata](
@@ -59,7 +59,7 @@ class RestServlet(
5959
scheduler: Scheduler
6060
) extends HttpServlet with LazyLogging {
6161

62-
import RestServlet._
62+
import RestServlet.*
6363

6464
override def service(request: HttpServletRequest, response: HttpServletResponse): Unit = {
6565
val asyncContext = request.startAsync()
@@ -159,6 +159,9 @@ class RestServlet(
159159
})
160160
.map(_ => response.getOutputStream.write("]".getBytes(jsonList.charset)))
161161
}
162+
}.onErrorHandle { e =>
163+
logger.error(e.getMessage)
164+
response.getOutputStream.close()
162165
}
163166

164167
private def writeResponseBody(response: HttpServletResponse, rr: AbstractRestResponse): Task[Unit] =
@@ -178,7 +181,7 @@ class RestServlet(
178181
private def writeResponse(response: HttpServletResponse, restResponse: RestResponse): Unit = {
179182
setResponseHeaders(response, restResponse.code, restResponse.headers)
180183
restResponse.body match {
181-
case HttpBody.Empty =>
184+
case HttpBody.Empty =>
182185
case neBody: HttpBody.NonEmpty => writeNonEmptyBody(response, neBody)
183186
}
184187
}

0 commit comments

Comments
 (0)