Tôi cố gắng để đơn vị kiểm tra cuộc gọi upload nhưng tôi nhận được lỗi này cho đoạn mã sau:Không multipartconfig cho lỗi servlet từ Jetty sử dụng scalatra
@MultipartConfig(maxFileSize = 3145728)
class WebServlet extends ScalatraServlet with FileUploadSupport {
override def isSizeConstraintException(e: Exception) = e match {
case se: ServletException if se.getMessage.contains("exceeds max filesize") ||
se.getMessage.startsWith("Request exceeds maxRequestSize") => true
case _ => false
}
error {
case e: SizeConstraintExceededException => RequestEntityTooLarge("too much!")
}
post("/uploadscript") {
val privateParam = try {params("private") != null && params("private").equals("true") } catch { case _ => false }
println("privateParam = " + privateParam)
val file = fileParams("file")
println(s"The size of the file is ${file.size}")
}
Lỗi này là:
java.lang.IllegalStateException: No multipart config for servlet
at org.eclipse.jetty.server.Request.getParts(Request.java:2064) ~[jetty-server-8.1.10.v20130312.jar:8.1.10.v20130312]
at org.scalatra.servlet.FileUploadSupport$class.getParts(FileUploadSupport.scala:133) ~[scalatra_2.10-2.2.1.jar:2.2.1]
at org.scalatra.servlet.FileUploadSupport$class.extractMultipartParams(FileUploadSupport.scala:108) ~[scalatra_2.10-2.2.1.jar:2.2.1]
at org.scalatra.servlet.FileUploadSupport$class.handle(FileUploadSupport.scala:79) ~[scalatra_2.10-2.2.1.jar:2.2.1]
at com.ui.WebServlet.handle(WebServlet.scala:32) ~[classes/:na]
Và đây là bài kiểm tra đơn vị của tôi, và là người đầu tiên thành công, vì vậy nó được tìm webservice của tôi:
class WebServletSpecification extends MutableScalatraSpec {
addServlet(classOf[WebServlet], "/*")
"GET /hello" should {
"return status 200" in {
get("/hello/testcomputer") {
status must_== 200
}
}
}
"POST /uploadscript" should {
"return status 200" in {
val scriptfile = "testfile"
val scriptname = "basescript"
post("/uploadscript", Map("private" -> "true"), Map("file" -> new File(scriptfile))) {
status must_== 200
}
}
}
}
tôi đang chạy thi bên trong Eclipse và tôi không chắc chắn những gì đang xảy ra.
Nó hoạt động tốt với việc sử dụng HttpPost
và MultipartEntity
do đó có vẻ như là một vấn đề với Eclipse hoặc cách hoạt động của khung công tác đặc tả scalatra.
Bất kỳ ý tưởng nào có thể xảy ra sai?
Tôi không có tệp web.xml riêng.
Tôi chỉ sử dụng cầu cảng 8.1.10, như đã thấy từ những gì tôi sử dụng trong build.sbt:
"org.eclipse.jetty" % "cầu cảng-webapp" % "8.1.10.v20130312 "% "container"
,
Cảm ơn bạn. Như tôi đã đề cập, khi tôi bắt đầu nó từ sbt (công cụ xây dựng đơn giản) nó hoạt động tốt, như tôi có thể nói khi tôi sử dụng một bài kiểm tra junit đi đến máy chủ web. Nhưng, khi tôi cố gắng sử dụng specs2, và tôi cho rằng nó là do chạy trong Eclipse, nó không phải là. Tôi không muốn thay đổi chương trình cho bài kiểm tra đơn vị này nhiều như hiểu tại sao nó không hoạt động. –