1

Web サービスのジャージー実装があります。要件ごとの応答は、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 を正しく処理しないことが示されました。同様の問題でそれを切り替える方法のコードスニペットを見つけましたが、それをJerseyTestと組み合わせる方法がわかりません。

前もって感謝します

4

2 に答える 2

1

ジャージ テスト フレームワークを使用している場合のサンプル テスト ケースを次に示します。

@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());
}
于 2012-02-16T15:14:28.207 に答える