Sto cercando di unità di prova una chiamata di upload, ma ottengo questo errore per il seguente codice:No multipartconfig di errore servlet dal molo utilizzando 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'errore è:
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]
E questo è il mio test di unità, e il primo ha successo, quindi è trovare il mio webservice:
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
}
}
}
}
sono in esecuzione thi s all'interno di Eclipse e non sono sicuro di cosa stia succedendo.
Funziona perfettamente con l'utilizzo di HttpPost
e MultipartEntity
, quindi sembra che si tratti di un problema con Eclipse o di come funziona il framework di specifiche scalatra.
Qualche idea di cosa potrebbe andare storto?
Non ho un file web.xml separato.
Io uso solo pontile 8.1.10, come visto da quello che io uso in build.sbt:
"org.eclipse.jetty" % "pontile-webapp" % "8.1.10.v20130312 "% "contenitore"
,
Grazie. Come ho detto, quando lo avvio da sbt (semplice strumento di costruzione) funziona bene, come posso dire quando uso un test di junit che va al server web. Ma, quando provo a usare specs2, e presumo che sia dovuto a funzionare in Eclipse, non lo è. Non voglio apportare modifiche al programma per questo test unitario tanto quanto capire perché non funziona. –