2017-09-25 3 views
0

Die Dokumentation zu RESTEasy besagt, dass Sie zusätzlich zur Annotation Ihres Serverendpunkts mit der Annotation "@GZIP" eine Datei namens "javax.ws.rs.ext.Providers" im Klassenpfad Ihrer Laufzeitumgebung erstellen müssen Fügen Sie den Klassennamen "org.jboss.resteasy.plugins.interceptors.encoding.GZIPEncodingInterceptor" in die Datei ein.RESTEasy GZIP-Unterstützung aktivieren?

Ich habe alle der oben genannten, aber die Antwort vom Server zurück kommt ist nicht komprimiert, obwohl die Antwort "Content-Encoding" Header ist "gzip" (dh der Antworttext ist Klartext/Json, trotz was der Header sagt).

Die Datei javax.ws.rs.ext.Providers befindet sich definitiv in meinem Ordner WEB-INF/classes im .war- und im App-Ordner, wenn sie auf Tomcat bereitgestellt wird, aber RESTEasy ignoriert sie.

Also, gibt es etwas, das ich vermisse? Hat jemand das funktioniert?

EDIT: Okay, ich entdeckte, dass RESTEasy tatsächlich den vollständigen Pfad "META-INF/services/javax.ws.rs.ext.Providers" sucht, also musste ich diesen Ordnerpfad plus Datei in meinem erstellen Ressourcenordner. Und ja, das ist verwirrend, da es im WAR-Archiv bereits einen META-INF-Ordner gibt; Das Einfügen des Unterverzeichnisses "services" und der Datei "javax.ws.rs.ext.Providers" in diesen META-INF-Ordner funktioniert jedoch NICHT. Seufzer.

+0

Haben Sie einen Paket-Sniffer verwendet, um festzustellen, dass dieser nicht komprimiert ist? – Namphibian

+0

Ja, ich habe TCPMon verwendet, um den Datenverkehr zu untersuchen und festgestellt, dass der Datenverkehr unkomprimiertes JSON war, obwohl der HTTP-Header behauptet, dass es gzip ist. –

Antwort

2

Ich habe es funktioniert & Ich hoffe, das wird Ihnen bei der Auflösung der gleichen helfen. Der Trick besteht darin, dies innerhalb der WEB-INF/Klassen zu haben. Was ich tat, war javax.ws.rs.ext.Providers in der Lage zu haben: /WEB-INF/classes/META-INF/services & voila arbeiten fing es an.

Der Grund dafür ist, mit der Classloader-Referenz zu tun, die es im Code hat, der versucht, nach dieser Datei zu suchen. Ich benutze Kater. Wenn Sie jedoch JBoss oder eine andere Anwendung/einen anderen Webserver verwenden, können die Mechanismen zum Laden von Klassen je nach Implementierung des Containers variieren. Finde heraus, welches der beste Ort für deinen Server ist.