Utilisation de filtres avec un serveur Grizzly exécutant un service Jersey REST
Question
J'essaie d'utiliser Grizzly pour créer un serveur permettant d'exécuter un service REST que j'ai développé à l'aide de Jersey. Je crée le serveur Grizzly en utilisant:
final String baseUri = "http://localhost:9998/";
final Map<String, String> initParams = new HashMap<String, String>();
initParams.put("com.sun.jersey.config.property.packages", "me.my.rest.package");
SelectorThread threadSelector =
GrizzlyWebContainerFactory.create(baseUri, initParams);
comme tous les exemples que j'ai trouvés semblent suggérer. C'est bien, le serveur démarre et peut transférer les demandes entrantes vers mes classes de ressources.
Cependant, l'implémentation du service nécessite l'utilisation d'un filtre de servlet. Il semble que Grizzly prenne en charge la définition des filtres et d’autres options de configuration similaires liées aux servlets, via la classe ServletAdapter
. Mon problème est que je ne sais pas comment définir un filtre avec un com.sun.jersey.api.container.grizzly.GrizzlyWebContainerFactory
fournissant l'intégration de Jersey.
Des idées?
La solution
Je pense que je pourrais avoir quelque chose pour vous ...
GrizzlyWebServer ws = new GrizzlyWebServer(9999);
ServletAdapter jerseyServletAdapter = new ServletAdapter();
jerseyServletAdapter.setServletInstance(new ServletContainer());
jerseyServletAdapter.addInitParameter(
"com.sun.jersey.config.property.packages", "me.my.rest.package");
jerseyServletAdapter.setServletPath("/api");
// HERE IS HOW YOU ADD A FILTER
jerseyServletAdapter.addFilter(new MyFilter(), "HibernateSessionFilter", null);
ws.addGrizzlyAdapter(jerseyServletAdapter, null);
... ça marche pour moi, j'espère que ça vous aidera aussi.
Autres conseils
Avez-vous essayé:
((ServletAdapter) threadSelector.getAdapter()).addFilter()