2016-07-01 22 views
3

Ich versuche, einen Protokollfilter zu erstellen, basierend auf Play documentation, aber ich kann nicht herausfinden, was vor sich geht.Fehler beim Einfügen von Konstruktor, java.lang.ClassCastException: Play 2.5.4 - Scala

Ich habe Thios Fehlermeldung:

unerwartete Ausnahme ProvisionException: Kann nicht Bereitstellung finden Sie in den folgende Fehler:

1) Fehler Injektion Konstruktor java.lang.ClassCastException: [Ljava. lang.Objekt; kann nicht in [Lplay.mvc.EssentialFilter; bei Filter (Filters.scala: 11). beim Positionieren Filters während play.http.HttpFilters Parameter für 0 bei play.api.http.JavaHttpFiltersAdapter lokalisieren. (HttpFilters.scala: 63)
während play.api lokalisieren. . http.JavaHttpFiltersAdapter während play.api.http.HttpFilters für Parameter 3 bei play.api.http.JavaCompatibleHttpRequestHandler Ortung (HttpRequestHandler.scala: 200), während play.api.http.JavaCompatibleHttpRequestHandler Lokalisieren während play.api lokalisieren. http.HttpRequestHandler für Parameter 4 bei play.api.DefaultApplication. (Application.scala: 221) um play.api.DefaultApplication.class (Application.scala: 221) während Ortung p lay.api.DefaultApplication während Ortung play.api.Application

1 Fehler

Aber mein LoggingFilter erstreckt EssentialFilter (I in der Dokumentation Code kopiert). Muss ich etwas für Guice binden?

Hier mein built.sbt:

name := """abc""" 

version := "1.0-SNAPSHOT" 

lazy val root = (project in file(".")).enablePlugins(PlayScala) 

scalaVersion := "2.11.8" 

libraryDependencies ++= Seq(
    jdbc, 
    cache, 
    ws, 
    filters, 
    "org.scalatestplus.play" %% "scalatestplus-play" % "1.5.1" % Test, 
    "org.webjars" %% "webjars-play" % "2.5.0", 
    "org.webjars" % "react" % "0.13.1" 
) 

resolvers += "scalaz-bintray" at "http://dl.bintray.com/scalaz/releases" 

routesGenerator := InjectedRoutesGenerator 

Hier mein plugins.sbt:

// The Typesafe repository 
resolvers += "Typesafe repository" at "https://repo.typesafe.com/typesafe/releases/" 

// Eclpise Plugin 
addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "4.0.0") 

// The Play plugin 
addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.5.4") 

// web plugins 

addSbtPlugin("com.typesafe.sbt" % "sbt-coffeescript" % "1.0.0") 

addSbtPlugin("com.typesafe.sbt" % "sbt-less" % "1.1.0") 

addSbtPlugin("com.typesafe.sbt" % "sbt-jshint" % "1.0.3") 

addSbtPlugin("com.typesafe.sbt" % "sbt-rjs" % "1.0.7") 

addSbtPlugin("com.typesafe.sbt" % "sbt-digest" % "1.1.0") 

addSbtPlugin("com.typesafe.sbt" % "sbt-mocha" % "1.1.0") 

addSbtPlugin("org.irundaia.sbt" % "sbt-sassify" % "1.4.2") 

// transform JSX assets to js 
addSbtPlugin("com.github.ddispaltro" % "sbt-reactjs" % "0.5.0") 
+0

Haben Sie setzen Sie Ihre Klasse in der Root-Paket? Wenn nicht, sollten Sie dies in Ihrem conf hinzufügen: 'play.http.filters = com.example.MyFilters'. Überprüfen Sie auch, ob Ihre Importe korrekt sind. –

+0

Ja, insan-e, ich habe das selbe gemacht, was in doc: "play.http.filters = Filter" in der application.conf & "Filter" -Klasse in App/Ordner erklärt wurde. –

+0

Ich habe auch dieses Problem.Ich benutze Java und ich habe genau die Dokumentation gefolgt – vizog

Antwort

3

Es sieht wie folgt aus ist ein Fehler in den Konstruktor der DefaultHttpFilters Klasse. Der Fehler ist in 2.5.4 vorhanden und wird im 2.5.5-Meilenstein behoben, der noch nicht verfügbar ist und kein Fälligkeitsdatum hat. Ich möchte auch einen Workaround dafür haben.

URL auf die Frage: https://github.com/playframework/playframework/pull/6238

2

Ich weiß nicht, ob dies jemand von euch mit diesem Problem helfen. Aber ich habe meinen CORSFilter zur Arbeit gebracht. (Wiedergabe 2.5.4)

import com.google.inject.Inject; 
import play.http.HttpFilters; 
import play.mvc.EssentialAction; 
import play.mvc.EssentialFilter; 
import play.filters.cors.CORSFilter; 

public class MyFilters extends EssentialFilter implements HttpFilters { 

    @Inject 
    private CORSFilter corsFilter; 


    @Override 
    public EssentialAction apply(EssentialAction next) { 
     return corsFilter.asJava().apply(next); 
    } 

    @Override 
    public EssentialFilter[] filters() { 
     EssentialFilter[] result = new EssentialFilter[1]; 
     result[0] = this; 

     return result; 
    } 
} 

hinzugefügt Auch diese in den application.conf

play.filters.cors{ 
# allow all paths 
    pathPrefixes = ["/"] 
    # allow all origins 
    allowedOrigins = null 
    allowedHttpMethods = ["GET", "POST", "PUT", "DELETE"] 
    # allow all headers 
    allowedHttpHeaders = null 
} 
0
@Singleton 
public class Filters implements HttpFilters { 

    private final Environment env; 
    private final CORSFilter corsFilter; 

    @Inject 
    public Filters(Environment env, CORSFilter corsFilter) { 
     this.env = env; 
     this.corsFilter = corsFilter; 
    } 

    @Override 
    public EssentialFilter[] filters() { 
     return new EssentialFilter[] { corsFilter.asJava() }; 
    } 

} 

der Punkt ist: corsFilter.asJava()