コンパイル時にDIを使用してPlay Framework 2.5.12を使用していますが、Javaコントローラ(play-pac4jから)。コントローラは、次のエラーで失敗する使用:しばらく掘削後Play 2.5、Scala、コンパイル時DI:Javaコントローラを使用するとクラッシュするapp.requestHandlerはJavaCompatibleHttpRequestHandlerではありません
scala.MatchError: Right((play.core.routing.[email protected]635c42c6,[email protected])) (of class scala.util.Right)
at play.core.server.netty.PlayRequestHandler.handle(PlayRequestHandler.scala:93)
at play.core.server.netty.PlayRequestHandler.channelRead(PlayRequestHandler.scala:163)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:366)
、Iは#5357/#5631に実装で述べたように、application.requestHandler
デフォルトで使用していると想定される、JavaCompatibleHttpRequestHandlerを発見しました。これは実行時DIを使用する場合にのみ当てはまりますが、コンパイル時DIを使用しない場合はそうです:この場合はDefaultHttpRequestHandlerです。
これを小さな例で再現するために、私はplay-scala
とplay-scala-compile-di-with-tests
サンプルプロジェクトをとり、それぞれに単純なJavaコントローラを追加しました。 diffはhere for play-scala
とhere for play-scala-compile-di-with-tests
です。 sbt run
を使用してからcurl localhost:9000/hi
を使用すると、実行時DIで動作しますが、上記のエラーと同じエラーがコンパイル時に発生します。
Application
アセンブリ内に注入される
httpRequestHandler
をオーバーライドすることができると思い
override lazy val httpRequestHandler: HttpRequestHandler = wire[JavaCompatibleHttpRequestHandler]
しかし、私はタイプHttpFilters
とJavaHandlerComponents
の値を提供する必要があり、私はどのように取得するか分からない。