Progreso de carga del cliente de Jersey

Tengo un cliente de Jersey que necesita subir un archivo lo suficientemente grande como para requerir una barra de progreso.
El problema es que, para una carga que requiere algunos minutos, veo que los bytes transferidos van al 100%Tan pronto como la aplicación haya comenzado.. Luego, toma unos minutos imprimir la cadena "al terminar".
Es como si los bytes se enviaran a un búfer, y yo estaba leyendo la velocidad de transferencia a búfer en lugar de la velocidad de carga real. Esto hace que la barra de progreso sea inútil.

Este es el código muy simple:

ClientConfig config = new DefaultClientConfig();
Client client = Client.create(config);
WebResource resource = client.resource("www.myrestserver.com/uploads");
WebResource.Builder builder = resource.type(MediaType.MULTIPART_FORM_DATA_TYPE);

FormDataMultiPart multiPart = new FormDataMultiPart();
FileDataBodyPart fdbp = new FileDataBodyPart("data.zip", new File("data.zip"));
BodyPart bp = multiPart.bodyPart(fdbp);
String response = builder.post(String.class, multiPart);

Para obtener el estado de progreso, he agregado un filtro ContainerListener, obviamente, antes de llamar a builder.post:

final ContainerListener containerListener = new ContainerListener() {

        @Override
        public void onSent(long delta, long bytes) {
            System.out.println(delta + " : " + long);
        }

        @Override
        public void onFinish() {
            super.onFinish();
            System.out.println("on finish");
        }

    };

    OnStartConnectionListener connectionListenerFactory = new OnStartConnectionListener() {
        @Override
        public ContainerListener onStart(ClientRequest cr) {
            return containerListener;
        }

    };

    resource.addFilter(new ConnectionListenerFilter(connectionListenerFactory));

Respuestas a la pregunta(2)

Su respuesta a la pregunta