2017-02-03 7 views
0

コンパイル時に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-scalaplay-scala-compile-di-with-testsサンプルプロジェクトをとり、それぞれに単純なJavaコントローラを追加しました。 diffはhere for play-scalahere for play-scala-compile-di-with-testsです。 sbt runを使用してからcurl localhost:9000/hiを使用すると、実行時DIで動作しますが、上記のエラーと同じエラーがコンパイル時に発生します。

私は(私はMacWireを使用しています)私のコンポーネントで Applicationアセンブリ内に注入される httpRequestHandlerをオーバーライドすることができると思い

override lazy val httpRequestHandler: HttpRequestHandler = wire[JavaCompatibleHttpRequestHandler] 

しかし、私はタイプHttpFiltersJavaHandlerComponentsの値を提供する必要があり、私はどのように取得するか分からない。

答えて

0

オフラインプレイヤーの一部と話をした後、ScalaプレイアプリケーションでJavaコントローラを使用するのはかなりエキゾチックなことです。 JavaCompatibleHttpRequestHandlerを作成することは確かに可能ですが、(Scalaプレイアプリケーションで)かなりのJavaプレイ機能をインスタンス化する必要があります。

play-pac4j README.mdのScalaの例では、Javaコントローラが不幸に使用されています。代わりにplay-pac4jを使わずにpac4jと直接電話することができます。

関連する問題