Anonymous - 2004-04-02

I heard WebResponse automatically unpack the response when the server send gzipped response. So I tried to test gzipped response from servlet, but when I tried to get a response from server, I get following error message

null
java.io.EOFException
    at java.util.zip.GZIPInputStream.readUByte(GZIPInputStream.java:200)
    at java.util.zip.GZIPInputStream.readUShort(GZIPInputStream.java:190)
    at java.util.zip.GZIPInputStream.readHeader(GZIPInputStream.java:130)
    at java.util.zip.GZIPInputStream.<init>(GZIPInputStream.java:58)
    at java.util.zip.GZIPInputStream.<init>(GZIPInputStream.java:68)
    at com.meterware.httpunit.WebResponse.defineRawInputStream(WebResponse.java:739)
    at com.meterware.httpunit.HttpWebResponse.<init>(HttpWebResponse.java:57)
    at com.meterware.httpunit.WebConversation.newResponse(WebConversation.java:61)
    at com.meterware.httpunit.WebWindow.getResource(WebWindow.java:162)
    at com.meterware.httpunit.WebWindow.getSubframeResponse(WebWindow.java:125)
    at com.meterware.httpunit.WebWindow.getResponse(WebWindow.java:118)
    at com.meterware.httpunit.WebWindow.getResponse(WebWindow.java:99)
    at com.meterware.httpunit.WebClient.getResponse(WebClient.java:86)

I'm testing against this servlet code that I found on newsgroup.
public void doGet(HttpServletRequest req, HttpServletResponse resp)
    throws ServletException, IOException {
           
        resp.setHeader("Cache-Control", "no-store");
        resp.setHeader("Content-Encoding", "gzip");
        resp.setContentType("text/html; charset=UTF-8");

        ByteArrayOutputStream buf = new ByteArrayOutputStream();

        GZIPOutputStream gzipOut = new GZIPOutputStream(buf);
        OutputStreamWriter outputStreamWriter = new OutputStreamWriter(gzipOut, "UTF-8");
        PrintWriter out = new PrintWriter(outputStreamWriter);
        out.println("<html><body>");
        out.print("Hi");
        out.println("</body></html>");
        out.close();

        resp.setContentLength(buf.size());
        resp.getOutputStream().write(buf.toByteArray());
}

And this is httpunit test case.

public void testGzippedResponse()
    throws Throwable {

    String targetApp = "http://localhost:9080/Gzipped/Gzipped";

    WebConversation wc = new WebConversation();

    String returnedPage = wc.getResponse(targetApp).getText();

    String message = "Hi";
    int index = returnedPage.indexOf(message);
    assertTrue("Returned page didn't include \"" + message + "\"",
        -1 != index);
}

Anyone can tell me what went wrong?

Thanks