2010-12-20 26 views
1

我有jersey實現的web服務。每個需求的響應必須被gzip-ed。在JerseyTest下開啓grizzly的gzip壓縮功能

客戶端包含以下引導代碼接通的gzip:

Client retval = Client.create(); 
retval.addFilter(
    new com.sun.jersey.api.client.filter.GZIPContentEncodingFilter()); 

對於Tomcat的web.xml gzip的配置如下

<servlet> 
    <display-name>JAX-RS REST Servlet</display-name> 
    <servlet-name>JAX-RS REST Servlet</servlet-name> 
    <servlet-class> 
     com.sun.jersey.spi.container.servlet.ServletContainer 
    </servlet-class> 
    <load-on-startup>1</load-on-startup> 
    <init-param> 
     <param-name>com.sun.jersey.spi.container.ContainerRequestFilters</param-name> 
     <param-value>com.sun.jersey.api.container.filter.GZIPContentEncodingFilter</param-value> 
    </init-param> 
    <init-param> 
     <param-name>com.sun.jersey.spi.container.ContainerResponseFilters</param-name> 
     <param-value>com.sun.jersey.api.container.filter.GZIPContentEncodingFilter</param-value> 
    </init-param> 

,一切工作正常!

但我需要編寫調用我的服務的單元測試。我正在使用JerseyTest作爲基礎,並且在實踐中顯示出灰熊在沒有明確聲明的情況下不能正確處理gzip。我發現代碼片段如何在similar problem上切換,但我不知道如何將它與JerseyTest結合起來。

預先感謝您

回答

1

這裏是如果你使用的球衣測試Framwork的樣本測試案例:

@Test 
public void testGet(){  

    WebResource webResource = resource(); 

    ClientResponse result = webResource 
     .path("pathToResource") 
     .header("Accept-Encoding", "gzip") 
     .head(); 

    assertEquals(
     "response header must contain gzip encoding", 
     "[gzip]", 
     result.getHeaders().get("Content-Encoding").toString()); 
} 
+0

好,看起來合理 – Dewfy 2012-02-17 08:42:02

0

作爲客戶端API在當前版本的球衣變化,這是一個樣本與澤西島2.6合作的測試:

public class WebServicesCompressionTest extends JerseyTest { 

    @Path("/") 
    public static class HelloResource { 

     @GET 
     public String getHello() { 
      return "Hello World!"; 
     } 
    } 

    @Override 
    protected Application configure() { 
     enable(TestProperties.LOG_TRAFFIC); 
     return new ResourceConfig(
       HelloResource.class, 
       EncodingFilter.class, 
       GZipEncoder.class, 
       DeflateEncoder.class 
     ); 
    } 

    @Test 
    public void testGzip() { 
     Response response = target().request().acceptEncoding("gzip").get(Response.class); 

     assertThat(response.getStatus(), is(200)); 
     assertThat(response.getHeaderString("Content-encoding"), is("gzip")); 
    } 
}