从scalatra docs运行scalatra specs2示例时出现此异常:
ThrowableException: org.eclipse.jetty.http.HttpGenerator.flushBuffer()I (FutureTask.java:138)
这是测试代码(从第5行开始,跳过导入):
class MyAppTest extends MutableScalatraSpec {
addServlet(classOf[MyApp], "/*")
"GET / on AdminApp" should {
"return status 200" in {
get("/") {
status must_== 200
}
}
}
}
以下是应用定义:
class MyApp extends ScalatraServlet {
get("/") {
"aloha"
}
}
我正在使用scalatra-specs2 2.0.4和scala 2.9.1。我使用xsbt-web-plugin 0.2.10和sbt 0.11.2运行嵌入式jetty服务器。测试是使用sbt test
执行的。
以下是完整的跟踪:
[info] GET / on AdminApp should
[error] ! Fragment evaluation error
[error] ThrowableException: org.eclipse.jetty.http.HttpGenerator.flushBuffer()I (FutureTask.java:138)
[error] org.eclipse.jetty.testing.HttpTester.generate(HttpTester.java:225)
[error] org.scalatra.test.ScalatraTests$class.submit(ScalatraTests.scala:46)
[error] com.example.MyAppTest.submit(MyAppTest.scala:5)
[error] org.scalatra.test.ScalatraTests$class.submit(ScalatraTests.scala:71)
[error] com.example.MyAppTest.submit(MyAppTest.scala:5)
[error] org.scalatra.test.ScalatraTests$class.get(ScalatraTests.scala:127)
[error] com.example.MyAppTest.get(MyAppTest.scala:5)
[error] com.example.MyAppTest$$anonfun$1$$anonfun$apply$3.apply(MyAppTest.scala:10)
[error] com.example.MyAppTest$$anonfun$1$$anonfun$apply$3.apply(MyAppTest.scala:10)
[error] org.eclipse.jetty.http.HttpGenerator.flushBuffer()I
[error] org.eclipse.jetty.testing.HttpTester.generate(HttpTester.java:225)
[error] org.scalatra.test.ScalatraTests$class.submit(ScalatraTests.scala:46)
[error] com.example.MyAppTest.submit(MyAppTest.scala:5)
[error] org.scalatra.test.ScalatraTests$class.submit(ScalatraTests.scala:71)
[error] com.example.MyAppTest.submit(MyAppTest.scala:5)
[error] org.scalatra.test.ScalatraTests$class.get(ScalatraTests.scala:127)
[error] com.example.MyAppTest.get(MyAppTest.scala:5)
[error] com.example.MyAppTest$$anonfun$1$$anonfun$apply$3.apply(MyAppTest.scala:10)
[error] com.example.MyAppTest$$anonfun$1$$anonfun$apply$3.apply(MyAppTest.scala:10)
这是迄今为止唯一出现的搜索结果: Fragment Evaluation Error
有人能指出我正确的方向吗?
谢谢, -f
答案 0 :(得分:1)
仍然不确定根本原因,但是在将jetty-webapp从8.0.3.v20111011回滚到7.6.0.v20120127之后测试成功执行。
答案 1 :(得分:0)
您的依赖项可能存在冲突,更具体地说是Jetty库版本。由于HttpGenerator
上的“flush”方法在Jetty 6和Jetty 7之间发生了变化,你可能会得到一个“NoSuchMethodFoundError”来解释奇怪的“org.eclipse.jetty.http.HttpGenerator.flushBuffer()I”签名在异常消息中。
这也解释了为什么你会得到一个“片段评估错误”而不是正常的失败,如你提到的链接中所述。
如果您使用最新的specs2-1.10-SNAPSHOT,那么当发生这种情况时,您会收到更好的消息“片段评估错误”,显示“NoSuchMethodError”。这将有助于您更快地诊断问题。