2015-04-01 5 views
14

Ich habe versucht, das neue CorsFilter zu verwenden, das in Rasteasy 3.0.9 verfügbar ist. Ich fand ein Beispiel am unteren Rand dieser Seite: Ajax request with JAX-RS/RESTEasy implementing CORSProbleme Resteasy 3.09 CorsFilter

Wenn ich diesen Filter in der getSingletons() Methode definieren (der Application Unterklasse), dann werden meine Ressourcen nicht mehr gescannt bekommen. Das bedeutet, dass keine Ressourcen gefunden werden und der folgende Fehler auftritt: javax.ws.rs.NotFoundException: Could not find resource for full path Error Occures

Aber im Grunde, was diese:

javax.ws.rs.NotFoundException: Could not find resource for full path Error Occures

Auf der folgenden Seite i eine Beschreibung gefunden Die Bereitstellungsoption sucht nach Annotationen von @Path, @Provider usw. für die Anwendung. Der Grund dafür ist, dass JAX-RS zuerst nach Klassen und Objekten in überschriebenen getClasses() bzw. getSingletons() sucht. Wenn Sie dann leere Sätze zurücksenden, sagen Sie JAX-RS, dass Sie scannen (laut Spezifikation).

So JAX-RS tun kein Scannen, wenn ich die getSingletons() Methode überschreiben? Gibt es eine andere Möglichkeit, diese CorsFilter zu konfigurieren und den Ressourcen-Scan zu aktivieren?

Antwort

24

"Gibt es eine andere Möglichkeit, diesen CorsFilter zu konfigurieren und den Ressourcen-Scan zu aktivieren?"

Eine Möglichkeit, das Scannen zu halten, ist nur eine javax.ws.rs.core.Feature

import javax.ws.rs.core.Feature; 
import javax.ws.rs.core.FeatureContext; 
import javax.ws.rs.ext.Provider; 
import org.jboss.resteasy.plugins.interceptors.CorsFilter; 

@Provider 
public class CorsFeature implements Feature { 

    @Override 
    public boolean configure(FeatureContext context) { 
     CorsFilter corsFilter = new CorsFilter(); 
     corsFilter.getAllowedOrigins().add("*"); 
     context.register(corsFilter); 
     return true; 
    } 
} 

Diese Funktion ist wie alle anderen @Provider s und @Path s abgetastet wird erhalten zu implementieren.

-Test mit nur

@ApplicationPath("/api") 
public class RestApplication extends Application { 
} 

C:\>curl -i http://localhost:8080/api/simple -H "Origin:stackoverflow.com" HTTP/1.1 200 OK Date: Wed, 01 Apr 2015 12:07:22 GMT Access-Control-Allow-Credentials: true Access-Control-Allow-Origin: stackoverflow.com Content-Type: application/octet-stream Content-Length: 15 Server: Jetty(9.2.4.v20141103)

Hello Response!

Verwandte Themen