From 11f8fa2faaef68684a91716f6331a4e6e1463b3b Mon Sep 17 00:00:00 2001 From: Li Haoyi Date: Sun, 12 Aug 2018 23:10:39 +0800 Subject: support for java <9 --- cask/src/cask/internal/Util.scala | 15 ++++++++++++++- cask/src/cask/model/Params.scala | 8 +++++++- cask/src/cask/model/Response.scala | 4 +++- 3 files changed, 24 insertions(+), 3 deletions(-) (limited to 'cask') 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( -- cgit v1.2.3