次のような ScalatraServlet があります。
class MyServlet extends ScalatraServlet with FutureSupport with GZipSupport with JacksonJsonSupport {
..
}
実行すると、次のようになります。
java.lang.IllegalStateException: STREAM
また、ScalatraBootstrap に次のように突堤フィルターを追加しようとしました。
val gzip = context.addFilter("gzip-responses", classOf[NicsGzipFilter])
gzip.setInitParameter("mimeTypes", "text/html,text/plain,text/xml,application/json,application/xml,application/xhtml+xml,text/css,application/javascript,image/svg+xml")
gzip.setInitParameter("minGzipSize", "1") // TODO for testing only. Remove before committing
gzip.addMappingForUrlPatterns(java.util.EnumSet.allOf(classOf[DispatcherType]), true, "/*")
gzip.setAsyncSupported(true) // not sure if this is required?
この場合、応答は得られますが、gzip されません (ただし、vary エンコーディング ヘッダーが追加されるため、jetty フィルターは確実に実行されます)。
ここで報告されているのと同じエラーが発生しているようです: ScalatraServlet with AkkaSupport with GZipSupport。そのため、バグが修正されたようには見えません。
機能しない理由についての別の提案がここで行われました: https://github.com/scalatra/scalatra/issues/247#issuecomment-12219667。Scalatra が同じ応答内でライターと出力ストリームを使用して出力を呼び出していることが示唆されていますが、これは許可されていません。
任意のヒント?
ありがとう。