2013-11-03 11 views
8

में जीजेआईपी एन्कोडिंग मैं अपनी जर्सी सेवा में gzip-encoding सक्रिय नहीं कर सकता। यह मैं क्या कोशिश की है है:जर्सी 2/Grizzly

  1. Getting Started Guide से jersey-quickstart-grizzly2 मूलरूप आदर्श के साथ बाहर शुरू कर दिया।

  2. जोड़ा गया rc.register(org.glassfish.grizzly.http.GZipContentEncoding.class);

    (भी rc.register(org.glassfish.jersey.message.GZipEncoder.class); की कोशिश की है)

  3. mvn exec:java

  4. curl --compressed -v -o - http://localhost:8080/myapp/myresource

परिणाम के साथ परीक्षण किया गया साथ प्रारंभ निम्नलिखित है:

> GET /myapp/myresource HTTP/1.1 
> User-Agent: curl/7.22.0 (x86_64-pc-linux-gnu) libcurl/7.22.0 zlib/1.2.3.4 ... 
> Host: localhost:8080 
> Accept: */* 
> Accept-Encoding: deflate, gzip 
> 
< HTTP/1.1 200 OK 
< Content-Type: text/plain 
< Date: Sun, 03 Nov 2013 08:07:10 GMT 
< Content-Length: 7 
< 
* Connection #0 to host localhost left intact 
* Closing connection #0 
Got it! 

यही है, अनुरोध में Accept-Encoding: deflate, gzip बावजूद जवाब में कोई Content-Encoding: gzip है।

मुझे यहां क्या याद आ रही है ??

उत्तर

8

की तरह कोड का प्रयास करें:

HttpServer httpServer = GrizzlyHttpServerFactory.createHttpServer(
     BASE_URI, rc, false); 

CompressionConfig compressionConfig = 
     httpServer.getListener("grizzly").getCompressionConfig(); 
compressionConfig.setCompressionMode(CompressionConfig.CompressionMode.ON); // the mode 
compressionConfig.setCompressionMinSize(1); // the min amount of bytes to compress 
compressionConfig.setCompressableMimeTypes("text/plain", "text/html"); // the mime types to compress 

httpServer.start(); 
+0

चाल करने के लिए लगता है! मैं ग्रिज़ली 2.2.3 विचार पर था, इसलिए मेरे पास 'कंप्रेस कॉन्फिग' नहीं था लेकिन 'नेटवर्क लिस्टर' पर संबंधित विधियां उपलब्ध थीं। धन्यवाद! – aioobe

+0

हाँ, कृपया। ग्रिज़ली 2.3.5+ का प्रयोग करें – alexey

9

आप org.glassfish.jersey.server.filter.EncodingFilter रजिस्टर करने के लिए भी है। इस उदाहरण के लिए सक्षम बनाता deflate और gzip संपीड़न:

import org.glassfish.jersey.message.DeflateEncoder; 
import org.glassfish.jersey.message.GZipEncoder; 
import org.glassfish.jersey.server.ResourceConfig; 
import org.glassfish.jersey.server.filter.EncodingFilter; 
... 
private void enableCompression(ResourceConfig rc) { 
    rc.registerClasses(
      EncodingFilter.class, 
      GZipEncoder.class, 
      DeflateEncoder.class); 
} 

यह समाधान जर्सी विशिष्ट है और साथ ही काम करता है न केवल ग्रिजली के साथ, लेकिन JDK HTTP सर्वर के साथ।