web-dev-qa-db-fra.com

Problèmes Resteasy 3.09 CorsFilter

J'ai essayé d'utiliser le nouveau CorsFilter qui est disponible dans Resteasy 3.0.9. J'ai trouvé un exemple en bas de cette page: requête Ajax avec JAX-RS/RESTEasy implémentant CORS

Si je définis ce filtre dans la méthode getSingletons() (de la sous-classe Application), mes ressources ne sont plus analysées. Cela signifie qu'aucune ressource ne sera trouvée et l'erreur suivante se produit:

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

Sur la page suivante, j'ai trouvé une description: javax.ws.rs.NotFoundException: impossible de trouver la ressource pour le chemin complet Une erreur se produit

Mais en gros, ce que cette option de déploiement fait, c'est rechercher les annotations de @Path, @Provider, etc. pour l'application. La raison en est que JAX-RS recherchera d'abord les classes et les objets dans getClasses () et getSingletons () substitués, respectivement. Si ensuite renvoyez des ensembles vides, cela indique à JAX-RS de faire un balayage (selon les spécifications).

Donc JAX-RS ne fait pas de scan si j'écrase la méthode getSingletons()? Existe-t-il un autre moyen de configurer ce CorsFilter et d'activer l'analyse des ressources`?

16
puzste

"Existe-t-il un autre moyen de configurer ce CorsFilter et d'activer l'analyse des ressources?"

Une façon de conserver la numérisation consiste simplement à implémenter un 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;
    }  
}

Cette fonction sera analysée comme tous les autres @Provider Et @Path S.

Testez avec seulement

@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!

31
Paul Samsotha