users@jersey.java.net

Re: [Jersey] Disabling chunked encoding

From: Paul Sandoz <Paul.Sandoz_at_oracle.com>
Date: Wed, 15 Sep 2010 16:55:40 -0700

Hi Geoff,

AFAIK there is no switch with the LW HTTP server to turn on and off
chunked encoding.

The only thing i can think of is to try and use a response filter that
buffers:

public class BufferResponseFilter implements ContainerResponseFilter {

     private final class Adapter implements ContainerResponseWriter {
         private final ContainerResponseWriter crw;

         private ContainerResponse response;

         private ByteArrayOutputStream baos;

         Adapter(ContainerResponseWriter crw) {
             this.crw = crw;
         }

         public OutputStream writeStatusAndHeaders(long contentLength,
ContainerResponse response) throws IOException {
                 this.response = response;
                 return this.baos = new ByteArrayOutputStream();
             }
         }

         public void finish() throws IOException {
             OutputStream out = crw.writeStatusAndHeaders(baos.size(),
response);
             out.write(baos.toByteArray());
             crw.finish();
         }
     }

     public ContainerResponse filter(ContainerRequest request,
ContainerResponse response) {
         response.setContainerResponseWriter(
                 new Adapter(response.getContainerResponseWriter()));
         return response;
     }
}

ClassNamesResourceConfig r = new
ClassNamesResourceConfig(HttpJsonRpc.class);
r.getContainerResponseFilters().add(BufferResponseFilter.class);
...

Paul.

On Sep 14, 2010, at 6:27 PM, Geoff Flarity wrote:

> Hi,
>
> I've been using Jersey to create simple JSONRPC control logic in
> various daemons I've implemented. For the most part it's been great.
> However I've run into a bit of a snag as one of the client libraries
> (python) doesn't handle the chunked encoding properly. Since there's
> really no need for the chunked encoding with this application I'd
> like to simply disable it.
>
> Try as I might I can't find a way to do so. Here's the server code,
> the JsonRpc class is just a simple dispatcher using annotations.
>
>
> ClassNamesResourceConfig r = new
> ClassNamesResourceConfig(HttpJsonRpc.class);
>
> try {
>
> server = HttpServerFactory.create("http://0.0.0.0:"+port
> +"/", r);
>
> server.start();
>
> } catch (java.io.IOException e) {
>
> logger.severe("error starting http json rpc server on
> port "+port);
>
> throw new Error("error starting http json rpc server on
> port "+port, e);
>
> }
>
> Is it possible to disable this? If so I'd appreciate any pointers in
> the right direction.
>
>
>
> Thanks,
>
> Geoff
>
>