diff options
author | Li Haoyi <haoyi.sg@gmail.com> | 2018-08-12 23:10:39 +0800 |
---|---|---|
committer | Li Haoyi <haoyi.sg@gmail.com> | 2018-08-12 23:10:39 +0800 |
commit | 11f8fa2faaef68684a91716f6331a4e6e1463b3b (patch) | |
tree | 0bbe87d1b0cfd759f0fae0c8a0180ec0d78e5f16 | |
parent | c0f39d743fbdf07544a6f5b6284d7123e5c36296 (diff) | |
download | cask-11f8fa2faaef68684a91716f6331a4e6e1463b3b.tar.gz cask-11f8fa2faaef68684a91716f6331a4e6e1463b3b.tar.bz2 cask-11f8fa2faaef68684a91716f6331a4e6e1463b3b.zip |
support for java <9
-rw-r--r-- | cask/src/cask/internal/Util.scala | 15 | ||||
-rw-r--r-- | cask/src/cask/model/Params.scala | 8 | ||||
-rw-r--r-- | cask/src/cask/model/Response.scala | 4 | ||||
-rw-r--r-- | docs/pages/1 - Cask: a Scala HTTP micro-framework .md | 12 | ||||
-rw-r--r-- | example/minimalApplication/app/src/MinimalApplication.scala | 2 | ||||
-rw-r--r-- | example/minimalApplication2/app/src/MinimalApplication2.scala | 2 | ||||
-rw-r--r-- | example/todo/app/src/todo/TodoServer.scala | 2 | ||||
-rw-r--r-- | example/todoApi/app/src/TodoMvcApi.scala | 2 | ||||
-rw-r--r-- | example/todoDb/app/src/TodoMvcDb.scala | 2 | ||||
-rw-r--r-- | readme.md | 2 |
10 files changed, 36 insertions, 15 deletions
diff --git a/cask/src/cask/internal/Util.scala b/cask/src/cask/internal/Util.scala index 98c30c4..b4f33a8 100644 --- a/cask/src/cask/internal/Util.scala +++ b/cask/src/cask/internal/Util.scala @@ -1,11 +1,24 @@ package cask.internal -import java.io.{PrintWriter, StringWriter} +import java.io.{InputStream, PrintWriter, StringWriter} import scala.collection.generic.CanBuildFrom import scala.collection.mutable +import java.io.OutputStream object Util { + def transferTo(in: InputStream, out: OutputStream) = { + val buffer = new Array[Byte](8192) + + while ({ + in.read(buffer) match{ + case -1 => false + case n => + out.write(buffer, 0, n) + true + } + }) () + } def pluralize(s: String, n: Int) = { if (n == 1) s else s + "s" } diff --git a/cask/src/cask/model/Params.scala b/cask/src/cask/model/Params.scala index 901cca4..27c1a68 100644 --- a/cask/src/cask/model/Params.scala +++ b/cask/src/cask/model/Params.scala @@ -1,8 +1,9 @@ package cask.model -import java.io.InputStream +import java.io.{ByteArrayOutputStream, InputStream} import cask.endpoints.ParamReader.NilParam +import cask.internal.Util import io.undertow.server.HttpServerExchange import io.undertow.server.handlers.CookieImpl @@ -17,6 +18,11 @@ case class Request(exchange: HttpServerExchange){ exchange.getRequestCookies.asScala.mapValues(Cookie.fromUndertow).toMap } lazy val data: InputStream = exchange.getInputStream + def readAllBytes() = { + val baos = new ByteArrayOutputStream() + Util.transferTo(data, baos) + baos.toByteArray + } lazy val queryParams: Map[String, Seq[String]] = { exchange.getQueryParameters.asScala.mapValues(_.asScala.toArray.toSeq).toMap } diff --git a/cask/src/cask/model/Response.scala b/cask/src/cask/model/Response.scala index 15f46a7..979c442 100644 --- a/cask/src/cask/model/Response.scala +++ b/cask/src/cask/model/Response.scala @@ -2,6 +2,8 @@ package cask.model import java.io.{InputStream, OutputStream, OutputStreamWriter} +import cask.internal.Util + trait Response{ def data: Response.Data @@ -31,7 +33,7 @@ object Response{ def write(out: OutputStream) = out.write(b) } implicit class StreamData(b: InputStream) extends Data{ - def write(out: OutputStream) = b.transferTo(out) + def write(out: OutputStream) = Util.transferTo(b, out) } implicit def JsonResponse[T: upickle.default.Writer](t: T) = new Data{ def write(out: OutputStream) = implicitly[upickle.default.Writer[T]].write( diff --git a/docs/pages/1 - Cask: a Scala HTTP micro-framework .md b/docs/pages/1 - Cask: a Scala HTTP micro-framework .md index 22d879e..0b45154 100644 --- a/docs/pages/1 - Cask: a Scala HTTP micro-framework .md +++ b/docs/pages/1 - Cask: a Scala HTTP micro-framework .md @@ -7,7 +7,7 @@ object MinimalApplication extends cask.MainRoutes{ @cask.post("/do-thing") def doThing(request: cask.Request) = { - new String(request.data.readAllBytes()).reverse + new String(request.readAllBytes()).reverse } initialize() @@ -92,7 +92,7 @@ object MinimalApplication extends cask.MainRoutes{ @cask.post("/do-thing") def doThing(request: cask.Request) = { - new String(request.data.readAllBytes()).reverse + new String(request.readAllBytes()).reverse } initialize() @@ -136,7 +136,7 @@ object MinimalRoutes extends cask.Routes{ @cask.post("/do-thing") def doThing(request: cask.Request) = { - new String(request.data.readAllBytes()).reverse + new String(request.readAllBytes()).reverse } initialize() @@ -543,7 +543,7 @@ object TodoMvcApi extends cask.MainRoutes{ @cask.post("/add") def add(request: cask.Request) = { - todos = Seq(Todo(false, new String(request.data.readAllBytes()))) ++ todos + todos = Seq(Todo(false, new String(request.readAllBytes()))) ++ todos } @cask.post("/toggle/:index") @@ -637,7 +637,7 @@ object TodoMvcDb extends cask.MainRoutes{ @transactional @cask.post("/add") def add(request: cask.Request) = { - val body = new String(request.data.readAllBytes()) + val body = new String(request.readAllBytes()) run(query[Todo].insert(_.checked -> lift(false), _.text -> lift(body)).returning(_.id)) } @@ -748,7 +748,7 @@ object Server extends cask.MainRoutes{ @transactional @cask.post("/add/:state") def add(state: String, request: cask.Request) = { - val body = new String(request.data.readAllBytes()) + val body = new String(request.readAllBytes()) run(query[Todo].insert(_.checked -> lift(false), _.text -> lift(body)).returning(_.id)) renderBody(state).render } diff --git a/example/minimalApplication/app/src/MinimalApplication.scala b/example/minimalApplication/app/src/MinimalApplication.scala index 5357e64..e3b1eff 100644 --- a/example/minimalApplication/app/src/MinimalApplication.scala +++ b/example/minimalApplication/app/src/MinimalApplication.scala @@ -7,7 +7,7 @@ object MinimalApplication extends cask.MainRoutes{ @cask.post("/do-thing") def doThing(request: cask.Request) = { - new String(request.data.readAllBytes()).reverse + new String(request.readAllBytes()).reverse } initialize() diff --git a/example/minimalApplication2/app/src/MinimalApplication2.scala b/example/minimalApplication2/app/src/MinimalApplication2.scala index 01b4aa5..e537ea6 100644 --- a/example/minimalApplication2/app/src/MinimalApplication2.scala +++ b/example/minimalApplication2/app/src/MinimalApplication2.scala @@ -8,7 +8,7 @@ object MinimalRoutes extends cask.Routes{ @cask.post("/do-thing") def doThing(request: cask.Request) = { - new String(request.data.readAllBytes()).reverse + new String(request.readAllBytes()).reverse } initialize() diff --git a/example/todo/app/src/todo/TodoServer.scala b/example/todo/app/src/todo/TodoServer.scala index 0c66895..6ae7ee9 100644 --- a/example/todo/app/src/todo/TodoServer.scala +++ b/example/todo/app/src/todo/TodoServer.scala @@ -53,7 +53,7 @@ object TodoServer extends cask.MainRoutes{ @transactional @cask.post("/add/:state") def add(state: String, request: cask.Request) = { - val body = new String(request.data.readAllBytes()) + val body = new String(request.readAllBytes()) run(query[Todo].insert(_.checked -> lift(false), _.text -> lift(body)).returning(_.id)) renderBody(state).render } diff --git a/example/todoApi/app/src/TodoMvcApi.scala b/example/todoApi/app/src/TodoMvcApi.scala index 3559f28..58df1d5 100644 --- a/example/todoApi/app/src/TodoMvcApi.scala +++ b/example/todoApi/app/src/TodoMvcApi.scala @@ -21,7 +21,7 @@ object TodoMvcApi extends cask.MainRoutes{ @cask.post("/add") def add(request: cask.Request) = { - todos = Seq(Todo(false, new String(request.data.readAllBytes()))) ++ todos + todos = Seq(Todo(false, new String(request.readAllBytes()))) ++ todos } @cask.post("/toggle/:index") diff --git a/example/todoDb/app/src/TodoMvcDb.scala b/example/todoDb/app/src/TodoMvcDb.scala index 72e20bd..c566b60 100644 --- a/example/todoDb/app/src/TodoMvcDb.scala +++ b/example/todoDb/app/src/TodoMvcDb.scala @@ -64,7 +64,7 @@ object TodoMvcDb extends cask.MainRoutes{ @transactional @cask.post("/add") def add(request: cask.Request) = { - val body = new String(request.data.readAllBytes()) + val body = new String(request.readAllBytes()) run(query[Todo].insert(_.checked -> lift(false), _.text -> lift(body)).returning(_.id)) } @@ -10,7 +10,7 @@ object MinimalApplication extends cask.MainRoutes{ @cask.post("/do-thing") def doThing(request: cask.Request) = { - new String(request.data.readAllBytes()).reverse + new String(request.readAllBytes()).reverse } initialize() |